近日,棱镜七彩安全研究院监测到编号为:CVE-2021-45105的Apache Log4j2拒绝服务攻击漏洞,当系统日志配置使用非默认的模式布局和上下文查找时,攻击者可以通过构造包含递归查找数据包的方式,控制线程上下文映射 (MDC),导致StackOverflowError产生并终止进程,实现拒绝服务攻击。
目前只有log4j-core JAR 文件受此漏洞影响,仅使用log4j-api JAR文件而不使用log4j-core JAR文件的应用程序不受此漏洞的影响。
项目介绍
Apache Log4j2 是一款开源的 Java 日志记录工具,大量的业务框架都使用了该组件。
项目地址
https://logging.apache.org/log4j/2.x/
漏洞概述
该漏洞危害较小,log4j2默认配置不受此漏洞影响,仅当日志配置使用带有上下文 Lookup 的非默认模式,例如:$${ctx:loginId}时存在此漏洞。
Log4j2 2.17.0 之前版本没有防止自引用 lookups 的不受控制的递归,攻击者可以制作包含递归查找的恶意输入数据,导致 StackOverflowError 错误而终止进程,这也就是 DOS(Denial of Service)拒绝服务攻击。
从 Log4j 2.17.0 版本开始,只有配置中的 lookup 字符串才允许递归扩展,另外,在任何其他用法中,仅解析最顶级的 lookup,不解析任何嵌套的 lookups。
影响版本
Log4j2 2.0-alpha1 到 2.16.0
漏洞复现
存在漏洞的log4j2 xml配置文件示例:
Poc:
修复方式
1、升级版本
立马升级到最新版本:Log4j 2.17.0,最新正式版本下载:
https://logging.apache.org/log4j/2.x/download.html
最新 Maven 依赖:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.0</version>
</dependency>
spring-boot-starter-log4j2 尚未更新,可以先覆盖其内置版本:
<properties>
<log4j2.version>2.17.0</log4j2.version>
</properties>
2、临时解决
如果你不想升级版本,可以考虑使用以下 2 种临时解决方案:
1)在 PatternLayout 日志配置中,替换上下文 Lookups 中的 ${ctx:loginId} 或者 $${ctx:loginId} 为线程上下文映射模式(%X, %mdc, or %MDC)。
2)或者,删除对上下文 Lookups 中对 ${ctx:loginId} or $${ctx:loginId} 的引用,它们一般来自应用程序外部,如 HTTP Header 或用户输入。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)