高危预警!Log4j2再曝CVE-2021-45105拒绝服务漏洞
这是一个拒绝服务(DoS)漏洞,攻击者可以利用它导致使用了受影响版本 Log4j2 的应用程序崩溃,从而中断服务。
📄 漏洞详情
* 漏洞原理:在 Log4j2 2.17.0 之前的版本中,如果日志配置使用了非默认的 PatternLayout 并包含上下文查找(Context Lookup),例如 {ctx:loginId},攻击者可以通过构造包含递归查找的恶意输入数据,触发无限递归,最终导致 StackOverflowError 错误,使进程终止。
* 影响版本:Apache Log4j2 从 2.0-alpha1 到 2.16.0 的所有版本。
* 受影响组件:只有 log4j-core JAR 文件受此漏洞影响。如果您的应用仅使用了 log4j-api 而没有使用 log4j-core,则不受此漏洞影响。
🛡️ 解决方案
官方修复方案
最直接有效的方法是立即将 log4j-core 组件升级到安全版本 Log4j 2.17.0 或更高版本。
对于使用 Maven 的项目,可以将依赖更新为:
org.apache.logging.log4j
log4j-core
2.17.0
临时缓解措施
如果暂时无法升级版本,可以采取以下两种临时方案来降低风险:
1. 修改日志配置:在日志配置的 PatternLayout 中,将上下文查找(如 ${ctx:loginId})替换为线程上下文映射模式(如 %X、%mdc 或 %MDC)。
2. 移除外部引用:在日志配置中,删除那些源自应用程序外部(如 HTTP 请求头或用户输入)的上下文查找引用。
💡 背景信息
CVE-2021-45105 是在著名的 Log4Shell (CVE-2021-44228) 漏洞之后,Log4j2 组件暴露出的又一个严重安全问题。Apache 官方在发布 2.15.0 和 2.16.0 版本尝试修复前期漏洞后,又发现了此问题,并最终在 Log4j 2.17.0 版本中进行了修复。
