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