自 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 框架,開發者可通過定義每一條日誌資訊的級別,來控制日誌生成過程。
目前該日誌框架已被廣泛用於業務系統開發,用來記錄日誌資訊。大多數情況下,開發者可能會將使用者輸入導致的錯誤資訊寫入日誌中。