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。載荷出現在其他位置則不可利用。安全影響包括未授權代理操作、繞過人工審核、日誌和審計軌跡操縱以及持久性注入風險。自動化檢測的核心是將攻擊轉化為可重複的自動化測試,通過原始字節檢查、模型消費字段聚焦、唯一觸發標記和三信號確認來實現低噪聲檢測。