高危预警!Log4j2再曝CVE-2021-45105拒绝服务漏洞

这是一个拒绝服务(DoS)漏洞,攻击者可以利用它导致使用了受影响版本 Log4j2 的应用程序崩溃,从而中断服务。hackers.jpg.1f7f4852ab042ccefb6ab1dc62200ae7.jpg📄 漏洞详情

*   漏洞原理:在 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 版本中进行了修复。