實際事件 發布於 AIA: 2026年9月15日

多模態模型的圖片載入功能變成內網掃描工具:資安公告發出 12 小時後就被實際利用

LMDeploy 是上海人工智慧實驗室推出的工具組,用來壓縮、部署並提供語言模型與視覺語言模型的服務,對外提供相容於 OpenAI 格式的 API。問題在於,只要對話請求的 image_url 欄位填入任何 http 開頭的網址,伺服器就會照單抓取,完全不檢查那個網址指向哪裡,這就是 CVE-2026-33626(CVE 是公開資安漏洞的識別編號)。資安公司 Sysdig 在資安公告發布後 12 小時 31 分鐘,就在自家蜜罐上記錄到第一次攻擊嘗試:攻擊者在八分鐘內,用這個圖片載入功能去探測 AWS 的執行個體中繼資料服務、Redis、MySQL 與一個管理介面。

Credential ExposureData ExfiltrationInput ValidationAI Infrastructure
7 項對應的 AIDEFEND 防禦手法
來源: CVE-2026-33626: How attackers exploited LMDeploy LLM inference engines in 12 hours 
作者: Sysdig Threat Research Team
原文發布: 2026年4月22日

威脅分析

  • 出問題的程式碼,就是一次沒有任何防護的抓取動作。 當對話訊息帶有 image_url 時,LMDeploy 的 load_image() 只檢查這個字串是不是以 http 開頭,接著就直接把它抓下來。過程中沒有解析主機名稱、沒有封鎖私有網段與 link-local 區域連線位址,也沒有驗證重新導向的去向,因此模型伺服器會代替呼叫者連到他指定的任何位址,這就是伺服器端請求偽造(SSRF,攻擊者讓應用程式伺服器代替他連線到原本無法從外部存取的內部服務)。
  • 攻擊者把它當成探測工具,而不是真的要載入圖片。 Sysdig 的蜜罐記錄到來自 103.116.72[.]119 的十個請求,分成三個階段。第一階段把載入器指向 AWS 執行個體中繼資料服務的憑證路徑,接著轉向本機的 Redis 連接埠。第二階段先對一個公開的帶外測試服務發出 DNS 查詢,確認請求真的送得出主機,再讀取 OpenAPI 說明文件找出更多可用路徑。第三階段呼叫了未經驗證的 /distserve/p2p_drop_connect 路徑,然後在 36 秒內連續掃過本機的 8080、3306 與 80 連接埠。
  • 會被連到,是預設值造成的。 這個 API 伺服器預設綁在 0.0.0.0,而身分驗證只有在營運方自行提供 API key 時才會啟用,所以一套採用預設值的部署,會回應任何連得到它的人。
  • 證據界線。 這次被攻擊的對象是蜜罐。目前沒有任何來源指出有具名的受害組織,也沒有任何來源證實憑證真的被取走;各家報導在談影響時,用的都是條件式說法。

適用的 7 項 AIDEFEND 防禦手法

AID-H-019.001
URL Normalization & Allowlist Filtering
極高
只要是由呼叫者輸入觸發的伺服器端抓取,都應該統一走同一層安全封裝:先正規化網址、解析主機名稱,並在真正建立連線之前,拒絕任何不是公開可路由的位址。0.12.3 版的修補加的就是這一道檢查,也正是它讓圖片載入功能回到「只載入圖片」,而不是變成一個通用的請求工具。
AID-H-003.010
Deployed AI Software Vulnerability Remediation Lifecycle
極高
修補版本其實在資安公告發布前約兩週就已經釋出,所以這段暴露期是「來不及更新」而不是零時差攻擊。應以實際部署的映像檔雜湊值,逐一比對推理伺服器與生態系的資安通告,並把修補期限設定成「從公告發布當下就假設有人在打」,再重建到 0.12.3 或更新的版本,而不是去改動線上執行中的容器。
AID-I-002.001
Internal AI Network Segmentation
高
就算攻擊者送出的請求完全正確,也得模型伺服器真的連得到有價值的東西才有意義。把推理工作負載放進獨立網段、內部通訊採預設拒絕,指向中繼資料服務、Redis、MySQL 或管理連接埠的抓取就會落空;這是接在前述抓取驗證後面的圍堵層。
AID-H-038.001
Inference Runtime Listener & Protocol Conformance
高
一個預設綁在 0.0.0.0 的服務程序,只要哪天被放到有公開網路介面的環境,就會在沒人察覺的情況下變成對外開放。應為每個執行環境映像檔記錄核准的綁定位址與連接埠,在啟動後實際回讀目前真正在監聽的位址,一旦監聽範圍比設定檔允許的更寬,就讓這次部署失敗。
AID-H-004.002
Service & API Authentication
高
LMDeploy 只有在營運方傳入 API key 時,才會掛上身分驗證中介層,換句話說預設狀態就是一個不需驗證的推理 API。應在閘道或服務邊界要求通過驗證的工作負載身分,請求才能進到模型處理程式;如果一個服務端點根本沒有設定呼叫者身分,就不該讓它進入正式環境。
AID-H-038.002
Inference Runtime Privileged Operation Authorization
高
這次攻擊的第三階段,呼叫了一條分散式服務的控制路徑,而它可以切斷與遠端推理引擎之間的連線,本身卻沒有任何授權檢查。應盤點所有會改變執行狀態或控制面狀態的執行環境路徑,把這套部署用不到的先停用,其餘的則在同一條處理路徑上加一道需要通過驗證、預設拒絕的授權關卡。
AID-E-001.001
Root & Long-Lived Credential Object Eviction
中
目前沒有來源證實憑證真的被取走,所以這是預防性處置,而不是針對已證實竊取的應變。不過只要有受影響版本曾經可以從外部連到,就應該輪替該主機的執行個體角色憑證,以及這台主機連得到的其他 secrets,因為觀察到的請求正是直接瞄準簽發這些憑證的中繼資料路徑。

身為資安防禦者,我們應該這麼做

  • 以映像檔雜湊值而非原始碼清單盤點正在執行的推理伺服器,把 LMDeploy 升級到 0.12.3 或更新的版本。同一輪檢查也應該涵蓋其他會代替模型抓取遠端媒體的服務框架。
  • 如果某個服務端點會接受遠端圖片或文件網址,先問它是不是真的需要這個能力。確實需要時,每次抓取都要走一層會解析位址、並拒絕 loopback、link-local 與私有網段的封裝,同時停用或重新驗證重新導向。
  • 檢查推理工作負載實際綁在哪個位址、以及誰連得到它。預設綁 0.0.0.0,加上身分驗證是選用而且沒開,正是這次能被外部連上的組合。
  • 收斂這個工作負載自己的網路位置:不允許它連到雲端中繼資料端點,並要求使用 IMDSv2、把跳躍數限制設為 1,讓伺服器端的抓取無法換到角色憑證。
  • 建立不依賴應用程式自己記錄的偵測機制,例如當推理程序連向 link-local、loopback 或內部服務連接埠時就發出警示,並把這類警示視為高風險警示處理,而不是雜訊。

結論

多模態服務在不知不覺中,給了模型伺服器一項能力:代替呼叫者發出對外請求。而這項能力最後落腳的地方,竟然是一個毫不起眼的圖片欄位。這次的攻擊者並不需要什麼新技術,他只需要一個網址參數、十二個小時,以及一台仍然連得到自己中繼資料服務的主機。AIDEFEND  把這條攻擊路徑對應到真正決定結果的幾道邊界:拒絕非公開位址的安全抓取封裝、讓內部服務連不到的推理網段、能在部署前攔下過寬綁定的曝露設定檔,以及對特權執行環境路徑的驗證與授權。