一条 prompt 接管整个 AWS 账号的所有 agent:Zenity 披露 AgentCorruption
Zenity Labs 在 SecTor 2026 披露 AgentCorruption:一条 prompt 诱导公网 AgentCore agent 访问 IMDS,拿到越权的默认执行角色凭证,进而接管同账号同区域所有 agent——收割私聊、长期记忆、容器源码与密钥,并植入恶意记忆实现持久化。爆破半径来自默认 IAM 角色,而非模型能力。附 vibe 开发者 agent 上云前的四项安全检查。

2026 年 10 月 8 日,多伦多 SecTor 大会现场,AI agent 安全公司 Zenity Labs 抛出一枚重磅炸弹:他们只用一条 prompt,就接管了同一个 AWS 账号、同一区域里的所有 Amazon Bedrock AgentCore agent——包括那些他们本无权访问的内部敏感 agent。这条被命名为 AgentCorruption 的漏洞链,把"提示词注入"这个听上去像是聊天框小把戏的东西,变成了一次完整的基础设施级接管:私聊记录、长期记忆、容器源码、API key、OAuth token,全部被收割;更狠的是,攻击者还能往 agent 的"记忆"里植入恶意指令,让劫持在一次攻击之后长期潜伏。
这件事最值得 vibe 开发者警惕的地方在于:出问题的不是模型,而是默认配置。Zenity 的研究员并没有找到什么精巧的模型越狱技巧——他们只是发现,AWS 给 AgentCore 配的默认 IAM 执行角色权限大得离谱,而 agent 所在的基础设施又允许它访问云元数据服务。换句话说,这个漏洞链里最危险的一环,是你在控制台点"下一步"时顺手接受的那个默认角色。
一条 prompt 是怎么变成"整个账号通行证"的
攻击的起点简单到令人不安。研究员向一个面向公网的 AgentCore agent 发送了一条 prompt,内容是让它去访问 AWS 实例元数据服务 IMDS——那个地址是 169.254.169.254,云上每一台机器都知道它,它负责给运行在这台机器上的工作负载发放临时凭证。这是一种经典的服务端请求伪造(SSRF):骗服务器替你发一个它本来就能发的请求。
正常情况下,这个故事到这里就该结束了:agent 拿到的应该是只属于它自己的、权限收得很紧的一组凭证。但 AgentCore 的默认执行角色不是这么配的。Zenity 发现,这个角色的权限没有限定到单个 agent,而是覆盖了整个账号、整个区域的 AgentCore 资源:一份权限清单里躺着 bedrock-agentcore:InvokeAgentRuntime(调用任意 agent)、bedrock-agentcore:ListEvents(读事件/对话)、跨 agent 的 memory 写权限、bedrock-agentcore:GetResourceApiKey,以及 secretsmanager:GetSecretValue(读 Secrets Manager 里的密钥)。
于是连锁反应开始了:
- 发现并调用所有 agent:研究员枚举出同账号同区域的全部 AgentCore agent,逐个调用——其中包括他们原本没有权限碰的内部敏感 agent。想象一下:你放在公网的客服 agent,成了通往财务 agent 的跳板。
- 读走全部私聊和长期记忆:跨 agent、跨用户、跨会话的对话记录和长期记忆一览无余。agent 记得越多,泄露面越大——这正是"记忆"这个能力在安全上的另一面。
- 下载容器镜像,读完整源码:从 ECR 拉下每个 agent 的容器镜像,源码尽收眼底。对闭源商业 agent 来说,这等于被扒光。
- 收割密钥:Secrets Manager 里的 API key、OAuth token,连同环境变量里的凭证一起被带走。这些可不只是 AWS 自己的密钥——很多是 agent 用来连接企业内部系统和第三方服务的凭证,攻击面直接溢出 AWS 之外。
- 植入恶意记忆,实现持久化:这是整条链里最阴的一步。研究员滥用 agent 的 memory 功能,植入会长期驻留的恶意指令,把 agent 未来的对话悄悄定向到攻击者可控的目的地。用户看到的依然是那个可信的企业 agent,浑然不觉它已经在替别人打工。
爆破半径是 policy 文档的属性,不是模型的能力
AgentCorruption 之所以值得单独写一篇文章,而不是淹没在每周的安全简报里,是因为它撕开了一个很多 vibe 开发者还没意识到的真相:当你把 agent 部署到云上时,决定它"能干多大事"的不是模型有多聪明,而是你(或者默认配置)给它的 IAM 角色写了什么。
这几年大家讨论 agent 安全,焦点基本都在模型层:prompt injection、防越狱、guardrail、输出过滤。这些当然重要,但 AgentCorruption 的攻击路径里,模型表现得"完全正常"——它只是听话地执行了工具调用。真正失守的是身份与访问管理这一层:默认角色权限过大、IMDS 可达、memory 跨 agent 可写。Zenity CTO Michael Bargury 在披露声明里把这句话说得很透:"Cloud security is all about segmentation and least-privilege access. AI agents, however, need their creative space to be useful."(云安全的精髓是隔离与最小权限,但 AI agent 要有用就得给它"自由发挥的空间"。)两者的张力,就是 AgentCorruption 存在的土壤。
对 vibe 开发者来说,这个判断可以直接翻译成行动指南:下次你在 AWS 控制台(或任何云平台)给 agent 配执行角色时,"先复制默认角色让 demo 跑起来"这个动作本身,就是在给未来的自己埋雷。demo 能跑和生产能安全上线之间,差的往往就是这份 role policy 的几行 JSON。
AWS 说这是"预期行为":口径争议怎么看
这起披露还有一条值得玩味的副线:AWS 的回应口径。根据 The Register 10 月 9 日的报道,AWS 最初把 Zenity 的报告定性为"已文档化的预期行为"(documented behavior),意思是 agent 本来就能通过元数据服务拿到自己执行角色的凭证,开发者应当自行遵循最小权限原则。The Register 的记者也直言,这个说法和 Zenity 描述的攻击场景对不上——Zenity 演示的从来不是"agent 拿到自己的凭证",而是"默认角色的权限大到能接管全账号"。
时间线本身也说明了一些问题。Zenity 在 2025 年 12 月 25 日就向 AWS 做了负责任披露;2026 年 2 月 14 日,AWS 把 IMDSv2 设为 AgentCore 新部署的默认值(堵住了 SSRF 拿凭证最顺的那条路);4 月 12 日 AWS 回复称报告"有参考价值"并关闭了工单;但 6 月 22 日 Zenity 复查发现,默认执行角色的越权权限纹丝未动;直到 9 月 29 日的最终复查,AWS 才移除了允许跨 agent 调用、读私聊、访问 Secrets Manager 的权限。从首次披露到彻底修复,历时 278 天。
Zenity 的 Bargury 在 10 月 12 日的补充声明里也划清了边界:漏洞没有跨越 AWS 账号边界,且"已被完全修复"(has been fully mitigated)。没有 CVE 编号,也没有证据表明有人在野外利用过它。但这 278 天的窗口期里,所有用默认配置部署 AgentCore agent 的用户,理论上都暴露在同样的风险下——而"默认配置"恰恰是大多数人(尤其是快速验证想法的 vibe 开发者)最可能用的配置。
给 vibe 开发者的四项检查:agent 上云之前先做
AgentCorruption 已经修复,但它暴露的是一类系统性问题:agent 平台为了"开箱即用",默认给的东西往往比你需要的多得多。下次把 agent 部署上云之前,建议把下面四项过一遍:
- 最小权限执行角色,每个 agent 独立一份。别复用、别复制默认角色。role policy 只写这个 agent 当前 job 真正需要的 action 和 resource。记住 AgentCorruption 的教训:blast radius 写在 policy 里,不写在模型里。
- 锁死 IMDS:IMDSv2 + 网络策略双保险。确认实例只接受 IMDSv2(hop limit 设为 1),同时在 agent 的网络策略里明确禁止访问 169.254.169.254。SSRF 是老漏洞了,但 agent 的工具调用能力让它有了新载体。
- 把 agent memory 当作持久化攻击面来对待。跨 agent 的 memory 读写权限默认关闭;定期审计长期记忆里被写入了什么。一条恶意记忆的潜伏能力,不比一个后门差——AgentCorruption 已经演示过了。
- 密钥别进环境变量,别给 Secrets Manager 配宽松策略。API key 和 OAuth token 按需注入、最小授权;环境变量和宽松的 secrets 策略是凭证收割者最喜欢翻的两个抽屉。
结语:agent 越自主,身份边界越重要
AgentCorruption 和之前报道过的 CoreBreak(CVE-2026-18830,针对 InvokeHarness API 绕过模型 guardrail)正好形成对照:一个打的是模型的逻辑层,一个打的是平台的身份与访问层。agent 的能力越强、自主性越高,它"以什么身份"在云里行动就越关键——因为每一次工具调用,花的都是那个身份的"信用额度"。
Vibe coding 的精神是快速把想法变成现实,但"部署上云"这一步,值得比写 prompt 多花十分钟:打开 IAM 控制台,看看你的 agent 到底被允许做什么。如果答案是"默认角色,啥都能干一点"——那么从今天起,你就已经知道这意味着什么了。
评论 (0)
原始来源
相关文章

XMTP Labs CEO Shane Mac 的个人 CFO agent 把月度银行审计报告发进了公司高管 Slack 频道。只读权限没拦住它,同名频道和共享连接池才是病根——以及这起有争议的事故,给所有连银行、连 Slack 的 agent 用户的五条教训。

伦敦进攻性安全初创 CodeWall 结束隐身,获 400 万美元 pre-seed(Osney Capital 领投)。多个 AI agent 从零凭证、零源码、零特权出发,像外部黑客一样持续渗透企业,共享调查图谱协同,把一年一两次的渗透测试变成"永久能力"。拆解工作模式、与 XBOW 划界,以及独立开发者能抄的三条作业。

2026 年 10 月 10 日,Nadella 在 X 上发表长文:默认所有 AI 模型都已失陷,给 Agent 装上急停开关。他的七条原则对生产环境部署 agent 意味着什么——以及为什么卖 Copilot 的人,也在用同一套标准审判自己的产品。