// 威脅簡報
vLLM LlavaOnevision2 忽略 trust_remote_code:設定不執行模型程式碼,惡意模型的程式碼仍會執行
- CVSS
- 7.8 HIGH
- CISA KEV
- 未列入
- 弱點類型
- CWE-94 · CWE-829
人工審稿 2026-09-24指令測試:未提供漏洞重現:未進行驗證紀錄 ↓
vLLM 0.28.0 以前載入 LlavaOnevision2 模型時會忽略 trust_remote_code=False,惡意模型附帶的 Python 程式碼仍會執行。
| 誰會中 | 使用 vLLM 0.28.0 以前的版本、載入來源不可信的 LlavaOnevision2 模型,並依賴 trust_remote_code=False 來防止模型程式碼執行的人或組織。 |
|---|---|
| 後果 | 如果你載入了攻擊者準備的模型,模型附帶的 Python 程式碼會以 vLLM 程序的完整權限執行,可能讀取、竄改或破壞這台機器上 vLLM 能碰到的資料。目前沒有來源回報實際遭利用。 |
| 現在該做什麼 | 升級 vLLM 到 0.28.0 以上。升級前不要載入來源不可信的 LlavaOnevision2 模型,並限制 vLLM 執行環境的權限。查看依據(3)
|
| 受影響版本 | 0.25.0 起到 0.28.0 以前(官方範圍為「< 0.28.0」;LlavaOnevision2 在 0.25.0 才加入,更早的版本沒有這個模型)查看依據(4)
|
| 修好的版本 | 0.28.0 以上查看依據(4)
|
| CVSS 向量 | 顯示完整向量CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H |
| 時間點 |
|
| CISA KEV | 未列入(未列入 KEV 不代表沒有被利用)查看依據(2)
|
藍隊應對手冊
確認、修補 / 緩解、應變、強化。版本符合受影響條件不等於已被入侵;檢查沒有結果也不等於安全,每一項都有能證明與不能證明的範圍。標記的步驟對應下方攻擊流程裡可以擋下攻擊的那一步。
- 01確認 vLLM 版本
版本低於 0.28.0,而且你會載入 LlavaOnevision2 模型,才需要擔心。這是依照受影響範圍推導的檢查方式,不是官方提供的檢查。
唯讀查詢pip show vllm | grep -i '^version' - 02找出本機快取中的 LlavaOnevision2 處理器檔案
官方公告指出,惡意程式碼就放在這兩個檔案裡;檢查它們是 PlainCVE 依漏洞原理提出的建議,不是官方建議。找到檔案不代表一定是惡意的,正常模型也可能附帶;重點是確認它們來自你信任的來源,並檢查內容。下列指令假設模型放在 Hugging Face 預設快取位置,請依實際路徑調整。
唯讀查詢find "${HF_HOME:-$HOME/.cache/huggingface}" \( -name 'processing_llava_onevision2.py' -o -name 'video_processing_llava_onevision2.py' \)
- 01升級到 0.28.0 以上
修補(PR #52952)在匯入任何東西之前先檢查 trust_remote_code,關閉時直接拋出 ValueError。
會變更環境pip install -U "vllm>=0.28.0" - 02還不能升級:不載入不可信的 LlavaOnevision2 模型
PlainCVE 依漏洞原理提出的建議(官方沒有提供暫時性做法):只載入可信來源的 LlavaOnevision2 模型,並在載入前手動檢查兩個處理器 Python 檔。
- 01曾在舊版載入可疑模型:把主機當作可能已遭入侵
官方沒有公布入侵指標(IoC)或偵測方法。以下是 PlainCVE 的預防性建議:移除該模型、輪替 vLLM 程序能讀到的金鑰與憑證,並考慮從乾淨的映像檔重建環境。這不代表已確認有任何外洩。
完整修復步驟與說明
| 目前版本 | 建議 |
|---|---|
| < 0.28.0 | pip install -U "vllm>=0.28.0",或更新到對應版本的容器映像檔 |
| ≥ 0.28.0 | 已修補;trust_remote_code 關閉時載入器會拋出 ValueError |
- 順序提醒: 如果你已經在舊版上載入過來源不明的 LlavaOnevision2 模型,光升級不會清除已經執行過的程式碼。請先依上方應變項目處理主機,再升級。
- 升級後出現
ValueError? 代表你載入的模型需要執行附帶程式碼。只有在你確認來源可信、也檢查過內容後,才考慮開啟trust_remote_code。 - 官方沒有公布偵測方法、入侵指標(IoC)或暫時性做法;檢查版本與模型檔案的指令,以及只載入可信模型、檢查處理器檔案、限制權限等建議,都是 PlainCVE 依漏洞原理整理的,不是官方建議。
攻擊流程
從左到右是攻擊發生的順序。藍色盾牌代表這一步可以被擋下,越早擋下越好。點圖示可看細節。
- 攻擊者
攻擊者發布一個夾帶惡意處理程式的 LlavaOnevision2 模型
模型儲存庫裡除了權重,還可以放 Python 檔,例如 processing_llava_onevision2.py 和 video_processing_llava_onevision2.py。
防禦: 不要載入來源不可信的 LlavaOnevision2 模型。
- 你的系統
維運者用 vLLM 載入這個模型,並設定 trust_remote_code=False
vLLM 把這個架構當成內建支援,所以設定檔載入時不經過遠端程式碼檢查。維運者以為關掉開關就安全了。
防禦: 載入前手動檢查模型儲存庫裡的 processing_llava_onevision2.py 與 video_processing_llava_onevision2.py。
- 你的系統
多模態處理啟動時,trust_remote_code 設定被 **kwargs 吞掉
處理器載入函式把 trust_remote_code 傳給一個根本沒有這個參數的 Transformers 函式;值落進 **kwargs 後沒人理會,也沒有報錯。確切是在啟動時還是第一個多模態請求時觸發,尚未確認。
防禦: 升級到 0.28.0 以上:在載入前先檢查 trust_remote_code,關閉時直接拋出 ValueError。
- 你的系統
模型附帶的 Python 模組被匯入,程式碼以 vLLM 的權限執行
依官方公告,惡意程式碼寫在模組最外層,匯入的那一刻就會執行,擁有 vLLM 程序的完整權限。
防禦: 限制 vLLM 執行環境的權限,降低程式碼一旦執行後能造成的傷害。
影響範圍
| 條件 | 是否受影響 |
|---|---|
vLLM 0.28.0 以前 + 載入來源不可信的 LlavaOnevision2 模型 + 依賴 trust_remote_code=False 保護 | 受影響 |
| vLLM 0.28.0 以上 | 已修補 |
| 舊版 vLLM,但只載入可信來源的模型 | 攻擊者沒有機會放入程式碼,但仍建議升級 |
| 舊版 vLLM,但從未載入 LlavaOnevision2 模型 | 官方公告描述的是 LlavaOnevision2 的處理器載入路徑 |
| 只是對一台執行可信模型的伺服器發送一般 API 請求 | 無法觸發 |
官方範圍寫的是「< 0.28.0」。LlavaOnevision2 支援是在 0.25.0(2026-07-11)加入的(PR #44785),本站查看 0.25.0 的原始碼,處理器載入函式當時就已經把 trust_remote_code 傳給不接受這個參數的函式;修補 PR #52952 改的正是這個檔案。更早的版本沒有這個模型,所以實際受影響的是 0.25.0 起、0.28.0 以前的版本。
依官方公告,需要同時成立的條件是:用 vLLM 載入 LlavaOnevision2 模型、模型來自不可信的來源、使用者靠 trust_remote_code=False 保護自己、vLLM 把這個架構視為內建所以設定檔載入時不做遠端程式碼檢查,以及多模態處理(同時處理圖片、影片和文字)被啟動。惡意程式碼確切是在服務啟動時、還是第一個多模態請求時執行,尚未確認。
原理
AI 模型的儲存庫裡不只有權重,也可以附上 Python 檔,用來處理圖片或影片之類的輸入。trust_remote_code 就是決定「要不要執行這些附帶程式碼」的開關,設成 False 就代表不執行。
vLLM 載入 LlavaOnevision2 處理器的函式 _load_ov2_processor(),直接呼叫了 Transformers 的 get_class_from_dynamic_module(),並把 trust_remote_code 當參數傳進去。問題是那個函式根本沒有這個參數。Python 函式用 **kwargs(接收任何額外參數的寫法)收下了這個值,卻沒有人去讀它,也沒有報錯。結果不管使用者怎麼設,模型附帶的處理器模組都會被匯入。依官方公告,惡意程式碼放在模組最外層,匯入的那一刻就會以 vLLM 程序的完整權限執行。
vLLM 其實早有安全的包裝函式 try_get_class_from_dynamic_module(),會先呼叫 resolve_trust_remote_code() 檢查;MiniCPM-V 的載入器就正確使用了它,只是 LlavaOnevision2 這條路徑跳過了。
有問題的思路(概念示意,不是原始程式碼):
展開程式碼範例(python)
def get_class_from_dynamic_module(ref, repo, **kwargs):
# 沒有宣告 trust_remote_code,kwargs 裡的值沒人看
return import_from_repo(ref, repo)
cls = get_class_from_dynamic_module(ref, repo, trust_remote_code=False) # 仍會匯入修好的思路:
展開程式碼範例(python)
if not resolve_trust_remote_code(trust_remote_code, ...):
raise ValueError("trust_remote_code is off") # 匯入前就停下
cls = get_class_from_dynamic_module(ref, repo)「遠端程式碼執行」是什麼意思? CVE 描述用了這個詞,但兩個評分向量都是「本機攻擊向量(AV:L)+ 需要使用者互動」。這裡的「遠端」指的是程式碼跟著下載的模型一起來,不是有人從網路直接攻擊一台正在執行的伺服器。
弱點類型:GHSA 列出 CWE-94(程式碼注入)與 CWE-829(引入不受信任來源的功能);CVE 紀錄、NVD 與 VulnCheck 只列 CWE-94。
時間軸
| 日期 | 事件 |
|---|---|
| 未公開 | NLx64 回報問題(日期未公開) |
| 2026-07-11 | vLLM 0.25.0 釋出,新增 LLaVA-OneVision-2 支援(PR #44785),問題程式碼隨之出現 |
| 2026-08-19 | 修補 PR #52952 提出 |
| 2026-08-20 | PR #52952 合併 |
| 2026-08-26 | vLLM 0.28.0 在 PyPI 釋出 |
| 2026-08-28 | GitHub 安全公告 GHSA-3c86-2m5g-59q7 公開 |
| 2026-09-12 | CVE-2026-90553 由 VulnCheck 公開 |
| 2026-09-14 | CVE 紀錄更新 |
| 2026-09-16 | NVD 最後修改,狀態為「已分析」 |
依輸入紀錄,本漏洞不在 CISA 已知遭利用漏洞(KEV)清單中;本頁讀過的來源也都沒有提到實際遭利用。
延伸閱讀
- 評分差異: vLLM 維護者的 GitHub 公告評為 CVSS 3.1 7.8(高);VulnCheck 發布的 CVE 紀錄另外加上 CVSS 4.0 8.5(高),同時也收錄 3.1 的 7.8。NVD 把兩個分數都標為 VulnCheck 提供的「次要」分數,沒有自己的評分。兩個分數版本不同,都沒有錯。
- 與 CVE-2026-5241(Transformers)比較: 那個漏洞出在 Transformers 的 LightGlue 模型載入路徑,模型裡的設定資料會覆蓋使用者的
trust_remote_code=False;Transformers 5.5.0 已修補(CVE 紀錄範圍為「5.5.0 以前」)。本漏洞則是設定被忽略:傳給了不接受它的函式。兩者結果相同:使用者明明關了開關,模型的 Python 程式碼還是執行了。 - 給開發者的教訓: 安全開關不要指望被下游函式「順便」處理;在危險呼叫之前自己檢查,失敗就停下。
- 回報者:NLx64;協調者:jperezdealgaba。「ov2」指的是 LlavaOnevision2,不是其他產品。
驗證紀錄 已人工審稿、核對來源;尚未在我們的環境重現
| 人工審稿 | 2026-09-24 |
|---|
驗證紀錄只寫環境與結果,不公開重現步驟或可攻擊他人系統的程式。詳見 政策.
來源
- 其他vLLM 0.25.0 released, first to add LLaVA-OneVision-2 · github.com · 查閱 2026-09-24
- 修補 commit / 版本vLLM PR #44785:新增 LLaVA-OneVision-2 · GitHub / vLLM, 2026-07-02 · 查閱 2026-09-240.25.0 發布說明列出的新模型 PR;新增 llava_onevision2.py,修補 PR
- 修補 commit / 版本vLLM v0.25.0 的 llava_onevision2.py · GitHub / vLLM · 查閱 2026-09-240.25.0 的處理器載入函式已經把 trust_remote_code 傳給 get_class_from_dynamic_module。
- 安全公告GHSA-3c86-2m5g-59q7: LlavaOnevision2 processor loader executes attacker model code with trust_remote_code=False · vLLM project (GitHub), 2026-08-28 · 查閱 2026-09-24
- 安全公告CVE-2026-90553 record (CVE Services API) · CVE Program / VulnCheck (CNA), 2026-09-12 · 查閱 2026-09-24
- CVE / NVD / OSVNVD CVE-2026-90553 (API) · NIST NVD, 2026-09-12 · 查閱 2026-09-24
- 安全公告vLLM before 0.28.0 Remote Code Execution via LlavaOnevision2 processor · VulnCheck, 2026-09-12 · 查閱 2026-09-24
- 修補 commit / 版本[Bugfix][Security] Guard _load_ov2_processor with resolve_trust_remote_code (PR #52952) · vLLM project (GitHub), 2026-08-20 · 查閱 2026-09-24
- 修補 commit / 版本vLLM v0.28.0 release · vLLM project (GitHub), 2026-08-26 · 查閱 2026-09-24
- 廠商說明vllm 0.28.0 · PyPI, 2026-08-26 · 查閱 2026-09-24
- 安全公告CVE-2026-5241 record (CVE Services API) · CVE Program / Huntr (CNA), 2026-06-03 · 查閱 2026-09-24
媒體簡報
一句話
vLLM 是廣泛用來架設 AI 模型推論服務的開源軟體。0.28.0 以前的版本在載入 LlavaOnevision2 這類多模態模型時,會忽略使用者「不要執行模型附帶程式碼」的設定,使惡意模型夾帶的 Python 程式碼仍然執行。前提是使用者自己載入了攻擊者的模型;一般 API 請求無法單獨觸發。修補版 0.28.0 已於 2026 年 8 月 26 日釋出,目前沒有來源回報實際遭利用。
關鍵數字
- 嚴重度(vLLM 公告)
- CVSS 3.1 7.8(高) github.com
- 嚴重度(CVE 紀錄,VulnCheck)
- CVSS 4.0 8.5(高) cveawg.mitre.org
- 修補版本
- 0.28.0(2026-08-26 釋出) pypi.org
- 安全公告公開
- 2026-08-28(GHSA-3c86-2m5g-59q7) github.com
- CVE 公開
- 2026-09-12,由 VulnCheck 發布 cveawg.mitre.org
已確認
- LlavaOnevision2 支援在 vLLM 0.25.0(2026-07-11)加入(PR
- vLLM 0.28.0 以前載入 LlavaOnevision2 處理器時,trust_remote_code=False 不起作用,模型附帶的 Python 模組仍會被匯入。
- 攻擊者必須讓受害者載入自己的模型;對執行可信模型的伺服器發送一般請求無法觸發。
- 0.28.0 已修補:關閉 trust_remote_code 時會在匯入前拋出 ValueError。
尚未確認 / 說法不一
- 惡意程式碼確切在何時執行(服務啟動時,或第一個多模態請求時)尚未確認。
- 沒有來源回報實際遭利用,也沒有公布入侵指標;依輸入紀錄,它不在 CISA KEV 清單中(本頁未獨立查證)。
- CWE 方面,GHSA 列 CWE-94 與 CWE-829,CVE 紀錄與 NVD 只列 CWE-94。
可引用的一句話
開關還在,只是線沒有接上:使用者關掉了它,程式卻從來沒去讀它。
圖片
引用時請標示「PlainCVE」並附上本頁連結。 完整引用格式見下方「如何引用本頁」。有事實錯誤請回報.
vLLM LlavaOnevision2 忽略 trust_remote_code:設定不執行模型程式碼,惡意模型的程式碼仍會執行 vLLM 是廣泛用來架設 AI 模型推論服務的開源軟體。0.28.0 以前的版本在載入 LlavaOnevision2 這類多模態模型時,會忽略使用者「不要執行模型附帶程式碼」的設定,使惡意模型夾帶的 Python 程式碼仍然執行。前提是使用者自己載入了攻擊者的模型;一般 API 請求無法單獨觸發。修補版 0.28.0 已於 2026 年 8 月 26 日釋出,目前沒有來源回報實際遭利用。 關鍵數字: - 嚴重度(vLLM 公告):CVSS 3.1 7.8(高)(https://github.com/vllm-project/vllm/security/advisories/GHSA-3c86-2m5g-59q7) - 嚴重度(CVE 紀錄,VulnCheck):CVSS 4.0 8.5(高)(https://cveawg.mitre.org/api/cve/CVE-2026-90553) - 修補版本:0.28.0(2026-08-26 釋出)(https://pypi.org/project/vllm/0.28.0/) - 安全公告公開:2026-08-28(GHSA-3c86-2m5g-59q7)(https://github.com/vllm-project/vllm/security/advisories/GHSA-3c86-2m5g-59q7) - CVE 公開:2026-09-12,由 VulnCheck 發布(https://cveawg.mitre.org/api/cve/CVE-2026-90553) 已確認: - LlavaOnevision2 支援在 vLLM 0.25.0(2026-07-11)加入(PR - vLLM 0.28.0 以前載入 LlavaOnevision2 處理器時,trust_remote_code=False 不起作用,模型附帶的 Python 模組仍會被匯入。 - 攻擊者必須讓受害者載入自己的模型;對執行可信模型的伺服器發送一般請求無法觸發。 - 0.28.0 已修補:關閉 trust_remote_code 時會在匯入前拋出 ValueError。 尚未確認 / 說法不一: - 惡意程式碼確切在何時執行(服務啟動時,或第一個多模態請求時)尚未確認。 - 沒有來源回報實際遭利用,也沒有公布入侵指標;依輸入紀錄,它不在 CISA KEV 清單中(本頁未獨立查證)。 - CWE 方面,GHSA 列 CWE-94 與 CWE-829,CVE 紀錄與 NVD 只列 CWE-94。 「開關還在,只是線沒有接上:使用者關掉了它,程式卻從來沒去讀它。」— PlainCVE https://plaincve.date/vulns/cve-2026-90553-vllm-llavaonevision2-remote-code-ignored
如何引用本頁
本文採 CC BY 4.0,轉載請保留署名與連結。
PlainCVE 團隊(2026)。《vLLM LlavaOnevision2 忽略 trust_remote_code:設定不執行模型程式碼,惡意模型的程式碼仍會執行》。PlainCVE。https://plaincve.date/vulns/cve-2026-90553-vllm-llavaonevision2-remote-code-ignored(查閱日期:YYYY-MM-DD)BibTeX
@misc{cve202690553vllmllavaonevision2remotecodeignored2026,
title = {vLLM LlavaOnevision2 忽略 trust_remote_code:設定不執行模型程式碼,惡意模型的程式碼仍會執行},
author = {PlainCVE 團隊},
year = {2026},
howpublished = {PlainCVE},
url = {https://plaincve.date/vulns/cve-2026-90553-vllm-llavaonevision2-remote-code-ignored},
note = {更新於 2026-09-24}
}