log4j漏洞版本詳解

一、log4j漏洞

log4j是一個廣泛使用的Java日誌工具,由於其方便度和靈活程度,受到開發人員的喜愛。然而,log4j近期被曝出一個嚴重漏洞(CVE-2021-44228),攻擊者可以利用該漏洞在受影響的系統中執行任意代碼。這個漏洞是由於log4j在處理用戶輸入時存在缺陷引起的。具體而言,log4j在處理日誌消息時,可以通過採用”${“和”}”包裹用戶輸入的參數,來將其替換到日誌消息中,以便更好地組合日誌消息。假如用戶惡意構造這些參數,就能夠在日誌消息中注入命令執行語句,導致執行任意代碼。

二、log4j漏洞攻擊原理

攻擊者可以構造惡意的日誌消息,將惡意代碼注入到日誌消息中,通過包括但不限於HttpServletRequest、JNDI、Java Management Extensions(JMX)、Java Naming and Directory Interface(JNDI)、PrintWriter等語句執行代碼。因為這些語句應用十分廣泛,極容易受到攻擊。由於漏洞本質上是在提供日誌服務的應用程序中出現,攻擊者只需嚮應用程序提供惡意日誌消息,即可觸發漏洞。

三、log4j2漏洞

除了log4j,log4j2版本也發現了漏洞。log4j2漏洞(CVE-2021-45046)功能上與log4j漏洞十分相似,由於同樣存在缺陷,它在接收到特殊字符時,可以觸發任意代碼執行。這個漏洞在log4j2版本2.0-2.14.1和log4j-1.2-17及之前版本中出現。和log4j漏洞一樣,攻擊者可以構造惡意的日誌消息,將惡意代碼注入到日誌消息中,通過腳本執行代碼。

四、log4j2漏洞修復

根據官方通告,log4j2的漏洞已經修復。修復方式是在log4j-core 2.14.2之後的版本中,使用JNDI查詢時默認禁用了“LDAP協議處理器”和“XBean”模塊。這種修復方案的難度較低,大家只需要升級到最新版本即可。需要注意的是,如果您正在使用log4j2 2.0-2.14.1或log4j-1.2-17及之前版本,則應立即升級到最新版本。

五、log4j漏洞影響版本

根據log4j官方通告,log4j漏洞影響一系列版本,包括但不限於:

log4j-1.2.x
log4j:1.2.17及之前版本
log4j-1.2.8
log4j:1.2.14
log4j:1.2.12
log4j:1.2.11
log4j:1.2.9
log4j:1.2.3
log4j-1.2.17
log4j:1.2.15
log4j:1.2.13
log4j:1.2.16
log4j:1.2.10
log4j:1.2.7
log4j:1.2.1
log4j-1.3-Alpha (當時的實驗版本,已經停止開發)
log4j-1.4.x
log4j:1.4.2至1.4.17
log4j:1.4.1
log4j:1.4
log4j-1.5.x及以上版本
log4j:1.5.0至1.5.16
log4j:1.5.17至1.5.20
log4j:1.5.21至1.5.22
log4j:1.5.23
log4j:1.5.24
log4j-1.6.x及以上版本
log4j-2.x版本
log4j:2.0至2.17 (<=2.17.0)

六、log4j漏洞是什麼

log4j漏洞是一種用於java日誌工具log4j的通用代碼注入漏洞,允許攻擊者在受污染的應用程序中執行任意代碼。攻擊者可以嚮應用程序輸入帶有特殊代碼的字符串,以嵌入在輸出日誌中也得以執行。該漏洞是由於log4j中錯誤地實現了“${}”語法引起的。攻擊者可以利用這種漏洞來編寫特殊字符串,並植入mac.osx.TorsionBean類,從而竊取服務器目錄中的文件。

七、log4j漏洞是誰發現的

log4j漏洞是由一名實名為“y2k23xz”(匿名人士)的中國安全研究人員發現的。實際上,他早在11月23日就向Apache Software Foundation報告了這個漏洞,並發布了漏洞利用腳本。此後,Apache Software Foundation速度非常快地發布了更新。

八、log4j2漏洞修復方案

官方提供了多種log4j2漏洞的修復方案,包括關閉JNDI查詢、配置黑名單、升級新版本等。

ConfigurationBuilder builder = ConfigurationBuilderFactory.newConfigurationBuilder();
DefaultReliabilityStrategy strategy = new DefaultReliabilityStrategy();
if (useXml) {
    builder.setConfigurationName("RollingBuilderTest")
        .addProperty("filename", "target/rolling-builder-test.log")
        .addProperty("rolloverStrategy.Threshold", "1")
        // Use special entity reference for "java:" prefix to avoid outputting it as a legitimate JNDI context name
        .addProperty("log4j2.patternSelector.default.pattern",
            "" +
            "" +
            "");
} else {
    builder.setConfigurationName("RollingBuilderTest")
        .addProperty("filename", "target/rolling-builder-test.log")
        .addProperty("rolloverStrategy.Threshold", "1")
        // Use special entity reference for "java:" prefix to avoid outputting it as a legitimate JNDI context name
        .addProperty("log4j2.patternSelector.default.pattern",
                "${java:"java.naming.factory.initial":-""}${java:"java.naming.provider.url":-""}\\tab %d{ISO8601} %p %c{1.} [%t] %m%n");
}
builder.setStatusLevel(Level.ERROR);
builder.setConfigurationReliabilityStrategy(strategy);
...

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/284633.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-22 15:41
下一篇 2024-12-22 15:41

相關推薦

發表回復

登錄後才能評論