AI News HubLIVE
站內改寫2 分鐘閱讀

MCP伺服器中的ANSI轉義序列注入:對人隱藏,對AI可見

ANSI轉義序列可被用於向AI代理隱藏指令,形成注入攻擊。本文介紹了兩種攻擊變體(直接獲取型和儲存型),並闡述瞭如何透過動態應用安全測試(DAST)自動檢測此類漏洞。

來源Hacker News AI作者: xgpyc2qp

ANSI轉義序列最初設計用於終端控制,而非語言模型。這些控制碼在終端渲染時不可見,但語言模型會逐位元組讀取。攻擊者利用這一差異,在AI代理消費的文本中嵌入隱藏指令,繞過人工稽核。這種輸出中和失敗已在真實產品中出現,例如Kubernetes的kubectl(CVE-2021-25743)和Git(CVE-2024-52005)。在模型上下文協議(MCP)中,伺服器透過工具、資源和提示流式傳輸文本給代理,每個模型讀取的欄位都可能是注入點。

動態應用安全測試(DAST)是檢測此類漏洞的自然選擇。它從外部執行目標,傳送構造的輸入並檢查響應中的漏洞證據。本文介紹了兩種攻擊變體:直接獲取型AESI和儲存型AESI。直接獲取型攻擊中,攻擊者託管包含ANSI轉義序列和隱藏指令的URL,透過獲取工具傳遞給模型。儲存型攻擊則將載荷寫入儲存,透過另一入口點讀取時觸發,具有永續性、解耦性和延遲暴露的特點。

檢測基於三個設計原則:檢查原始位元組、僅關注模型可消費欄位、使用唯一觸發標記和三訊號確認。DAST掃描器為每個載荷使用一個標記,當ANSI轉義位元組、固定指令短語和觸發標記同時出現在同一模型可消費欄位中時,確認漏洞。直接獲取型檢測透過注入惡意URL到工具引數並檢查響應實現。儲存型檢測則分三階段:首先寫入唯一標記,然後對映反射點,最後傳送真實載荷並確認。

對於構建MCP伺服器的團隊,建議清除控制位元組、驗證資料型別並審計儲存寫入點。這些措施可防止ANSI注入攻擊,確保AI代理的安全。ANSI轉義序列的歷史可追溯到1970年代,當時不同廠商的硬體終端使用各自不相容的控制方言。ANSI X3.64標準統一了它們:程式可以發出一組商定的程式碼來移動游標、清屏或設定顏色,任何符合標準的終端都會執行。攻擊者濫用這種控制能力,在AI代理讀取的文本中嵌入隱藏指令。MCP伺服器中,模型可消費欄位包括工具結果中的text、資源讀取中的text和提示模板中的text。載荷出現在其他位置則不可利用。安全影響包括未授權代理操作、繞過人工稽核、日誌和審計軌跡操縱以及永續性注入風險。自動化檢測的核心是將攻擊轉化為可重複的自動化測試,透過原始位元組檢查、模型消費欄位聚焦、唯一觸發標記和三訊號確認來實現低噪聲檢測。