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