
Hugging Face 模型 repo 可變成程式碼入口:Diffusers 三漏洞要即升 0.38.0
普通載入指令都可能踩中,舊版信任檢查有缺口
Hugging Face 上面嘅模型 repo,睇落似一堆權重同設定檔,不過對 Diffusers 嚟講,部分 repo 仲可以帶自訂 Python pipeline。Zafran Labs 公開嘅研究顯示,舊版 Diffusers 有幾條載入路徑會漏過 trust_remote_code 檢查,結果係開發者只照平時咁呼叫 DiffusionPipeline.from_pretrained(),惡意 repo 已經有機會喺部機執行程式碼。現有披露冇提出漏洞正俾人廣泛用嚟攻擊,但個入口直接掂到開發機、CI runner 同推理 server,唔適合等出事先處理。
trust_remote_code=False 點解都守唔住
Diffusers 支援自訂 pipeline,方便模型作者加官方套件未內置嘅載入邏輯。正常設計下,repo 如果要載入自訂 Python 檔,程式應該停低,叫用家明確設定 trust_remote_code=True。問題係舊版將呢道檢查放喺下載階段,但真正 import 動態模組嘅位置喺後面。只要前後兩段對「有冇自訂程式碼」得出唔同答案,檢查過關之後仍然可以載入 Python 檔。0.38.0 嘅修正,就係將關卡搬到動態模組實際載入嗰個必經位置。
呢點亦解釋咗點解只揀 safetensors 權重格式未夠。safetensors 主要處理權重反序列化風險;今次出事嘅位置係 pipeline loader、設定檔同額外 .py 模組。安全權重格式保護唔到另一條程式碼載入路徑。團隊如果一直將模型 repo 當成純資料來源,往往會畀佢過多權限,漏洞一旦俾人利用,造成嘅影響亦會大好多。

圖片:Zafran Labs
三個 CVE,觸發方法唔一樣
CVE-2026-44827(CVSS 8.8) 利用 custom_pipeline 預設值。舊版將 Python 嘅 None 拼成檔名 None.py,下載時嘅信任檢查冇當佢係自訂 pipeline,但後段載入器又會認到呢個檔案。攻擊者可以整一個外表正常、設定亦指向標準 pipeline class 嘅 repo;受害者毋須傳入 custom_pipeline 或開啟 trust_remote_code,普通 from_pretrained() 已有機會觸發。
CVE-2026-45804(CVSS 7.5) 係檢查時間同使用時間唔一致嘅競爭條件。載入器先獨立攞設定檔做檢查,跟住再下載整個 snapshot;兩次請求如果指向 repo 預設分支嘅唔同 commit,攻擊者可喺中間短時間換入帶 Python 檔嘅版本。官方 advisory 指呢條路要首次或強制下載先較有機會成功,cache 齊檔案就會收窄窗口;如果 revision 鎖到指定 commit hash,兩次請求亦會對住同一份內容。
CVE-2026-44513(CVSS 8.8) 就包住三個相關缺口:主模型同 custom_pipeline 分別來自兩個 repo、由本機 snapshot 配外來 pipeline,或者本機 snapshot 入面本身藏有自訂 component。共同問題係信任關卡冇覆蓋真正載入程式碼嘅位置。iThome 報道提到呢個 CVE 由 GitHub 用家 Vancir 通報;三組漏洞嘅官方 advisory 都將受影響範圍列為 Diffusers 0.38.0 之前版本。
升級之外,模型版本都要鎖實
最直接做法係先用 python -c "import diffusers; print(diffusers.__version__)" 查版本,再升到 diffusers>=0.38.0,重建所有 notebook image、Docker image、CI runner 同推理服務,唔好淨係更新開發者部機。requirements.txt、lockfile 或容器映像亦要鎖實已修補版本,避免另一個環境解依賴時跌返落舊版。自動掃描依賴可以幫手搵舊套件,但部署後實際 import 到邊個版本,仍然要喺運行環境核對一次。
外來模型只應載入可信來源,最好再用 commit hash 固定 revision,檢查 repo 根目錄同 component 子目錄有冇預期以外嘅 .py 檔。真係要開 trust_remote_code=True,就先睇清楚程式碼,放入冇長期憑證、限制網上連線同檔案權限嘅獨立 container 或 VM 跑。公司用共享 GPU server 或自動模型評測 pipeline,仲要分開下載、審核同正式推理權限;除咗升到 0.38.0,亦應該用隔離環境載入模型,減低未修補漏洞造成嘅影響。
參考來源
- iThome — Hugging Face程式庫Diffusers存在漏洞FaceHugger,恐允許模型儲存庫執行任意程式碼 — original report
- Zafran Labs:FaceHugger 技術分析 — 研究團隊原始披露,交代各漏洞原理、限制、時間線同緩解建議
- GitHub Advisory:CVE-2026-44827 — 核對 None.py 觸發條件、CVSS 分數、受影響版本同修補方法
- GitHub Advisory:CVE-2026-45804 — 核對兩次下載請求之間嘅競爭條件、cache 限制同 revision 固定方法
- GitHub Advisory:CVE-2026-44513 — 核對跨 repo pipeline、本機 snapshot 同自訂 component 三個變體
- Hugging Face Diffusers 0.38.0 release — 確認修補版本、發布日期同相關 trust_remote_code 改動
- Hugging Face Diffusers 自訂 pipeline 文件 — 官方文件解釋 trust_remote_code 用法,亦建議用 commit hash 固定 revision
本文根據原文及公開資料整理;資料有出入時,以原文及官方資料為準。







