錯誤問題之“Apache Log4j 漏洞,在版本為包含2.14以內!”


漏洞概述

Apache Log4j是一個用於Java的日志記錄庫,其支持啟動遠程日志服務器。

Log4j 1.2 中包含一個 SocketServer 類,該類容易受到不可信數據反序列化的影響,當偵聽不可信網絡流量以獲取日志數據時,該類可被利用與反序列化小工具結合使用以遠程執行任意代碼。攻擊者可利用該漏洞執行任意代碼。

這會影響從 1.2 到 2.14 的 Log4j 版本。

在2021 年 12 月 9 日,該項目被曝存在 嚴重安全漏洞 ,攻擊者只需要向目標機傳入一段特殊代碼,就能觸發漏洞,自由地在遠程執行任意代碼來控制目標機器!

因為 Log4j 作為 Java 的知名日志記錄框架,憑借其靈活高效的日志生成能力,不僅被眾多自研項目所使用,很多有名項目作為了基礎框架使用。

像 Redis、Kafka、Elasticsearch、Apache Flink、Apache Druid 等等。

可以想象這個漏洞的影響范圍有多大,甚至被很多媒體稱之為 “核彈級” 漏洞!

apache的問題記錄點:https://logging.apache.org/log4j/2.x/

漏洞細節

根據 CVE 漏洞公開網站的記錄,該漏洞存在於 Apache log4j <= 2.14.1 的版本(但事實上,影響的版本范圍比這更大)。

攻擊者可以通過 log4j 的 lookup 替換功能向其配置文件的任意位置注入代碼(類似 SQL 注入,把 ${變量} 替換為 ${實際代碼})

再加上這些版本中用到的 JNDI 特性並沒有為 LDAP 提供足夠的保護,使得注入的任意代碼都能被肆無忌憚地執行。

測試1

不過我針對漏洞做了下測試,發現好像Apache 找已有了防備,正常情況下我被拒絕了

原因:

是rmi序列化漏洞,apach設置了過濾策略。

在注入時限制了一些類序列化。

在C:\Program Files\Java\jre1.8.0_161\lib\security\java.security【注意,你的文件目錄可能不是這個目錄】

處理方案:

更改為sun.rmi.registry.registryFilter=*即可。

 

 

測試2

總體介紹

接口

創建服務接口

進攻腳本

 

發送請求(結果彈出計算器)

 

   

 解決方案

1.升級到2.15.1版本及以上

目前 Apache 官方已經針對該漏洞發布了補丁版本 2.15.0-rc2,默認禁用了 lookup 行為,在確保升級該版本不會對項目的其他依賴產生沖突的情況下,建議升級。

該方案雖然比較簡單粗暴,但這個版本是否穩定?是否沒有漏洞呢?這很難說。

因在maven倉庫中沒有log4j-2.15.0-rc2.jar 。地址:https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2
jar包上傳到本地maven倉庫/從本地引入jar文件。
導入完成后 把jar引入到pom文件中。【我使用的maven倉庫】

2.修改配置

a、修改jvm參數 -Dlog4j2.formatMsgNoLookups=true
b、系統環境變量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS設置為true
c、修改配置:log4j2.formatMsgNoLookups=True

如果你不想升級 log4j 的版本,擔心會和項目其他依賴產生沖突的話,可以采用 Apache 官方推薦的臨時解決方案 —— 修改參數。

如果你的 log4j 版本 >= 2.10,可以通過設置系統屬性 log4j2.formatMsgNoLookups 或者環境變量 LOG4J_FORMAT_MSG_NO_LOOKUPS 為 true 來禁用 lookup 行為;如果版本在 2.0-beta9 到 2.10.0 之間, 可以直接移除從 classpath 中移除 JndiLookup 類,用以下命令即可:

zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class

這個方案相對不容易引發項目的沖突,如果項目很緊急且重要,先用它處理吧。

3.換框架

直接換成別的日志框架,如logback 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM