Nix 與 Lix 同步修補多個本機提權漏洞,multi-user daemon 的 repair 旗標可覆寫 store
oss-security(Thomas Gerbet)· 2026-10-13
Nix 與 Lix 一次公布五個漏洞,其中最嚴重的一個讓「只在 allowed-users 裡、不是 trusted-users」的一般使用者,也能把 /nix/store 裡的內容換掉,進而以 root 身分執行程式。過去大家預設 daemon 的一般使用者只能「加東西」,不能「改既有東西」,這個假設在 repair 路徑上不成立。
公告發布在 oss-security,所有項目目前都尚未配發 CVE,只有 GHSA 編號。
漏洞機制
repair(GHSA-jwvx-xq5j-gc56):一般 daemon client 可以在 AddToStoreNar 與 AddMultipleToStore 帶上 repair 旗標。daemon 先把 NAR 解壓到 client 指定的 store path,解完才驗 hash、大小與(選用的)content address。
驗證失敗時,惡意內容仍留在磁碟上。攻擊者因此能把任一 store 物件換成自己準備的檔案樹,只要有特權服務(包括 nix-daemon 自己)會執行該物件裡的檔案,就是提權。該 GHSA 評為 High,CVSS 8.4,問題源自 2.1 版的 commit 48662d1。
list overflow(GHSA-25vp-6h23-hj3g):配置 Nix list 時發生 unsigned integer overflow,求值不受信任的 Nix 運算式時造成 heap 越界寫入。實際影響取決於 Nix 編譯時用的最佳化選項。
seatbelt(GHSA-m4vq-qf6v-82pj):只影響 macOS。sandbox profile 超過內部大小門檻、且有缺少的 optional path 時,會產生沒有限定範圍的 (allow ...) 規則,建置等於在沙箱外執行。
只影響 Nix(Lix 不受影響)的兩項:
GHSA-hf6w-2rg9-v84g:multi-user installer 讓 store 內容留在執行安裝的使用者名下,而不是 root。GHSA-92x5-h528-wrmw:macOS 與 FreeBSD 上未啟用沙箱的設定不會拒絕 build user 連線,讓 repair 問題更嚴重。
受影響版本
| 專案 | 受影響(至) | 修正版 |
|---|---|---|
| Nix | 2.35.2、2.34.8、2.31.5、2.30.5、2.28.7 | 2.35.3、2.34.9、2.31.6、2.30.6、2.28.8 |
| Lix | 2.95.3、2.94.2 | 2.95.4、2.94.3 |
Nix 的 2.29.x、2.32.x、2.33.x 已無人維護,不會收到修補;Lix 2.93 以前同樣未維護但受影響。公告表示更舊的版本都應視為有漏洞。
影響範圍
共用的 multi-user 主機最需要處理:Linux 與 macOS 上 nix-daemon 以 root 執行、且有一般使用者能連線的安裝,repair 漏洞可直接讓 allowed-users 成員取得 root。CI runner、共用開發機、會替他人建置 derivation 的 build farm 屬於同一類。
求值不受信任 Nix 程式碼的服務(例如接受外部 flake 的評估器)要看 list overflow。macOS 使用者只有在 sandbox = true 或 sandbox = relaxed 時才會碰到 seatbelt 問題,macOS 預設值是 false,也就是原本就沒沙箱。
修補與緩解
修補的核心是:untrusted 使用者不能再對 AddToStore、AddToStoreNar、AddMultipleToStore 使用 repair 模式;在呼叫端提供路徑 metadata 時,檔案先解到只有 store owner 能存取的暫存目錄,hash 驗過才搬進 store。
# 檢查目前版本與 daemon 設定
nix --version
nix config show | grep -E 'allowed-users|trusted-users|sandbox'GHSA 頁面未列出 workaround,主要作法就是升級到上表的修正版。若暫時無法升級,公告與 GHSA 都未提供其他緩解,只有 seatbelt 這一項可靠 macOS 預設值 false 避開沙箱建置路徑。另外,Nix installer 問題代表過去用該 installer 裝的機器,應確認 store 內容的擁有者是否為 root。