安全研究员Aonan Guan近日披露了一系列通过“提示注入”(prompt injection)攻击劫持Anthropic、谷歌和微软旗下AI Agent的漏洞。这些漏洞利用了AI Agent与GitHub Actions的集成,成功窃取了API密钥和访问令牌。值得关注的是,尽管所有三家公司都已支付漏洞赏金,但他们均选择保持沉默,既未发布公开安全通告,也未分配CVE编号,这使得使用旧版工具的用户可能仍未意识到潜在风险。
这些漏洞影响了多款与GitHub Actions集成的AI工具,包括Anthropic的Claude代码安全审查、谷歌的Gemini CLI Action以及GitHub的Copilot Agent。这些工具通常会读取GitHub数据,如拉取请求标题、问题描述和评论,并将其作为任务上下文进行处理,进而执行相应操作。问题的核心在于,它们未能可靠地区分合法内容和恶意注入的指令。
攻击原理剖析
核心攻击技术是间接提示注入。攻击者并非直接针对AI模型本身,而是将恶意指令嵌入到AI Agent被设计为信任的GitHub数据中,例如PR标题、issue描述和评论。当Agent在其工作流程中摄入这些内容时,它会将注入的指令当作合法命令来执行。
- 针对Anthropic的Claude代码安全审查,研究员Guan构造了一个包含提示注入负载的PR标题。Claude执行了嵌入的命令,并将输出(包括泄露的凭据)包含在其JSON响应中,随后作为PR评论发布,任何人都可以查阅。此攻击能够窃取Anthropic API密钥、GitHub访问令牌以及GitHub Actions运行环境中暴露的其他机密。
- Gemini攻击遵循了类似模式。通过在GitHub issue的合法内容之后注入一个伪造的“受信任内容区”,Guan绕过了Gemini的安全指令,并诱骗Agent将自身的API密钥作为issue评论发布。谷歌的Gemini CLI Action,作为将Gemini集成到GitHub issue工作流中的工具,将注入的文本视为权威指令。
- Copilot攻击更为隐蔽。Guan将恶意指令隐藏在一个GitHub issue的HTML注释中,这使得负载在人类可见的渲染Markdown中不可见,但对解析原始内容的AI Agent却完全可见。当开发者将该issue分配给Copilot Agent时,机器人就会遵循这些隐藏的指令。