半壁互聯(lián)網(wǎng)江山都中招!開源軟件被曝“十年最重大漏洞”,維護(hù)人竟只有3名志愿者
大數(shù)據(jù)文摘出品
都說開源工具好,bug一來才是真煩惱。
就在前兩天,全球知名開源日志組件Apache開源項(xiàng)目Log4j遠(yuǎn)程代碼執(zhí)行漏洞細(xì)節(jié)被公開。
編號(hào)CVE-2021-44228的漏洞由阿里云安全研究團(tuán)隊(duì)發(fā)現(xiàn)、于11月底通報(bào)Apache基金會(huì)的遠(yuǎn)端程式碼執(zhí)行漏洞。它是Log4j的JNDI API未能驗(yàn)證遠(yuǎn)端攻擊者由惡意LDAP或其他端點(diǎn)發(fā)送修改過參數(shù)的log訊息,而自LDAP伺服器下載惡意程式碼至受害系統(tǒng)執(zhí)行,最嚴(yán)重可接管整臺(tái)系統(tǒng)。
盡管美國(guó)NIST漏洞資料庫(kù)并未給定CVE-2021-44228的CVSS 3.1風(fēng)險(xiǎn)值,許多安全廠商皆給出了最嚴(yán)重等級(jí)的10分。
Tenable稱其為10年最重大漏洞,Cloudflare執(zhí)行長(zhǎng)Matthew Price則說這是Heartbleed、ShellShock以來最嚴(yán)重的漏洞。
該資料庫(kù)的用戶范圍涵蓋全球,比如蘋果iCloud、推特、微軟游戲Minecraft及Valve游戲平臺(tái)Steam等,此外,ElasticSearch、Elastic Logstash、Redis及美國(guó)國(guó)安局的Ghidra、以及CloudFlare、騰訊、百度等大型網(wǎng)站服務(wù)也都使用這項(xiàng)元件。
因此本次受影響范圍之大足以想見。
但在本次史詩(shī)級(jí)漏洞被曝光的背后,還存在一個(gè)令人心酸的事實(shí),那就是日常維護(hù)Apache Log4j2項(xiàng)目的只有3人。
企業(yè)都用的開源日志工具Log4j
在了解整場(chǎng)事件之前,我們先來看看Log4j。
Log4j是一款開源Java日志記錄工具,主要用來監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應(yīng)用進(jìn)行統(tǒng)計(jì)分析工作;跟蹤代碼運(yùn)行時(shí)軌跡,作為日后審計(jì)的依據(jù);擔(dān)當(dāng)集成開發(fā)環(huán)境中的調(diào)試器的作用,向文件或控制臺(tái)打印代碼的調(diào)試信息。
在強(qiáng)調(diào)可重用組件開發(fā)的今天,Apache提供的強(qiáng)有力的日志操作包Log4j可以輕松控制log信息是否顯示、log信息的輸出端類型、輸出方式、輸出格式,更加細(xì)致地控制日志的生成過程,而其通過配置文件可以靈活地進(jìn)行配置而不需要大量的更改代碼。
也就是說,很多互聯(lián)網(wǎng)企業(yè)都可以選擇使用Log4j。
2014年,Log4j2發(fā)布。作為對(duì)Log4j的重大升級(jí),Log4j2完全重寫了log4j的日志實(shí)現(xiàn),不僅提供了Logback中可用的許多改進(jìn),同時(shí)修復(fù)了Logback架構(gòu)中的一些固有問題。
Log4j2也支持SLF4J,可以自動(dòng)重新加載日志配置,并支持高級(jí)過濾選項(xiàng)。此外它還允許基于lambda表達(dá)式對(duì)日志語(yǔ)句進(jìn)行延遲評(píng)估,為低延遲系統(tǒng)提供異步記錄器,并提供無(wú)垃圾模式以避免由垃圾收集器操作引起的任何延遲。通過其他語(yǔ)言接口,企業(yè)也可以在C、C++、.Net、PL/SQL程序中使用Log4j。
此次漏洞的出現(xiàn),正是由用于Log4j2提供的lookup功能造成的,該功能允許開發(fā)者通過一些協(xié)議去讀取相應(yīng)環(huán)境中的配置。但在實(shí)現(xiàn)的過程中,并未對(duì)輸入進(jìn)行嚴(yán)格的判斷,從而造成漏洞的發(fā)生。
“微步在線研究響應(yīng)中心”也復(fù)現(xiàn)了該漏洞:
換句話說,如果在打印日志時(shí)發(fā)現(xiàn)日志內(nèi)容中包含關(guān)鍵詞${,那么這個(gè)里面包含的內(nèi)容會(huì)當(dāng)做變量來進(jìn)行替換,導(dǎo)致攻擊者可以任意執(zhí)行命令。
由于線上web業(yè)務(wù)的任何數(shù)據(jù)都可能寫入Log4j,甚至一些pre-auth的地方,比如注冊(cè)、登錄,實(shí)際攻擊入口取決于業(yè)務(wù)具體情況。百度搜索、蘋果iCloud搜索、360搜索等都出現(xiàn)了不同程度的問題。
只有3位志愿者在維護(hù)
在漏洞被發(fā)現(xiàn)后,由于應(yīng)用廣泛,想必不少程序員加班都快加瘋了,也有人開始埋怨為什么維護(hù)人員都沒有發(fā)現(xiàn)這么危險(xiǎn)的漏洞。
這還真不能怪人家。
Apache軟件基金會(huì)Logging Services的PMC成員Volkan Yazıcı在推特上解釋到,此次漏洞是“為向后兼容保留的舊功能”而引發(fā)的。
“Log4j維護(hù)者一直在為緩解措施而失眠;修復(fù)錯(cuò)誤、文檔和CVE,還要回應(yīng)他人的詢問。即便如此,他們還要遭受許多嚴(yán)厲的批評(píng)乃至抨擊——哪怕這份工作沒有任何酬勞,哪怕這個(gè)為了向后兼容而保留的功能我們其實(shí)也不喜歡。”
網(wǎng)絡(luò)安全記者Catalin Cimpanu也表示,Apache Log4j2的維護(hù)工作主要由3名志愿者,在業(yè)余時(shí)間完成。
不少網(wǎng)友,包括Cryptogopher+Go團(tuán)隊(duì)安全負(fù)責(zé)人Filippo Valsorda都忍不住發(fā)推呼吁大家“別白嫖”了:
目前,保守估計(jì),能夠維護(hù)一個(gè)大型開源項(xiàng)目的開發(fā)人員的市場(chǎng)價(jià)格至少是30萬(wàn)美元/年,在GitHub和Patreon上看到的最多1000美元/月。
但也有網(wǎng)友表示,盡管如此,這次的漏洞是因?yàn)樗麄兲砑恿艘粋€(gè)錯(cuò)誤的、不安全的特性,使得庫(kù)不適合大多數(shù)合理用途,這個(gè)bug不是因?yàn)槿卞X而引起的。
針對(duì)此次漏洞,“微步在線研究響應(yīng)中心”給出了一些應(yīng)急方案:
- 修改jvm參數(shù):Dlog4j2.formatMsgNoLookups=true
- 修改配置:log4j2.formatMsgNoLookups=True
- 將系統(tǒng)環(huán)境變量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS設(shè)置為true
- 檢查所有使用了Log4j組件的系統(tǒng)
官方修復(fù)鏈接如下:https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc1
12月10日, 阿里云安全團(tuán)隊(duì)再次發(fā)出預(yù)警,發(fā)現(xiàn)Apache Log4j 2.15.0-rc1版本存在漏洞繞過,建議及時(shí)更新至Apache Log4j 2.15.0-rc2版本。
正如網(wǎng)友所言,開源工具面臨的困境在于,項(xiàng)目順利進(jìn)行時(shí),一切都很好,一旦出現(xiàn)問題,每個(gè)人都會(huì)抱怨,而且通常抱怨最多的人貢獻(xiàn)最少,這就導(dǎo)致那些擁有一些世界上最常用項(xiàng)目的才華橫溢的開發(fā)人員,幾乎沒有得到認(rèn)可。
相關(guān)報(bào)道:
- https://uk.pcmag.com/security/137653/critical-apache-log4j2-exploit-demonstrated-in-minecraft
- https://www.ithome.com.tw/news/148332
【本文是51CTO專欄機(jī)構(gòu)大數(shù)據(jù)文摘的原創(chuàng)譯文,微信公眾號(hào)“大數(shù)據(jù)文摘( id: BigDataDigest)”】