前言
一句話總結issue:如果你使用的是 Log4j 1.x、Logback 或者其他日志框架,這次就可以幸免于難,如果你使用Spring Boot默認日志,也是沒有問題的,因為默認是Commons Logging,
一句話修復solution:升級springboot到最新v2.5.8和v2.6.2以及后續版本,確保安全;如果單獨依賴了log4j2日志,請強制使用最新版本v2.15.0換切換其他日志系統或者追加引數-Dlog4j2.formatMsgNoLookups=true,
UPDATE:
- 2021/12/14 09:30 新增RCA
- 2021/12/14 22:00 加更:log4j2官方已推送中央倉庫2.16.0版本
- 2021/12/15 07:30 加更:ESET NOD32發布Apache Log4j漏洞解決方案,列舉部分受影響的框架/平臺
Reference:
-
log4j 2.16.0 MVNREPOSITORY
-
官方指南Log4J2 Vulnerability and Spring Boot
-
ESET發布Apache Log4j漏洞解決方案,請政企客戶檢查更新!
背調
正如您在新聞中所看到的,針對流行的 Log4J2 庫的新零日漏洞利用已被報道,該庫可允許攻擊者遠程執行代碼, 該漏洞已通過針對 log4j-core jar 的 CVE-2021-44228 報告,并已在 Log4J v2.15.0 中修復,

此漏洞由Lookup功能引發,Log4j在默認情況下會開啟Lookup功能,提供給客戶一種添加特殊值到日志中的方式,此功能中也包含了對JNDI的Lookup,但由于Lookup對加載的JNDI內容未做任何限制,使得攻擊者可以通過JNDI注入實作遠程加載惡意類到應用中,從而造成RCE,

漏洞定位: log4j的真正漏洞代碼出現在log4j-core的子組件,修復其他組件不一定能有效消除漏洞,很多產品都產生了誤報的行為,但是為了安全起見,建議使用專業的分析平臺或者強制升級比較穩妥,以絕后患,

部分受影響框架
目前受影響的Apache Log4j2版本:2.0 ≤ Apache Log4j <= 2.14.1
可能的受影回應用包括但不限于如下:
- Spring-Boot-strater-log4j2
- Apache Struts2
- Apache Solr
- Apache Flink
- Apache Druid
- ElasticSearch
- flume
- dubbo
- Redis
- logstash
- kafka
Spring Boot 用戶如何處理
Spring Boot 用戶只有在將默認日志系統切換到 Log4J2 時才會受到此漏洞的影響, 我們包含在 spring-boot-starter-logging 中的 log4j-to-slf4j 和 log4j-api jar 不能被單獨利用, 只有使用 log4j-core 并在日志訊息中包含用戶輸入的應用程式容易受到攻擊,
Spring Boot 即將發布的 v2.5.8 和 v2.6.2 版本(2021 年 12 月 23 日到期)將采用 Log4J v2.15.0,但由于這是一個如此嚴重的漏洞,您可能希望覆寫我們的依賴項管理并盡快升級您的 Log4J2 依賴項,
Maven 處理log4j2指南
對于 Maven 用戶,您可以按照這些說明進行設定 log4j2.version 屬性.
<properties>
<log4j2.version>2.15.0</log4j2.version>
</properties>
如何確認是否成功修復?運行 ./mvnw dependency:list | grep log4j檢測版本是否為2.15.0.
通過JVM引數處理漏洞
如果程式/系統很難升級,則可以選擇追加引數避免該漏洞,
設定log4j2.formatMsgNoLookups系統引數為true即可
例如
java -Dlog4j2.formatMsgNoLookups=true -jar myapp.jar.
設定系統環境變數解決
將系統變數“LOG4J_FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS” 設定為 “true”
powered by zhengkai.blog.csdn.net
設定log4j2.component.properties解決
在專案 classpath 目錄下添加 log4j2.component.properties 組態檔,設定 log4j2.formatMsgNoLookups=true
如何查看框架的log4j版本
可以通過maven倉庫分解對應的log4j版本
https://mvnrepository.com
Jfinal與log4j漏洞有關嗎
例如Jfinal,可以通過maven倉庫分解對應的log4j版本
https://mvnrepository.com/artifact/com.jfinal/jfinal/4.1

拆解得知是1.2.16,安全!
如果你使用最新版本4.9.7,也是安全的,因為用的還是1.2.x
https://mvnrepository.com/artifact/com.jfinal/jfinal/4.9.17

spring-boot-starter-logging
可以到 https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-logging/2.5.7
例如你使用了spring-boot-starter-logging 2.5.7 ,包含了log4j的2.14.1版本,還是相當危險,最好等待官方發最新 2.5.8
Spring-Boot-strater-log4j2更是絕對的危險,等候官方推送新版解決,

使用Scantist SCA檢測及分析
Scantist SCA平臺 https://scantist.io , 來源
為了解決開源軟體的漏洞檢測和管理的問題,Scantist SCA產品是一套完整的解決方案,同時支持原始碼和二進制掃描,通過提供對應用程式軟體供應鏈的更大可視性,主動幫助企業管理開源庫的安全性和合規性風險,Scantist SCA通過分析軟體應用程式中已知的第三方庫和組件的特殊簽名,并與漏洞和許可證資料庫進行交叉對比,以識別軟體開發和部署階段中的安全隱患,

分析報告

加更:Log4J 2.16.0修復版發布
修復Log4J2 Vulnerability問題
log4j 2.16.0 MVNREPOSITORY
更新內容:
-
洗掉了訊息Lookups,目的是采取強化措施以防止 CVE-2021-44228,此舉措不是修復 CVE-2021-44228所必須的,
-
雖然版本 2.15.0 洗掉了處理Lookups和利用JNDI從日志訊息和地址訪問的問題,Log4j團隊認為默認啟用 JNDI 會引入未知的風險,從版本 2.16.0 開始,JNDI 功能是默認情況下禁用,可以通過 log4j2.enableJndi重新啟用系統屬性,在不受保護的背景關系中使用 JNDI 是一個很大的問題 安全風險,應該在這個庫和 所有其他使用 JNDI 的 Java 庫,
-
在 2.15.0 版本之前,Log4j 會在模式布局(Pattern Layout)中包含的訊息或引數中自動決議 Lookups,這行為不再是默認值,必須通過指定啟用%msg{lookup},:
修正錯誤
-
LOG4J2-3208:默認禁用 JNDI,需要 log4j2.enableJndi設定為 true 以允許 JNDI, LOG4J2-3211:完全洗掉對訊息查找的支持,
-
Apache Log4j 2.16.0 至少需要 Java 8 才能構建和運行,Log4j 2.12.1 是最后一個支持 Java 7 的版本,Java 7 不是Log4j 團隊的長期支持版本,
-
有關 Apache Log4j 2 的完整資訊,包括有關如何提交錯誤報告、補丁或改進建議,請參閱 Apache Apache Log4j 2 網站:
https://issues.apache.org/jira/browse/LOG4J2-2975
https://logging.apache.org/log4j/2.x/download.html
ESET快速回應模塊檢測攔截此漏洞: JAVA/Exploit.CVE-2021-44228
ESET已經在全球范圍內推動了組件更新,請確保“快速回應模塊”已經更新到版本19417以上


其他情況
歡迎討論和補充!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/380892.html
標籤:java
