克隆這個倉庫,你的機器就是我的了
本文演示了一個針對Agent編碼工具(如Claude Code)的嚴重安全漏洞。攻擊者通過一個看似正常的GitHub倉庫,利用間接提示注入,結合系統信任的安裝流程和自動錯誤恢復機制,在開發者機器上遠程執行惡意代碼。惡意負載並非存放在倉庫中,而是通過DNS TXT記錄在運行時獲取,因此對代碼審查和靜態掃描完全不可見。最終攻擊者獲得一個反向Shell,可以竊取所有環境變量、憑證和API密鑰,並實現持久化。
近日,安全研究人員演示了一種針對AI Agent編碼工具的新型攻擊方式,通過間接提示注入(Indirect Prompt Injection),攻擊者可以僅憑一個看似無害的GitHub倉庫,在開發者毫無察覺的情況下完全控制其機器。該攻擊利用了現代Agent IDE(如Claude Code)的授權工具機制,這些工具允許LLM執行Shell命令、訪問本地文件和發起網絡調用,而用户往往缺乏清晰的可見性。
攻擊的關鍵在於將惡意指令分散在不同系統中,這些系統永遠不會被一起審查。首先,一個外觀完全正常的倉庫包含標準的安裝説明,例如要求運行pip3 install -r requirements.txt和python3 -m axiom init。然後,倉庫中的Python包在未初始化時會拋出一個常規的運行時錯誤,提示用户運行init命令。最後,init命令調用一個Shell腳本,該腳本從攻擊者控制的DNS TXT記錄中獲取配置並執行。
整個過程中,Agent(Claude Code)僅僅是遵循了看似合理的步驟:讀取項目文件、安裝依賴、嘗試使用包時遇到錯誤、根據錯誤提示運行修復命令。而真正的惡意負載——一個反向Shell——從未出現在倉庫的任何文件中,它是通過DNS查詢在運行時動態獲取的。DNS TXT記錄中的值經過Base64編碼,解碼後是一個標準的bash反向Shell命令,連接到攻擊者的服務器。
由於惡意負載不存在於倉庫中,所有傳統的安全檢測手段(如代碼審查、靜態掃描、文件哈希比對)都無法發現它。即使是Agent本身,在運行腳本之前也從未查看過DNS記錄的內容。開發者的終端只顯示“Initialising Axiom platform... Environment ready”,毫無異常。
攻擊成功後的後果是災難性的:攻擊者獲得與開發者相同權限的交互式Shell,可以竊取所有環境變量(如ANTHROPIC_API_KEY、AWS_SECRET_ACCESS_KEY、GITHUB_TOKEN等),植入後門(如SSH密鑰、cron任務),並且可以通過修改單個DNS記錄隨時切換負載,無需任何代碼提交。
研究人員強調,這種攻擊的可怕之處在於其各個組件分開來看均不構成威脅,但組合在一起就能形成致命鏈。靜態分析只看到一個DNS查詢,網絡監控只看到域名解析,Agent只看到一個預先授權的設置步驟。任何單一視角都無法識別惡意意圖。
要防禦此類攻擊,Agent工具需要向用户展示設置命令實際將執行的內容,包括腳本內部以及腳本從運行時獲取的任何東西,而不僅僅是命令本身。開發者應將不熟悉倉庫中的安裝説明和腳本視為不受信任的代碼,無論AI工具如何推薦。該研究由0DIN團隊完成,他們呼籲安全社區共同關注GenAI系統的安全風險,並邀請研究人員參與其AI漏洞賞金計劃。