自 12 月 10 日起,Apache Log4j2 已接连曝出多个漏洞,并在全球范围内造成了影响。刚刚过去的 12 月 18 日,Apache Log4j 又被曝出第三个漏洞:CVE-2021-45105 —— Apache Log4j 2.0-alpha1 到 2.16.0 的版本无法防止自引用查找的不受控递归(Apache 官方已发布 2.17.0 版本修复)。

相关阅读:
Apache 官方表示,对于 Apache Log4j 2.17.0 之前的版本而言,当日志记录配置使用具有上下文查找的非默认模式布局时(PatternLayout 与 Context Lookup:例如,$${ctx:loginId})就很容易受到漏洞的影响。成功利用此漏洞后,具有线程上下文映射(MDC)输入数据控制权的攻击者就可能会伪造包含递归查找的恶意输入数据,导致 StackOverflower 错误,从而终止进程,也被称为DOS(拒绝服务)攻击。据悉,最新漏洞是由 Akamai Technologies 的 Hideki Okamoto 和一名匿名漏洞研究人员发现的。Apache 注意到,只有 Log4j 核心 JAR 文件受到 此次CVE-2021-45105 漏洞的影响。CVE:CVE-2021-45105
评分:7.5(高)
向量:CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
好在,12 月 19 日,该漏洞 CVE-2021-45105Apache Log4j 已在官方最新发布的 Log4j 2.17.0 (Java 8)版本中得到了修复。缓解措施包括:应用 2.17.0 版本修补程序,并在日志配置的PatternLayout 中使用线程上下文映射模式(%X,%mdc或%mdc)替换上下文查找如 ${ctx:loginId} 或 $$${ctx:loginId}。Apache 还建议删除对${ctx:loginId} 或 $${ctx:loginId} 等配置中的上下文查找的引用,这些引用来自应用程序外部的源,如 HTTP 头部或用户输入。https://logging.apache.org/log4j/2.x/security.html
也就是说,从 2.17.0 版本(对于 Java 8)开始,仅配置中的查找字符串被递归扩展;在任何其他用法中,仅解析顶级查找,不解析任何嵌套查找。自 12 月 10 日凌晨 Apache Log4j2 首个“高危”远程代码执行漏洞被发现以来,官方已经紧急发布了 Apache Log4j 2.15.0 正式版,解决了该漏洞。但随后的几天,又被发现在 Apache Log4j 2.15.0 版本上存在敏感数据泄露的漏洞,可用于从受影响的服务器下载数据,随后官方并建议用户尽快升级到 2.16.0。此次,又发现了 Apache Log4j 2.0-alpha1 到 2.16.0 版本不受控制的递归漏洞,已是 Apache Log4j 被曝出的第三个漏洞了。
Apache Log4j2 最初是由 Ceki Gülcü 编写,是 Apache 软件基金会 Apache 日志服务项目的一部分。Log4j 是几种 Java 日志框架之一。而 Apache Log4j2 是对 Log4j 的升级,相比其前身 Log4j1 有了更显著的改进,同时修复了 Logback 架构中的一些固有问题。通过 Apache Log4j2 框架,开发者可通过定义每一条日志信息的级别,来控制日志生成过程。目前该日志框架已被广泛用于业务系统开发,用来记录日志信息。大多数情况下,开发者可能会将用户输入导致的错误信息写入日志中。