觀點 · 資訊分享

自架 AI 推理伺服器 LMDeploy 爆 9.8 分漏洞:預設設定免登入就能下指令,問題回報 4 個月仍未修

開源推理框架 LMDeploy 的 /update_weights 端點會直接還原使用者送來的 pickle 資料,預設設定下等於免登入就能遠端執行指令。CVE-2026-119706 已公開,但修補 PR 至今未合併,最新版 0.18.0 仍受影響。

發布
2026-10-31
篇幅
約 5 分鐘 · 2,239 字
結構
7 節 + 4 題常見問題
標籤
#LMDeploy#CVE-2026-119706#RCE#本地 AI#Python pickle
自架 AI 推理伺服器 LMDeploy 爆 9.8 分漏洞:預設設定免登入就能下指令,問題回報 4 個月仍未修

一句話看懂:開源 AI 推理框架 LMDeploy 有個端點會直接執行使用者送來的資料,預設設定下等於任何連得到的人都能控制伺服器,而且官方還沒出修補版。

LMDeploy 免登入遠端執行漏洞資訊圖卡:對 /update_weights 送一包惡意 pickle,伺服器就會照著執行指令

先用白話講:這個漏洞是怎麼回事?

想像一間工廠有個「零件更換窗口」,原本是讓工程師把新零件送進來替換舊的。問題是,窗口的人收到包裹後不檢查、直接拆開照著裡面的說明書做事。如果有人寄來的說明書寫著「把保險箱打開」,他也照做。

LMDeploy 的 /update_weights 端點就是這個窗口。它本來是讓訓練工具把新的模型權重送進來,但收到的資料是 Python 的 pickle 格式,而 pickle 在還原時可以執行任意程式碼。

更糟的是,這個窗口預設對所有人開放、也不看證件。

發生什麼事

  • 10 月 30 日(UTC),NVD 公開 CVE-2026-119706,由資安公司 VulnCheck 提交
  • 受影響版本:LMDeploy 0.9.0 到 0.18.0
  • 分數:CVSS 3.1 為 9.8、CVSS 4.0 為 9.3,屬「嚴重」等級
  • 原理:攻擊者把惡意 pickle 用 base64 編碼後放進 serialized_named_tensors 欄位送出,伺服器不經驗證就還原,指令會以 api_server 行程的權限執行

要特別說明的是,這不是當天才被發現的問題:GitHub 上的 Issue #4698 早在 6 月 22 日就公開回報,修補用的 PR #4964 在 9 月 14 日提出,但截至撰文時仍未合併。GitHub 上最新的正式版是 9 月 28 日發布的 0.18.0,仍在受影響範圍內。

為什麼預設設定特別危險

修補 PR 的說明直接點出:在 api_server 的預設綁定(0.0.0.0)、沒有設定 api_keys 的情況下,這就是免登入的遠端執行漏洞。我們對照 0.18.0 的原始碼,預設值確實如此:

設定 預設值 代表什麼
server_name 0.0.0.0 監聽所有網路介面
server_port 23333 服務埠
api_keys None 不需要驗證

也就是說,只要伺服器有對外的網路介面、防火牆沒擋,任何人都可能打得進來。

給開發者的技術細節

官方修好之前,建議先這樣處理:

# 只綁本機,對外改由有驗證的反向代理提供
lmdeploy serve api_server <模型路徑> --server-name 127.0.0.1 --api-keys <自訂一組長隨機字串>
  • 不要公開暴露:檢查雲端安全群組、路由器埠轉發,確認 23333 埠沒有對外開放
  • 加上驗證:設定 api_keys 後,api_server 會在整個服務加上驗證中介層;但持有金鑰的人仍可呼叫這個端點,金鑰要當成伺服器權限來保管
  • 反向代理擋路徑:用 Nginx 等反向代理對外時,可以直接拒絕 /update_weights 這個路徑
  • 修補後的行為:依 PR 說明,修好後 HTTP 端點預設拒收 pickle,需要的人要設 LMDEPLOY_ALLOW_PICKLE_UPDATE_PARAMS=1 才會開啟,並改用 safetensors 格式傳送權重;這屬於不相容變更,用到這個端點的訓練流程要跟著調整
  • 檢查是否被入侵:曾經對外開放的伺服器,建議檢查是否有異常的行程、排程與對外連線

我的看法

自己在家用 GPU 架模型服務的人越來越多,很多教學為了方便,會直接用預設參數啟動,再開個埠轉發讓外面也能連。這次的漏洞正好說明這種做法的風險:推理伺服器手上通常握著昂貴的 GPU 和模型檔,被拿去挖礦或當跳板都不奇怪。

我自己的原則是:本地 AI 服務一律只綁本機或內網,真的要從外面連,就走 VPN 或有驗證的反向代理,不直接把埠開出去。另外,這個問題公開回報四個月還沒修,也提醒我們選開源工具時,除了看功能,也要看維護者處理安全問題的速度。用 LMDeploy 的人,現在就去確認服務有沒有暴露在外。

名詞小辭典

  • RCE(Remote Code Execution):遠端執行程式碼,攻擊者可以從網路上讓你的電腦執行任意指令,是最嚴重的漏洞類型之一。
  • pickle:Python 內建的物件序列化格式,還原時可能執行程式碼,不該用來處理不受信任的資料。
  • 推理伺服器(Inference Server):把訓練好的 AI 模型包成 API 服務、接收請求並回傳結果的程式。
  • CVSS:漏洞嚴重程度評分,滿分 10 分,9 分以上屬於「嚴重」。

資料來源

常見問題

LMDeploy 是什麼?我有用到嗎?
LMDeploy 是 InternLM 團隊在 GitHub 上維護的開源工具,用來部署大型語言模型、提供 API 服務。如果你是用 lmdeploy serve api_server 指令或 Python 套件 lmdeploy 架設模型服務,就要注意;只用 Ollama 的人不受這個漏洞影響。
現在有修補版本可以更新嗎?
截至撰文時還沒有。修補 PR #4964 仍是開啟狀態,GitHub 上最新的正式版是 2026-09-28 發布的 0.18.0,而它在受影響範圍內。要持續關注官方的發布頁面。
在官方修好之前可以怎麼做?
不要讓服務直接暴露在公開網路:啟動時把綁定位址改成本機或內網位址、用防火牆擋掉服務埠(預設 23333),並設定 api_keys 讓服務至少要驗證才能存取。對外提供時,前面再加一層有驗證的反向代理。
pickle 為什麼這麼危險?
pickle 是 Python 用來把物件存成資料、再還原回來的格式。還原時可以觸發任意程式碼,所以 Python 官方文件一直提醒不要還原不受信任的資料。這個端點正是把使用者送來的資料直接拿去還原。
LINE