
都說開源工具好,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是一款開源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搜索等都出現了不同程度的問題。
在漏洞被發現後,由於應用廣泛,想必不少程序員加班都快加瘋了,也有人開始埋怨為什麼維護人員都沒有發現這麼危險的漏洞。

這還真不能怪人家。
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組件的系統
官方修復鏈接如下:
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
推薦閱讀
(點擊標題可跳轉閱讀)
乾貨 | 公眾號歷史文章精選
我的深度學習入門路線
我的機器學習入門路線圖
重磅!
AI有道年度技術文章電子版PDF來啦!
掃描下方二維碼,添加AI有道小助手微信,可申請入群,並獲得2020完整技術文章合集PDF(一定要備註:入群+ 地點 + 學校/公司。例如:入群+上海+復旦。
長按掃碼,申請入群
(添加人數較多,請耐心等待)
感謝你的分享,點讚,在看三連