<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>供应链攻击 on AI博士 万戈</title>
        <link>https://www.yesmiracle.net/tags/%E4%BE%9B%E5%BA%94%E9%93%BE%E6%94%BB%E5%87%BB/</link>
        <description>AI博士万戈的技术博客，聚焦 Agentic AI、AI Infra 与 Agent Security，分享 AI 基础设施与工程落地实践。</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <managingEditor>admin@yesmiracle.net (万戈)</managingEditor>
        <webMaster>admin@yesmiracle.net (万戈)</webMaster>
        <lastBuildDate>Fri, 21 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.yesmiracle.net/tags/%E4%BE%9B%E5%BA%94%E9%93%BE%E6%94%BB%E5%87%BB/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Agentjacking 横空出世！一个假 Sentry 错误报告就能劫持你的 AI 编码 Agent！</title>
        <link>https://www.yesmiracle.net/post/20260821-agentjacking-mcp-sentry-injection/</link>
        <pubDate>Fri, 21 Aug 2026 00:00:00 +0000</pubDate>
        <author>admin@yesmiracle.net (万戈)</author>
        <guid>https://www.yesmiracle.net/post/20260821-agentjacking-mcp-sentry-injection/</guid>
        <description>&lt;img src="https://www.yesmiracle.net/post/20260821-agentjacking-mcp-sentry-injection/cover.svg" alt="Featured image of post Agentjacking 横空出世！一个假 Sentry 错误报告就能劫持你的 AI 编码 Agent！" /&gt;&lt;p&gt;&lt;strong&gt;如果你团队的 AI 编码 Agent 正在通过 MCP 连接 Sentry 处理错误——那这篇文章你非看不可。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;2026 年 6 月，Tenet Security 披露了一种全新的攻击类，他们起名叫 &lt;strong&gt;Agentjacking&lt;/strong&gt;。这个名字值得你记住。&lt;/p&gt;
&lt;p&gt;攻击者不需要黑客技术，不需要渗入你的内网，不需要钓鱼你的开发者，甚至不需要攻破任何服务器。&lt;strong&gt;他们只需要往你的 Sentry 里发一条假错误报告。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;而你的 AI 编码 Agent——Claude Code、Cursor、Codex——会乖乖读它、信任它、执行它。&lt;/p&gt;
&lt;h2 id=&#34;攻击链4-步走向毁灭&#34;&gt;攻击链：4 步走向毁灭&lt;/h2&gt;
&lt;p&gt;Tenet Security 的研究人员 Ron Bobrov、Barak Sternberg 和 Nevo Poran 描述的 Agentjacking 攻击链只有 4 步：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一步：找到目标的 Sentry DSN&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;DSN（Data Source Name）是 Sentry 用来接收错误事件的公开凭证。Sentry 的文档&lt;strong&gt;明确说&lt;/strong&gt;它可以安全地嵌入前端 JavaScript。也就是说，随便打开一个网站上用了 Sentry 的页面，你都能在源码里找到类似 &lt;code&gt;https://xx@sentry.io/123456&lt;/code&gt; 的字符串。这不是泄露——这是设计。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二步：发一条恶意错误事件&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;用这个 DSN，任何人都可以向 Sentry 的 &lt;code&gt;/api/xxx/store/&lt;/code&gt; 端点 POST 一条错误事件。消息体里塞一段精心格式化的 Markdown：看起来和 Sentry 系统自带的「解决方案指导」一模一样。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三步：Agent 通过 MCP 读到它&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;你的 AI 编码 Agent 通过 Sentry MCP Server 查询错误。它收到这条伪造的错误事件——在它眼里，这就是 Sentry 官方返回的「待处理问题」和「建议修复方案」。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第四步：Agent 执行攻击者的代码&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;开发者说了一句再普通不过的话：「帮我看看 Sentry 里有哪些 bug 要修。」Agent 看到了攻击者注入的「修复建议」——运行 &lt;code&gt;npm install @malicious-package&lt;/code&gt;——于是它运行了。以开发者的全部权限，在开发者的本机上。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;「攻击者从未碰过受害者的基础设施。」——Tenet Security 研究团队&lt;/p&gt;&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;为什么这是降维打击&#34;&gt;为什么这是降维打击？&lt;/h2&gt;
&lt;p&gt;Agentjacking 可怕的地方在于：&lt;strong&gt;攻击链上的每一步都是授权操作。&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;POST 请求到 Sentry 的公共 ingest 端点 → ✅ 这是公开 API&lt;/li&gt;
&lt;li&gt;Agent 通过 MCP 读取 Sentry 数据 → ✅ 这是正常工作流&lt;/li&gt;
&lt;li&gt;Agent 执行看到的 shell 命令 → ✅ 这是它被设计来做的&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;没有恶意流量、没有钓鱼链接、没有 CVE 编号的漏洞利用。&lt;strong&gt;EDR 看不见、WAF 拦不住、IAM 无所谓、VPN 不相关、Cloudflare 没反应。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tenet 的原话是：「每一个动作都是授权的——所以没有任何安全产品能检测到它。」&lt;/p&gt;
&lt;h3 id=&#34;数据触目惊心&#34;&gt;数据触目惊心&lt;/h3&gt;
&lt;p&gt;Tenet Security 在受控环境中对 &lt;strong&gt;100+ 家组织&lt;/strong&gt; 测试了 Agentjacking：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;指标&lt;/th&gt;
          &lt;th&gt;数据&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;可注入 DSN 的组织&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;2,388+&lt;/strong&gt; 家暴露&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;测试成功率&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;85%&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;受影响 Agent&lt;/td&gt;
          &lt;td&gt;Claude Code / Cursor / Codex&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;波及范围&lt;/td&gt;
          &lt;td&gt;Fortune 500 到独立开发者&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;已知最高价值受害者&lt;/td&gt;
          &lt;td&gt;一家 &lt;strong&gt;$2500 亿市值&lt;/strong&gt; 的企业&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;其中一家 Fortune 100 企业的编码 Agent 在测试中&lt;strong&gt;真实执行了攻击者的代码&lt;/strong&gt;——当时该 Agent 持有活跃的 AWS 密钥。&lt;/p&gt;
&lt;h3 id=&#34;被劫持的是什么&#34;&gt;被劫持的是什么？&lt;/h3&gt;
&lt;p&gt;一次成功的 Agentjacking 可以暴露：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;环境变量&lt;/strong&gt;（AWS keys、GitHub tokens、Sentry auth tokens）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Git 凭据&lt;/strong&gt;（私人仓库 URL、SSH 密钥）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;开发者身份&lt;/strong&gt;（可用于后续横向移动）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所有数据都可以静默外传到攻击者的服务器，&lt;strong&gt;开发者甚至不知道自己被劫持了&lt;/strong&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;为什么-sentry-不修这个漏洞&#34;&gt;为什么 Sentry 不修这个「漏洞」？&lt;/h2&gt;
&lt;p&gt;这是整件事最微妙的地方。&lt;/p&gt;
&lt;p&gt;Sentry 确认了这个攻击面，但他们的官方回应是：&lt;strong&gt;「技术上无法防御（technically not defensible）。」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;他们激活了一个全局内容过滤器来拦截特定的 payload 字符串，但 Tenet 指出这只是一个临时补丁——换一种 payload 编码就能绕过。&lt;/p&gt;
&lt;p&gt;Sentry 的逻辑是：DSN 本来就是设计成公开的，错误事件的全文本来就是由用户自由写入的。Sentry 没有义务判断哪个错误是「真的」、哪个是「假的」——它不是安全审计系统，是错误追踪系统。&lt;/p&gt;
&lt;p&gt;从 Sentry 的角度，这话有道理。但从 AI Agent 安全的角度，&lt;strong&gt;这暴露了一个深层的结构性缺陷。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;隐式信任mcp-协议的阿喀琉斯之踵&#34;&gt;隐式信任：MCP 协议的阿喀琉斯之踵&lt;/h2&gt;
&lt;p&gt;Agentjacking 的根因不是 Sentry，是 &lt;strong&gt;MCP 协议的隐式信任模型&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;当一个 AI Agent 通过 MCP 连接外部数据源时，它会自动信任返回的所有数据。它无法区分：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;这是一个真实的应用崩溃事件 → ✅ 正常处理&lt;/li&gt;
&lt;li&gt;这是攻击者注入的恶意指令 → ❌ 也当正常处理&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这不是配置错误，不是权限不足——&lt;strong&gt;这是当前大语言模型的能力局限。&lt;/strong&gt; 模型无法「怀疑」它从工具调用中收到的数据，它没有「我收到的这个错误报告有可能是假的」这种元认知。&lt;/p&gt;
&lt;p&gt;这让我想起了我写过的那篇 &lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20260817-indirect-prompt-injection-deep-dive/&#34; &gt;《Indirect Prompt Injection 深度解析》&lt;/a&gt;——当你的 Agent 读网页的那一刻，攻击就已经得手了。Agentjacking 是 Indirect Prompt Injection 在 MCP 工具层的&lt;strong&gt;实证&lt;/strong&gt;。两者共享同样的信任缺陷：&lt;strong&gt;Model 不能区分「数据」和「指令」。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;更可怕的是，Tenet 已经将这项研究带到了 &lt;strong&gt;DEFCON&lt;/strong&gt; 上展示（他们称之为 GhostJacking）。这不是理论——这是&lt;strong&gt;已经在大规模实战验证过的攻击&lt;/strong&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;从-poisonedskills-到-agentjackingagent-供应链攻击正在爆发&#34;&gt;从 PoisonedSkills 到 Agentjacking：Agent 供应链攻击正在爆发&lt;/h2&gt;
&lt;p&gt;Agentjacking 不是孤立事件。它属于一个正在快速膨胀的 &lt;strong&gt;Agent 供应链攻击&lt;/strong&gt; 家族。&lt;/p&gt;
&lt;p&gt;我之前分析过 &lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20260820-poisonedskills-agent-supply-chain/&#34; &gt;《Agent Supply Chain Attack: PoisonedSkills 解析》&lt;/a&gt;，讲的是攻击者如何通过污染 Agent 的技能文档（skills）来劫持 Agent 行为。PoisonedSkills 是「输入侧」污染，Agentjacking 是「工具输出侧」攻击——手法不同，但哲学相同：&lt;strong&gt;你的 Agent 信任的每一行数据，都可能变成武器。&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;攻击类型&lt;/th&gt;
          &lt;th&gt;攻击媒介&lt;/th&gt;
          &lt;th&gt;受害者&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;成功率&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;披露时间&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Agentjacking&lt;/td&gt;
          &lt;td&gt;Sentry MCP 注入伪造错误&lt;/td&gt;
          &lt;td&gt;编码 Agent&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;85%&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;2026-06&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;PoisonedSkills&lt;/td&gt;
          &lt;td&gt;污染技能/文档内容&lt;/td&gt;
          &lt;td&gt;使用 skills 的 Agent&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;高&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;2026-07&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;IDPI / Tool Poisoning&lt;/td&gt;
          &lt;td&gt;网页/工具输出注入&lt;/td&gt;
          &lt;td&gt;浏览型 Agent&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;中高&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;2025-2026&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这个家族还在扩张。Microsoft 的 Incident Response 团队也在 7 月展示了 MCP Tool Poisoning 攻击链，而 CSA Labs 在 5 月就指出了 MCP 协议层面的系统性设计缺陷。&lt;/p&gt;
&lt;p&gt;对于一个正在做 Agent 基础设施安全的人来说，这条时间线一点都不意外。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;我们能做什么&#34;&gt;我们能做什么？&lt;/h2&gt;
&lt;p&gt;Agentjacking 之所以可怕，不是因为它用了高深的技术——恰恰相反，&lt;strong&gt;它太简单了&lt;/strong&gt;。一个 POST 请求，一行公共 DSN，加上任何一个 AI 编码 Agent——游戏就结束了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;传统安全战线：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🔴 EDR/WAF/IAM/VPN/Cloudflare — &lt;strong&gt;全部无效&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;🟡 限制 Agent 的 MCP 工具连接 — 理论上可行，但影响工作效率&lt;/li&gt;
&lt;li&gt;🟢 对 MCP 出站流量做安全网关 — 有希望，但工具不成熟&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Tenet 的应对：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tenet 已经开源了 &lt;strong&gt;agent-jackstop&lt;/strong&gt; —— 一组让 Cursor 和 Claude Code 加固的配置，专门防御这类通过不可信遥测/日志注入的攻击。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;作为 Agent 安全从业者的建议：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;限制 MCP Server 的来源可信度&lt;/strong&gt; — 不是所有 MCP server 的数据都该被无条件信任。日志/错误追踪类 MCP server 的输出天然不可信&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;建立工具输出级的信任边界&lt;/strong&gt; — 代码执行工具（Bash/Terminal）不应自动响应来自数据源工具（Sentry/Database/Logs）的输出&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;审查你 Agent 正在连接的 MCP Server&lt;/strong&gt; — 不只是问「我连了哪些」，更要问「如果这个 Server 返回恶意数据会怎样」&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;关注 MCP 安全网关&lt;/strong&gt; — 这正是我们正在做的方向。MCPZERO 的语义聚合 + 渐进式发现层，本身就是在工具输出进入 Agent 之前建立安全检查点&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id=&#34;写在最后&#34;&gt;写在最后&lt;/h2&gt;
&lt;p&gt;Agentjacking 的真正启示不是某个漏洞、某个 CVE、需要哪个厂商出补丁。&lt;strong&gt;它的启示是：当你让 AI 去读外部数据时，你同时让它对全世界开了门。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;2,388 家组织、85% 成功率、一家 $2500 亿市值的企业的 Agent 真实执行了攻击者的代码——这组数据应该让每一个正在用 AI 编码 Agent 的开发者和 CISO 彻夜难眠。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;安全不是 Agent 的配置项，是 Agent 的架构选择。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;而我们，才刚刚开始理解这个选择有多重要。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;📌 &lt;strong&gt;延伸阅读：&lt;/strong&gt; &lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20260817-indirect-prompt-injection-deep-dive/&#34; &gt;《Indirect Prompt Injection 深度解析》&lt;/a&gt; | &lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20260820-poisonedskills-agent-supply-chain/&#34; &gt;《Agent Supply Chain Attack: PoisonedSkills 解析》&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
</description>
        </item>
        
    </channel>
</rss>
