Logback 也爆漏洞了,總結(jié)下最近log相關(guān)的幾個漏洞
大家好,我是君哥,周末又要結(jié)束了。
前些天 Apache Log4j2 接連報了幾個重大漏洞,好在我們的系統(tǒng)使用的 logback,可當(dāng)我們正慶幸的時候,logback 也爆出漏洞了。今天我們一起來看一下這幾個漏洞。
CVE-2021-42550
先看一下官方的漏洞描述:
In logback version 1.2.7 and prior versions, an attacker with the required privileges to edit configurations files could craft a malicious configuration allowing to execute arbitrary code loaded from LDAP servers.
The vulnerability is considered to pose a lesser threat than log4shell because it requires access to logback's configuration file by the attacker, sign of an already compromised system.This CVE-2021-42550 is intended to prevent an escalation of an existing flaw to a higher threat level.
首先讓我們松一口氣的是,logback 的這個漏洞不像 log4j 那樣嚴(yán)重。如果是 SpringBoot 項目,沒有做日志配置的話,默認(rèn)使用的就是 logback。
logback 官方的修復(fù)速度也是非常給力,短時間內(nèi)發(fā)布了 5 個版本:
- 14th of December, 2021, Release of version 1.2.8
- 16th of December, 2021, Release of version 1.3.0-alpha11
- 16th of December, 2021, Release of version 1.2.9
- 22nd of December, 2021, Release of version 1.3.0-alpha12
- 23rd of December, 2021, Release of version 1.2.10
從上面官方的截圖我們可以看到,有兩個方法可以避開這個漏洞
- logback 版本升級到 1.2.9
- 把 logback.xml 文件配置為只讀
SpringBoot 項目也跟著 logback 的升級做了升級,比如 SpringBoot v2.6.2 版本就把 logback 升級到了 1.2.9。
但是對于真實的系統(tǒng)環(huán)境,升級 SpringBoot 版本牽扯到的測試太多了,要快速修復(fù)還是升級一下 logback 版本最快。
- <dependency>
- <groupId>ch.qos.logback</groupId>
- <artifactId>logback-classic</artifactId>
- <version>1.2.9</version>
- </dependency>
CVE-2021-44228
這個漏洞的另一個編號是 CNVD-2021-95914。
Log4j2 日志組件在處理程序日志記錄時存在 JNDI 注入缺陷,攻擊者可以利用該漏洞,獲得目標(biāo)服務(wù)器權(quán)限,向目標(biāo)服務(wù)器發(fā)送惡意數(shù)據(jù),在目標(biāo)服務(wù)器任意代碼執(zhí)行。這個攻擊主要針對有外網(wǎng)訪問的應(yīng)用,如果沒有外網(wǎng)訪問,可以不用太擔(dān)心。
影響范圍:2.0 <= Apache log4j
修復(fù)措施:
- 升級 Log4j2 版本到 2.16.0
- 改用日志框架,使用 Log4j 或者 logback
- 添加 jvm 啟動參數(shù) -Dlog4j2.formatMsgNoLookups=true
- 在應(yīng)用 classpath 下添加配置文件 log4j2.component.properties,文件內(nèi)容為 log4j2.formatMsgNoLookups=true
- 升級 JDK 版本,使用 11.0.1、8u191、7u201、6u211 及以上的高版本
- 禁用 JNDI,比如在 spring.properties 里添加 spring.jndi.ignore=true
- 部署使用第三方防火墻產(chǎn)品進行安全防護,并更新 WAF、RASP 規(guī)則
可以看到,最快的方式就是添加 jvm 參數(shù)然后重啟服務(wù)。
CVE-2021-45046
CVE-2021-44228 的一種形式,如啟 Log4j2 用日志配置查找(例如,$${ctx:loginId})或上下文映射模式(%X、%mdc或%MDC)時,將允許遠(yuǎn)程攻擊者使用JNDI查找模式加載惡意類,從而導(dǎo)致遠(yuǎn)程代碼執(zhí)行或信息漏洞等風(fēng)險。
這個漏洞只對使用 log4j-core 的應(yīng)用受影響。
影響范圍:2.0 <= Apache log4j
建議:將 Log4j2 升級到 1.17.0。
CVE-2021-45105
由于 Log4j2 某些特殊配置,使用非默認(rèn)的模式布局和上下文查找(例如,$${ctx:loginId})時,攻擊者可以通過構(gòu)造包含遞歸查找數(shù)據(jù)包的方式,控制線程上下文映射 (MDC),導(dǎo)致 StackOverflowError 產(chǎn)生并終止進程,實現(xiàn)拒絕服務(wù)攻擊。
這個漏洞只對使用 log4j-core 的應(yīng)用受影響。
影響范圍:2.0 <= Apache log4j
建議:將 Log4j2 升級到 1.17.0。
CVE-2021-4104
這個攻擊是針對 Log4j1.x 而不是 Log4j2。
當(dāng)應(yīng)用程序啟用了 JMSAppende,且攻擊者可以控制 JMSAppender 添加 JMSBroker 時,將允許遠(yuǎn)程攻擊者進行代碼執(zhí)行攻擊。
影響范圍:Log4j1.x版本
因 2015 年 8 月起官方已停止維護 Log4j1.x 版本組件,因此不會提供 Log4j1.x 的版本更新,可以從類路徑中移除JMSAppender 類進行修復(fù)。命令如下:
zip-q-dlog4j-*.jarorg/apache/log4j/net/JMSAppender.class
總結(jié)
上面的漏洞都是跟日志組件相關(guān)的,官方已經(jīng)修復(fù)。
如果使用 logback,只要把版本升級到 1.2.9 之上就可以。
如果使用了 log4j2,把版本升級到最新版本,也就是 2.17.0 就可以了。
如果使用 log4j,可以從 classpath 中移除 JMSAppender,但這不是長久之計,建議還是升級到 log4j2 或者改用 logback,畢竟 log4j 1.x 版本官方已經(jīng)不再維護了。
最后,作為程序員,要時刻關(guān)注系統(tǒng)中的技術(shù)棧,關(guān)注新版本修復(fù)的問題是否對系統(tǒng)有影響。