您让智能体去修复错误。其中一条错误是攻击者写的。
一份伪造的 Sentry 错误报告,有 85% 的概率能诱使 AI 编程智能体以开发者的完整权限执行攻击者的代码。注入本身并非灾难;被劫持的智能体所能触及的长期驻留凭证才是。
一位开发者打开 AI 编程智能体,输入了世界上最普通的一句请求:"看一下未解决的 Sentry 错误,把它们修好。"智能体通过 Sentry 连接器拉取错误列表,读取排在最前面的问题,照着报告里就地写好的修复步骤执行。半分钟后,它已在开发者的机器上、以开发者的完整权限执行了攻击者的代码——而没有人做错任何事。
这就是 Agentjacking,由 Tenet Security 于本月披露,它对市面上最流行的三款编程智能体——Claude Code、Cursor 和 Codex——成功率高达 85% [1][2]。
到底发生了什么
先说 Sentry 是什么:它是软件行业使用最广泛的错误监控服务之一。当您的应用抛出错误或崩溃时,Sentry 会捕获它,并生成供开发者分诊的报告——您每天接触的大量应用中都有它的身影。为了把报告发给 Sentry,每个应用都会嵌入一个 DSN:一个有意随网站源码一起发布的客户端密钥,好让浏览器能把错误上报回去。任何人都能读到它。而任何持有它的人都可以向您的 Sentry 项目 POST 一条错误事件。
这正是整个攻击的关键。Tenet 伪造了一条错误事件,其 message 字段的格式与 Sentry 自家的修复指引一模一样:整洁的 markdown、一段"建议修复"、一条待执行的命令。他们用公开的 DSN 提交了它。然后等待开发者最自然的举动——让智能体去清空错误队列。
智能体通过 MCP 连接器查询 Sentry。连接器把错误作为受信任的系统输出交还给智能体。智能体无法分辨真实的 Sentry 报告与伪造的报告;两者在字节层面形状完全一致。于是它照吩咐行事,执行那条"修复",通常是一次指向攻击者包的 npx 调用。从那一刻起,它拥有了开发者所拥有的一切:环境变量、Git 凭证、私有仓库地址、~/.aws/ 中的云密钥。
Tenet 发现有 2,388 家组织的 DSN 可被注入,范围从独立开发者一直到《财富》100 强。在其受控测试中,智能体确实在真实公司里执行了注入的指令——Tenet 称,其中包括一家市值 2,500 亿美元的《财富》100 强科技公司,其 AI 智能体读取了伪造的缺陷报告,并在该公司的两台企业机器上运行了 Tenet 的代码 [1][3]。该问题于 6 月 3 日向 Sentry 披露,公司当天即确认,但拒绝从根源上修复,称该问题"从技术上讲无法防御"。它上线了一个内容过滤器,屏蔽某一个特定的载荷字符串 [4]。
这不是 Sentry 的疏忽
令人不适的地方在这里:这条链路上没有任何一处是漏洞。DSN 本就应该是公开的。MCP 服务器本就应该返回您的错误数据。智能体本就应该按照您要求它修复的诊断信息行事。每一步都是被授权的,而这恰恰是防火墙、EDR、系统提示词全都没有拦住它的原因。
这个缺陷是结构性的,而且不止 Sentry 一家如此。任何把外部人员可以影响的文本喂给智能体的工具——错误追踪器、工单队列、抓取的网页、共享文档——都是注入通道,而智能体会把所有这些当作一整条无差别的指令流来处理。提示词注入在智能体时代已进入第二年,仍未解决:您无法可靠地把敌意文本挡在模型的推理之外。请假定您挡不住。
注入本身不是灾难
这一点值得停下来想一想。Agentjacking 之所以是五级火警,不是因为智能体被骗了,而是被骗的智能体能够触及什么。它以开发者的完整驻留权限运行:环境里的每一把密钥、磁盘上的每一个凭证文件、一整串只隔一条命令的钥匙串。
这个爆炸半径不是自然规律,而是一种配置。智能体之所以对这一切拥有驻留访问权,是因为今天的凭证就是这么存放的——环境化地放在机器上,任何在那儿运行的东西都能读到。把这一层拿掉,同样的劫持就会撞上一堵墙。
为此而设计,且是有意为之
Clavitor 的凭证从不留在智能体运行的环境中。没有 ~/.aws/credentials 可读,没有环境变量里的 API 密钥可供外传,因为密钥值从不落到代码执行的地方——智能体拿到的是使用某个凭证的结果,而不是凭证本身。它只能触及为其命名的那一样东西,因此无法枚举整个存储来找出还有什么。而且授权是有范围、可撤销的,一个开始表现得像攻击者的会话可以在动作中途被切断。
坦率地说:这不能阻止注入,也不能阻止被劫持的智能体执行命令。提示词注入尚未解决,我们也不宣称解决了它。改变的是回报。攻击者的代码照样运行——却发现环境中没有任何值得窃取的驻留之物。劫持成功,盗窃失败。
我们写下了这样一套规则:当智能体本身可能被反过来对付您时,凭证系统必须守住什么——从密钥绝不驻留在代码运行之处,到智能体只能触及为其命名之物。用您的系统对照一遍:clavitor.ai/rules。
教训不是"给 Sentry 打补丁"
Sentry 修不了这个,它自己也这么说。而下一个被投毒的工具不会是 Sentry。只要您的智能体携带着环境化的驻留凭证,它们读取的每一个受信任工具都是一把上了膛的枪,而提示词注入就是那把您锁不住的扳机。
您挡不住恶意文本。那就别再把凭证放在读取它的智能体伸手可及之处。
Clavitor(@clavitorai)是为 AI 智能体而建、也防着 AI 智能体的凭证保险库。clavitor.ai
来源
[1] Tenet Security — "Agentjacking: hijacking coding agents with fake Sentry errors"(85% 成功率;2,388 家组织;机制):https://tenetsecurity.ai/blog/agentjacking-coding-agents-with-fake-sentry-errors/
[2] The Hacker News — "Agentjacking Attack Tricks AI Coding Agents Into Running Malicious Code":https://thehackernews.com/2026/06/agentjacking-attack-tricks-ai-coding.html
[3] The New Stack — "A public Sentry key is all it takes to hijack Claude Code, Cursor, and Codex":https://thenewstack.io/agentjacking-sentry-mcp-attack/
[4] Infosecurity Magazine — "New 'Agentjacking' Attacks Could Hijack AI Coding Agents"(Sentry 的回应):https://www.infosecurity-magazine.com/news/agentjacking-attacks-hijack-ai/