自 12 月 10 日起,Apache Log4j2 已接连曝出多个破绽,并在寰球范畴内造成了影响。刚刚过来的 12 月 18 日,Apache Log4j 又被曝出第三个破绽:CVE-2021-45105 —— Apache Log4j 2.0-alpha1 到 2.16.0 的版本无奈避免自援用查找的不受控递归(Apache 官网已公布 2.17.0 版本修复)。
(相干浏览:
- 高危 Bug!Apache Log4j2 近程代码执行破绽:官网正加急修复中!
https://segmentfault.com/a/11… - Log4j 高危 Bug 已被连夜修复!维护者:“为了实现向后兼容性未删除旧性能而导致破绽”
https://segmentfault.com/a/11…)
破绽详情
破绽形容:
Apache 官网示意,对于 Apache Log4j 2.17.0 之前的版本而言,当日志记录配置应用具备上下文查找的非默认模式布局时(PatternLayout 与 Context Lookup:例如,$${ctx:loginId})就很容易受到破绽的影响。胜利利用此破绽后,具备线程上下文映射(MDC)输出数据控制权的攻击者就可能会伪造蕴含递归查找的歹意输出数据,导致 StackOverflower 谬误,从而终止过程,也被称为 DOS(拒绝服务)攻打。
据悉,最新破绽是由 Akamai Technologies 的 Hideki Okamoto 和一名匿名破绽钻研人员发现的。Apache 留神到,只有 Log4j 外围 JAR 文件受到 此次 CVE-2021-45105 破绽的影响。
破绽影响:
攻击者胜利利用此破绽或导致拒绝服务(DoS)。
破绽评分详细信息:
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
Apache 官网已公布 2.17 版本修复
好在,12 月 19 日,该破绽 CVE-2021-45105 Apache Log4j 已在官网最新公布的 Log4j 2.17.0 (Java 8) 版本中失去了修复。
缓解措施包含:利用 2.17.0 版本修补程序,并在日志配置的 PatternLayout 中应用线程上下文映射模式(%X,%mdc 或 %mdc)替换上下文查找如 ${ctx:loginId} 或 $$${ctx:loginId}。Apache 还倡议删除对 ${ctx:loginId} 或 $${ctx:loginId} 等配置中的上下文查找的援用,这些援用来自应用程序内部的源,如 HTTP 头部或用户输出。
Apache 官网 2.17.0 版本链接:
https://logging.apache.org/lo…
也就是说,从 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
Apache Log4j2 最后是由 Ceki Gülcü 编写,是 Apache 软件基金会 Apache 日志服务项目的一部分。Log4j 是几种 Java 日志框架之一。而 Apache Log4j2 是对 Log4j 的降级,相比其前身 Log4j1 有了更显著的改良,同时修复了 Logback 架构中的一些固有问题。
通过 Apache Log4j2 框架,开发者可通过定义每一条日志信息的级别,来管制日志生成过程。
目前该日志框架已被宽泛用于业务零碎开发,用来记录日志信息。大多数状况下,开发者可能会将用户输出导致的错误信息写入日志中。