最近開源軟件又爆出一個十級漏洞,該漏洞沖擊范圍巨大,涉及數百萬不同的應用程序,其中也包括 iOS、Android 應用程序以及使用 Electron 構建的跨平臺應用程序。

這個漏洞兩周前就已經被蘋果和谷歌發現,但蘋果和谷歌在披露漏洞時缺乏關鍵信息,造成了“巨大的盲點”,導致全球范圍內其他開發者提供的大量應用程序未能得到修補,這些應用程序可能一直處于攻擊危險之中。

為什么會產生“巨大的盲點”

兩周前,蘋果報告稱,威脅行為者正在積極利用 iOS 中的一個關鍵漏洞(編號為 CVE-2023-41064),以便安裝世界上已知的最先進的惡意軟件之一“飛馬”(Pegasus)間諜軟件。這些攻擊使用了零點擊的漏洞利用方法,也就是說攻擊者不需要與目標進行任何交互,只要接收到 iPhone 上的來電或短信,就足以被“飛馬”感染。

四天后,谷歌報告稱, Chrome 瀏覽器中存在一個關鍵漏洞。谷歌表示,該漏洞被指定為 CVE-2023-4863,由蘋果安全工程和架構團隊以及公民實驗室報告。披露中列出的受影響供應商為“谷歌”,受影響軟件則為“Chrome”,而且該漏洞已經出現在野利用。谷歌和 Mozilla 馬上緊急修復了各自瀏覽器(分別是 Chrome 和 Firefox)中的漏洞。

實際上,從谷歌的信息中,可以看出該漏洞源自谷歌于 2010 年開發的 libWebp 代碼庫,用于以 Webp 格式渲染圖像。Webp 是當時的一種新興格式,能夠讓文件體積比 PNG 圖像再降低 26%。libwebp 幾乎被整合進各種應用、操作系統及其他渲染 Webp 圖像的代碼庫當中,其中最知名的當數 Chrome 中使用的 Electron 框架,以及在桌面和移動設備上運行的各類應用產品。

本周一,谷歌悄悄重新提交了一項關于影響眾多獨立應用和軟件框架的關鍵代碼執行漏洞信息,以糾正此威脅只會影響到 Chrome 瀏覽器的錯誤印象。這份新的披露信息,編號為 CVE-2023-5129。新條目正確為 libwebp 列出了受影響的供應商和軟件類別,還將漏洞的嚴重等級從 8.8 分(滿分 10 分)提高到 10 分。

安全公司 Rezillion 的研究人員認為蘋果和谷歌的產品漏洞源自同一個基礎漏洞,但蘋果、谷歌并沒有相互協調、準確報告漏洞的共同來源,反而都選擇使用單獨的 CVE 漏洞編號。這樣一來,那些開發者用來追蹤其產品中已知漏洞的自動化系統將很難檢測到正在被利用的關鍵漏洞。

Rezillion 研究人員 Ofri Ouzan 和 Yotam Perkal 寫道:“由于該漏洞的影響范圍包括帶漏洞依賴項的軟件產品,只有這些軟件產品的漏洞掃描器才能識別出漏洞。那些盲目依賴漏洞掃描結果的組織將面對一個巨大的盲點。”

谷歌提交的第一條不完整 CVE 絕不是單純的技術失誤,導致在漏洞曝光兩周多之后,不少軟件仍未進行修復。其中最典型的例子就是 Microsoft Teams。

谷歌在新提交的漏洞描述中補充了更多細節。之前提交中的描述是:

116.0.5845.176 版本之前的谷歌 Chrome 中,Webp 的堆緩沖區溢出漏洞允許遠程攻擊者在精心設計的 HTML 頁面中執行越界內存寫入。(Chromium 安全嚴重度:嚴重)

現在新的描述調整為:

使用特定 Webp 無損格式文件,libwebp 可能將數據越界寫入堆。ReadHuffmanCodes() 函數在分配 HuffmanCode 緩沖區時,其大小來自預先計算出的 size 數組:kTableSize。color_cache_bits 值的定義需要使用此 size。kTableSize 數組僅考慮到 8-bit 一級表查找,但未考慮到二級表查找的 size。而 libwebp 最多只允許 15-bit(MAX_ALLOWED_CODE_LENGTH) 的代碼大小。因此當 BuildHuffmanTable() 嘗試填充二級表時,可能會寫入越界數據。對尺寸不足數組的越界寫入發生在 ReplicateValue 當中。

無論是按 CVE-2023-4863 還是 CVE-2023-5129 的表述來看,libwebp 的這項漏洞都相當嚴重。因此在使用 App 之前,用戶應確保對應的 Electron 版本已經升級為 v22.3.24、v24.8.3 或者 v25.8.1。

看似無害的工具,卻造成了驚人的影響和沖擊范圍

2010 年谷歌無意間留下的這個 bug,很可能是引發本次 iOS 零日漏洞的根本原因,并跨越 13 年精確擊中了 iPhone 14。

Webp 是谷歌開發的一種開源圖像格式(與其他公司共享),跟 jpeg 和 png 屬于同一類選手,負責提供一種新的圖像壓縮方法。這樣文件體積更小巧,還原度也更高。沒錯,大家在看小尺寸 jepg 文件時,是不是經常遇到“色素塊”一樣的壓縮痕跡?Webp 格式就是為了解決這個問題而生。

Jpeg 與 Webp 文件大小對比。

因為這種格式既實用又有谷歌大佬的強力助推,Webp 自然就流行了起來。過去 12 年間,Android 和 Chrome 都默認捆綁 Webp,2 年前開始 Mac/iOS/Safari 也將其納入自身,更不用說其他各種瀏覽器了。感興趣的朋友可以參考這里的支持瀏覽器完整列表(https://caniuse.com/webp)。

簡單講,Webp 庫中的一個 bug 似乎會導致圖像解碼過程時發生堆緩沖區溢出。就是說,黑客可以向目標 iPhone 發送短信,借此實現設備入侵。對,你沒有看錯,黑客可以向受害者發送特制的圖像來訪問對方 iPhone。該圖像在被接收后會由 iPhone 中捆綁的 Webp 解碼器負責處理,這樣黑客就能在 iPhone 上執行命令,且無需用戶交互或者許可。

在安全社區中,這類問題被稱為零日(0-day)漏洞,即“攻擊者先于廠商所發現的軟件漏洞”。而這次的 bug,存在大概有 4 到 10 年了吧。而且之所以鬧這么大,就是因為 Webp 目前存在于全球數十億臺設備之上。

有很多應用程序使用 libwebp 來渲染 WebP 圖像,包括 LibreOffice、Telegram、ffmpeg 以及許多許多 Android 應用程序以及使用 Flutter 構建的跨平臺應用程序。

還有基于 Electron 的應用程序,根據維基百科上編制的列表,包括了 1Password、Discord、Eclipse Theia、GitHub Desktop、Microsoft Teams、MongoDB Compass、Notion、QQ (for macOS)、Signal、Skype、Visual Studio Code 等等。

主流瀏覽器、Linux 操作系統以及大量開源軟件均包含 libwebp 庫。

該圖表中提到的每個產品(以及許多其他產品)都發現自己在某種程度上受到 libwebp 中的此漏洞的影響,但該漏洞的定義 CVE 是由 Google Chrome CNA 作為 Chrome 漏洞發布的,而不是針對任一上游來源。有無數的應用程序使用 Electron、Chromium 或 libwebp,它們都受到此漏洞的影響,而 CVE 則與 Chrome 相關。

當談論這個 CVE 時,它可能指的是 Chrome、Chrome 的上游,或者上游組件下游的事物。如果問你是否已經修補了這個漏洞,你能給出一個自信的答案嗎?隨著 Electron 的大規模擴散,可能有許多應用程序受到影響,而你甚至可能不知道究竟哪些受到影響。

但在之前提交的 CVE 中,谷歌并未提及將有眾多 App 受此影響。

目前,Electron 修補了該漏洞(https://github.com/electron/electron/pull/39828)。

1Password for Mac 已發布更新來解決該問題。Telegram Desktop 進行了更新,并且 Ubuntu、Debian、SUSE 和其他 Linux 平臺也在積極更新其 libwebp 版本。


 Android 受不受影響?

Ben Hawkes 曾經在 Google 擔任零號項目的經理,他寫了一篇關于他對此 CVE 的想法的完整文章(https://blog.isosceles.com/the-webp-0day/)。

Ben 確認 Android 100% 受此影響。“與 Apple 的 ImageIO 類似,Android 有一個名為 BitmapFactory 的工具來處理圖像解碼,當然也支持 libwebp。截至今天,Android 尚未發布包含 CVE-2023-4863 修復程序的安全公告。”

Android 保護措施能解決這次的問題嗎?目前還不清楚,目前事情還在發酵當中。谷歌已經發布了 Webp 更新,可能會通過下個月的 Android 定期補丁推出。到時候參考發行說明,我們才能知道 Android 媒體強化有沒有緩解影響,或者說在 iOS 端帶來可靠的保護效果。

現在,我們能做的就是更新所有軟件。從現在開始,認真檢查自動更新有沒有開啟。蘋果已經發布了 Mac 和 iOS 端的重要更新,Chrome 也是一樣。預計后續會有更多供應商快速跟進。

身為應用開發者,如果你的應用允許用戶生成圖像,那請考慮提供更新的 Webp 庫版本,并用它來解碼用戶提交的內容。這樣就能主動為用戶提供保護,無需等待 Android 平臺的整體更新(特別是能保護那些版本太舊、已經停止更新的 Android 設備用戶)。

要使用特定版本,大家可以從源代碼進行編譯(建議包含最新修復),或在這里找到你的目標庫:https://developers.google.com/speed/webp/docs/precompiled.

如果你的應用不允許用戶生成內容,那就完全無需擔心。只要你的應用資產是“安全”的 Webp 文件(即未受惡意篡改的文件),就不會對用戶造成任何損害。