Apache Log4j 的 2.0-alpha1 到 2.16.0 版本存在新的漏洞 CVE-2021-45105 ,此漏洞评分 7.5 ,且在刚发布的 Log4j 2.17.0 (Java 8) 中得到了修复。如果把安全公司 Praetorian 发现的第三个信息泄露漏洞也算进去,这应该是 Log4j 的第四个漏洞了。
漏洞详情
Apache Log4j2 版本 2.0-alpha1 到 2.16.0 没有防止自引用查找的不受控制的递归。当日志配置使用带有上下文查找的非默认模式布局(例如,$${ctx:loginId})时,控制线程上下文映射 (MDC) 输入数据的攻击者可以制作包含递归查找的恶意输入数据,导致 StackOverflowError 将终止进程。这也称为 DOS(拒绝服务)攻击。
缓解措施
从 2.17.0 版本(对于 Java 8)开始,只有配置中的查找字符串被递归扩展;在任何其他用法中,仅解析顶级查找,不解析任何嵌套查找。
在以前的版本中,可以通过确保您的日志记录配置执行以下操作来缓解此问题:
- 在日志记录配置的 PatternLayout 中,用线程上下文映射模式(%X、%mdc 或 %MDC)替换 ${ctx:loginId} 或 $${ctx:loginId} 等上下文查找。
- 否则,在配置中,删除对上下文查找的引用,如 ${ctx:loginId} 或 $${ctx:loginId},它们源自应用程序外部的源,如 HTTP 标头或用户输入。
Log4j 的漏洞有点像计算机世界的新冠,一波未平一波又起,还时不时出现一些变种...