根據 Oasis Security 的研究報告與 The Hacker News 的報導,NVIDIA 的開源參考堆疊 NemoClaw 存在一項嚴重的安全性漏洞。該漏洞允許攻擊者透過一個惡意網頁,在不需要身分驗證的情況下,控制運行在本地的 Ollama 實例,進而對 AI 模型植入隱藏指令,達成所謂的模型毒化攻擊。
背景與技術脈絡
NemoClaw 是 NVIDIA 用於運行 AI 代理(AI Agents)的開源參考架構,例如 OpenClaw,並在 OpenShell 沙箱環境中執行。為了讓這些代理能高效運作,NemoClaw 支援多種本地推論後端,其中 Ollama 是最常用的選擇之一。Ollama 是一個能讓使用者在本地輕鬆運行大型語言模型(LLM)的框架。
在正常的運作流程中,AI 代理會透過 API 與 Ollama 通訊。然而,安全問題出在 NemoClaw 如何設定 Ollama 的網路綁定地址。在特定的平台路徑上,例如 Windows 主機環境,NemoClaw 會將 OLLAMA_HOST 設定為 0.0.0.0:11434。這意味著 Ollama 的伺服器會綁定到所有網路介面,而非僅限於本地迴環地址(127.0.0.1)。雖然 NVIDIA 在文件中建議使用者不要將 11434 端口暴露於區域網路或網際網路,但這種設定在面對特定類型的網頁攻擊時,依然存在巨大的風險。
核心漏洞運作方式
此次漏洞的攻擊鏈結合了網路設定缺陷與 DNS 重綁定(DNS Rebinding)技術。
首先,Ollama 的 API 在 11434 端口上缺乏內建的身分驗證機制,僅依賴兩層中間件來攔截來自瀏覽器的請求。然而,當綁定地址被設定為 0.0.0.0 時,系統會跳過 Host 標頭(Host Header)的檢查。接著,跨來源資源共享(CORS)層會將請求視為同源(Same-Origin)而予以通過,因為攻擊者可以讓請求的 Origin 與 Host 標頭一致。
為了突破瀏覽器的同源策略限制,攻擊者可以使用 DNS 重綁定技術。這是一種欺騙瀏覽器的手段:攻擊者的域名首先解析到自己的惡意伺服器,一旦瀏覽器建立了信任關係,該域名會迅速將解析地址更改為 127.0.0.1。此時,瀏覽器仍認為該請求是發往原有的受信任域名,但實際上請求已直接發送至使用者的本地 Ollama 實例。
一旦成功獲取 API 存取權,攻擊者會透過 /api/create 接口寫入一個修改過的 Go 模板(Go Template)。這個模板決定了 AI 模型在處理對話前,如何將結構化訊息轉換為原始文本。攻擊者可以將惡意指令植入這個模板中,使得每一條系統訊息(System Message)在推論時都會自動附加攻擊者控制的隱藏指令。
影響與實務意義
這種攻擊方式最危險之處在於其隱蔽性與持久性。由於聊天模板(Chat Template)屬於模型層級的屬性,對 API 的消費者(即前端應用程式或使用者)是不可見的。即使 AI 代理在對話中提供了自己的系統提示詞(System Prompt),被毒化的模板依然會在底層將惡意指令強制插入。
這意味著攻擊者可以從根本上改變 AI 代理的行為。例如,讓 AI 在回答時洩漏敏感資訊、誘導使用者執行危險操作,或是完全接管 AI 代理所擁有的工具存取權限。正如 Oasis Security 所指出的,雖然沙箱能保護端點,但一旦 AI 代理被接管,它所擁有的所有權限與工具也隨之落入攻擊者之手。
限制與目前狀態
針對此問題,NVIDIA 在 v0.0.106 版本中引入了一項檢查機制,若偵測到 Ollama 綁定在非迴環介面,代理伺服器將拒絕啟動並發出警告。然而,這項保護措施並不全面。在某些平台路徑(如 WSL 相關配置)中,該檢查機制並未被啟動,且使用者仍可透過設定環境變數 NEMOCLAW_OLLAMA_PROXY_SKIP_BIND_PROBE=1 來跳過此檢查。
目前,該漏洞尚未被分配 CVE 編號,且 NVIDIA 尚未提供明確的受影響版本範圍或正式補丁。這使得運行 NemoClaw 的維運人員難以確認自己的系統是否處於風險之中。
總結來說,此事件提醒了開發者,僅僅依賴網路隔離或文件建議是不夠的。在設計本地 AI 服務時,必須實施嚴格的 Host 標頭驗證與身分認證機制,以防止瀏覽器端的 DNS 重綁定攻擊將本地服務暴露於外部威脅之中。
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。