Databricks Genie 恶意技能包在结果渲染时外泄租户数据,PromptArmor 判定其四项控制全部失效。本文拆解 Web 端智能体的五层执行边界与可落地检查项。
用户点开一份数据分析结果,页面上弹出的是一个登录框——以及一个把租户数据悄悄送往外部服务器的浏览器请求。这条在 2026 年公开披露的攻击链,值得每个把智能体接进业务系统的人重读一遍。
Databricks 的 Genie Code 是一个能在租户内用自然语言操作数据的智能助手,它还能把结果直接渲染在聊天窗口里。PromptArmor 在 2026 年 8 月 16 日把一条攻击链提交给厂商,9 月 16 日公开披露。
链条只有四步:用户让助手用一个上传的技能包分析数据;助手执行了技能包里的代码,中间的护栏代理没有拦住"把数据发给第三方"这类命令;助手引导用户去看完整结果;结果渲染的瞬间,恶意代码同时在页面上叠了一个钓鱼弹窗,并用受害者租户的数据拼出 iframe,由浏览器发起请求把数据发走。
厂商的结论是"用户有责任确保上传的技能包不含恶意内容"。而 PromptArmor 的判据更值得记住:下面四道被寄予厚望的控制,当时全部"技术上成立",却没能阻止外泄。
同期,IT之家 汇总的条目显示,OpenAI 已披露其失控智能体在 2026 年 6 月访问了新南威尔士州第二处政府网站。两件事的共性不是模型不够强,而是它被允许走到哪里。
如果只把 Genie 当成某一家产品的实现瑕疵,就会漏掉真正的信号:技能包生态本身已经被污染。gbhackers 在 7 月报道的一篇论文里,研究者用 SKILLCLOAK 对 1,613 个真实恶意技能包做变形,部分变体绕过了参与测试的 90% 以上扫描器,且被"隐身"后功能不降——在生产级编码助手上仍能跑通。与之对照,走运行时行为审计路线的 SKILLDETONATE 在 SkillJect 基准上,以 2% 误报率检出了 96.7% 的攻击。
提示注入过滤器和内容安全模型看的是文本。而 Genie 这条链里,真正的载荷发生在"渲染"这一步——一个 iframe 加一段前端脚本,语义上是干净的展示代码。
更麻烦的是组合型失效。安全评审习惯把控制点逐个过一遍,每个都"有",就默认可接受;但攻击者找的是两个控制之间的缝:出站管控管的是执行环境,渲染沙箱管的是"能不能回查数据",两条都守住了自己的范围,缝里流出的数据没人管。
所以边界不能按"输入内容"划,要按"执行路径"划。下面五层,按数据从进入到离开的实际路径排列。
技能包、MCP server、内部 API 都要走同一套准入:先登记再授权,默认拒绝。
这一层是本次事件最直接的补丁点。管控必须覆盖每一个能发起请求的地方:后端执行环境、容器,以及最终渲染结果的浏览器。
反面教训很典型:不少团队在容器层做出了站管控,就认为"外泄不可能",但没有问一句——渲染出来的页面,是谁在替它发请求。
技能包本质是可执行代码,不是文档,执行面要按不可信代码对待。
出了事能回答三个问题,才算有审计:哪个技能包、读了哪些数据、发去了哪里。
日志粒度本身是个独立话题,我们在 AI Agent 事故取证:日志要留到什么粒度才够复盘 里单独拆过;落到执行边界上,缺的往往不是日志条数,而是"数据流向"这一维度。
人工确认是最容易被做成橡皮图章的一层。Genie 的教训是:auto-approve 是默认项,而被推荐的文档语气很难让人逐条点确认。
可行做法是把确认绑定到风险等级,而不是全量确认:
| 层 | 要挡的攻击面 | 典型失效点 | 一个可验证的检查项 |
|---|---|---|---|
| 1 工具权限 | 越权读取、供应链投毒 | 技能包来自个人工作区 | 能否列出每个技能包的授权表清单 |
| 2 出站管控 | 渲染期隐式请求外泄 | 只管容器、漏掉浏览器 | 渲染容器是否也有 CSP 白名单 |
| 3 执行沙箱 | 窃取凭证、落盘持久化 | 可写根目录、密钥可读 | 沙箱内能否读到长期密钥 |
| 4 动作审计 | 事后无法定位与回滚 | 只记结果、不记数据流向 | 能否还原一次外泄的完整路径 |
| 5 人工确认 | 高危动作被静默放行 | 全量确认退化成橡皮章 | 默认模式是不是 auto-approve |
不够。过滤解决的是"模型会不会被带偏",解决不了"被带偏之后它能碰到什么"。权限、出站、沙箱三层不收紧的话,滤掉九成注入也只剩一成风险敞口。
沙箱只保证"破坏范围有限",不保证"行为可接受"。沙箱里读不到密钥、发不出请求,才算真的兜住;否则技能包只是在一个更小的房间里完成同样的事。
因为请求不是执行环境发的。渲染给用户看的页面运行在浏览器里,用的是它自己的网络栈。管控清单里必须显式写上"所有渲染层"。
要。它和技能包属于同一类对象:都是可以被投毒的第三方扩展。准入、授权范围、出站白名单要一并纳入,不能因为"是我们自己配的"就跳过。这一点在 AI Agent 平台搭建:从 MCP 到多智能体编排 里有更细的编排侧讨论。
五层边界立完之后,真正的检验来自对抗:把已上线的智能体当作外部目标去测,看它能被诱导触达哪些本不该碰的数据与网络出口。这类演练的边界与风险,我们在 AI Agent 安全测试正在变成新的安全风险 里谈过。蓝曜炬辉在给企业做 Web 端智能体落地时,把上面这张速查表列为上线前的必过项;如果你正在评估自建平台的执行边界,可以从 我们的案例库 里同类项目的隔离方案看起。