克隆這個倉庫,你的機器就是我的了
本文演示了一個針對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漏洞賞金計劃。