返回首頁

推論系統安全

llama.cpp b11000 清除失效計算圖,修補無驗證 RPC 遠端執行漏洞

llama.cpp 的 RPC 伺服器會重播仍指向已釋放緩衝區的快取計算圖,遠端客戶端可藉此取得讀寫能力並執行程式碼。b11000 在釋放緩衝區時丟棄相關圖狀態,但 RPC 本身仍不適合直接暴露於不受信任網路。

The GGML authors · Public domain · Image source
zh-Hant

llama.cpp 9 月 16 日發布 b11000 預發行版,修正 `ggml-rpc-server` 的 use-after-free。RPC 後端會為每個裝置保存最近一次計算圖,讓客戶端以 `GRAPH_RECOMPUTE` 重播,而不必再次傳送張量資料;問題在於圖節點保存的是後端緩衝區的直接指標。客戶端呼叫 `FREE_BUFFER` 後,快取圖並未失效,再次重播便會沿著懸空指標存取已釋放記憶體。

專案的發行說明指出,攻擊者不需要驗證即可觸發此路徑,並可透過後續 `ALLOC_BUFFER` 與 `SET_TENSOR` 重新塑造被釋放的記憶體區塊。由計算圖產生的讀寫能力可洩漏 libc 位址,進一步劫持 `BUFFER_CLEAR` 使用的 buffer interface vtable,最終在 RPC 伺服器程序的權限下執行任意程式碼。這不只是造成推論崩潰的拒絕服務問題,而是分散式推論節點的主機接管風險。

b11000 的處理方式相對直接:`free_buffer()` 執行時清除快取計算圖,使後續 `graph_recompute()` 的既有空值檢查拒絕請求,客戶端再退回完整的 `GRAPH_COMPUTE`。修補沒有改動協定或 API,因此升級通常不需修改呼叫端;部署者應使用 b11000 或更新版本,並檢查容器映像、靜態二進位及下游應用是否仍捆綁舊提交。

防禦不能只停在升級。llama.cpp 的安全政策明確建議,不要在不受信任網路使用 RPC backend 或 `ggml-rpc-server`;實際部署仍應以防火牆、私有網段、程序降權與容器隔離限制可達性。這次版本是預發行版,官方頁面也未提供 CVSS、受影響版本下限或完整獨立驗證資料,後續需要觀察是否補發正式安全公告,以及衍生套件能否快速帶入修補。

來源

  1. Release b11000 · ggml-org/llama.cpp
  2. llama.cpp patches an unauthenticated RPC use-after-free that yields remote code execution
  3. ggml-org/llama.cpp b11000 release mirror