拆解 NixOS 供應鏈:GNU strip 也能重演「信任的信任」攻擊
arXiv · 2026-09-05
五名研究者證實,只處理已編譯 ELF 檔案、從不讀原始碼的 GNU strip,同樣能執行「信任的信任」攻擊,並在一篇 2026 年 9 月公開的論文中,對整個 NixOS 發行版完整實測滲透且未被察覺。攻擊從 bootstrap 用的一份「種子」二進位檔開始,最終讓完整的圖形安裝映像帶著後門建置成功。
背景
1984 年 Ken Thompson 在其圖靈獎演說中提出「信任的信任」(trusting trust)構想:一個被動過手腳的 C 編譯器,編譯 login 程式時植入後門,編譯自己時又把這段邏輯複製進下一代編譯器,使原始碼永遠查不出破綻。四十多年來這被視為只有讀寫原始碼的編譯器才做得到的攻擊,這篇論文首次把它搬到只做二進位轉換的工具上。
核心方法
論文《Trusting-Trust Attack against an Entire Linux Distribution through Binary Manipulation》(arXiv:2607.24888)把 NixOS bootstrap 種子中的 strip 換成惡意版本;payload 讀取 NIX_BUILD_TOP 環境變數判斷是否處於建置沙盒,再核對程式 basename 是否為 strip 才動手,其餘時候保持沉默。手法是把 payload 附加在 ELF 檔尾端,將原本裝中繼資料的 PT_NOTE 節區改造成可執行的 PT_LOAD segment,再竄改 e_entry 讓執行流程先跳進 payload、事後才跳回原本進入點,原始 bytes 全部保留。當種子 strip 在 bootstrap 中處理「重新編譯出的下一代 strip」時,會把同一段 payload 複製進去,使後門在原始種子離開依賴關係後仍持續存活。
影響範圍
以 nixpkgs 修訂版 fef9403a3e4d、GNU binutils 2.44 實測建置一份完整圖形安裝映像,共產生 1,199 個套件、3,799 個可執行 ELF 程式,其中 3,790 個遭植入後門,唯一倖免的是關閉了 strip 階段的 Firefox,期間沒有任何建置失敗或功能測試異常。作者也指出 patchelf、甚至 install/cp 等會在收尾階段觸碰新產出二進位檔的工具,理論上都能被同一手法濫用。
libxml2 2.15.4 一次修補 8 個 CVE,正規表示式引擎到 XInclude 全中彈
oss-security mailing list · 2026-09-05
libxml2 2.15.4 已於 2026 年 9 月 1 日發布,一次修補 8 個新編號的 CVE,涵蓋正規表示式引擎、字典雜湊、URI 編碼、驗證輸出與 XInclude 展開等核心模組。
漏洞機制
八個問題多屬記憶體邊界與整數溢位錯誤:CVE-2026-86137 是 xmlFAParsePosCharGroup 中 NXT 巨集的越界讀取,CVE-2026-86138 為 xmlDictAddQString 整數溢位導致的堆積緩衝區溢位,CVE-2026-86140 則是 xmlSnprintfElements 透過 strcat 造成的堆疊緩衝區溢位。值得注意的是 CVE-2026-86144:xmlXIncludeProcess 與 xmlXIncludeProcessTree 未把 parseFlags 正確傳遞下去,導致 XML_PARSE_NONET 等安全旗標在 XInclude 展開時失效,等於讓原本該被擋下的網路存取悄悄放行。
| CVE | 問題模組/成因 |
|---|---|
CVE-2026-86137 | xmlFAParsePosCharGroup 越界讀取 |
CVE-2026-86138 | xmlDictAddQString 整數溢位→堆積溢位 |
CVE-2026-86139 | xmlURIEscapeStr 整數溢位 |
CVE-2026-86140 | xmlSnprintfElements 堆疊緩衝區溢位 |
CVE-2026-86141 | xmlRegNewParserCtxt 空指標解參照 |
CVE-2026-86142 | xmlXPtrEvalXPtrPart 長度飽和→堆積溢位 |
CVE-2026-86143 | xmlIO 整數溢位,負長度流入寫入回呼 |
CVE-2026-86144 | XInclude 未傳遞 parseFlags,安全旗標失效 |
修補與緩解
以上問題全部在 2.15.4 修正,Debian 等下游已於 9 月 5 日同步發出追蹤公告。凡是拿 libxml2 剖析不受信任的 XML、或啟用 XInclude 展開外部內容的服務,都應優先升級,其中 parseFlags 未傳遞的那個問題尤其會讓既有的網路存取限制形同虛設。
PCRE2 10.48 修補 DFA 比對高風險越界寫入,含一個已編號 CVE
oss-security mailing list · 2026-09-05
PCRE2 10.48 已於 2026 年 8 月 31 日發布,修補正規表示式引擎中多個記憶體越界問題,其中一項已確認編號為 CVE-2026-86145。
漏洞機制
CVE-2026-86145 出在 pcre2_dfa_match:遞迴 DFA 比對重複使用快取中的 workspace 區塊時,少了新配置區塊原本就有的大小檢查,攻擊者只要提供遞迴結構的樣式、搭配 API 可設定的較小 heap limit,就能觸發越界寫入、任意竄改記憶體,官方將其列為高風險。同一版本還修了 JIT 編譯模式與實際比對模式不一致時的越界讀取,以及 pcre2_convert() 在 32 位元 size_t 平台上處理不受信任輸入時的堆積越界寫入。
修補與緩解
GHSA-3r4p-g7gg-ppmf(即CVE-2026-86145):DFA 遞迴 workspace 越界寫入GHSA-2p8c-ff85-vh9x:JIT/一般比對模式不一致時的越界讀取GHSA-q8g2-wprr-34m9:pcre2_convert() 32 位元平台堆積越界寫入GHSA-fmgr-6ggq-9859:32 位元編譯期整數溢位導致的越界寫入
以上問題均已在 10.48 修正,尚未取得 CVE 編號的幾項目前僅以 GHSA 追蹤。凡是拿使用者可控的正規表示式餵給 PCRE2、尤其允許遞迴樣式或呼叫 pcre2_convert() 處理外部輸入的服務,都應盡快升級。
原始來源:arXiv:2607.24888、libxml2 2.15.4 release、PCRE2 10.48 release