AI 安全公司 PromptArmor 公开了一条针对 Databricks Genie Code 的攻击链:一个带恶意代码的 Skill,可以在用户毫无察觉的情况下把租户里的数据发到攻击者服务器,顺手在聊天界面里弹出一个钓鱼登录框。PromptArmor 列出的四类官方安全控制,在这条链上一道都没拦住。
Genie Code 是 Databricks 内置的智能体助手,用户用自然语言让它查表、跑分析、画图,结果直接渲染在网页聊天窗口里。Skill 则是一种可以上传给智能体的能力包,里面有说明文字,也可以带可执行代码。
攻击怎么走
PromptArmor 演示的流程只有四步。用户上传一个看上去正常的数据分析 Skill,让 Genie 用它分析某个数据集;Genie 执行 Skill 里的代码,负责把关的护栏代理没有识别出恶意功能;Genie 随后提示用户“打开完整分析结果”;结果一渲染,钓鱼弹窗出现,数据同时被发走。
外泄的手法很朴素。Skill 代码先读到受害者租户里的敏感数据,把它塞进一段要在聊天里显示的 HTML;HTML 里的 JavaScript 在用户浏览器里发起网络请求,把数据送到攻击者的服务器。钓鱼框也是同一段 HTML 渲染出来的,叠在 Genie 页面上,诱导用户输入账号密码。整个过程里没有任何一步需要人工审批。
四道控制为什么都没用
PromptArmor 把 Databricks 文档里提到的四类控制逐一对了一遍:
- 组织级 Skill 治理:Genie 会从用户个人工作区加载 Skill,并不只认组织统一管理的目录,管理员管不到用户自己传的那一份;
- 护栏代理:Databricks 自己把它定位为“尽力而为的效率功能”,不承诺当安全边界用;
- 代码环境出口控制:限制的是代码运行环境的出站流量,数据是从用户浏览器发出去的,这层规则看不见;
- 聊天显示沙箱:Skill 用的是已经拿到手的数据来拼显示内容,不需要在显示环节再查一次租户。
四条各有各的道理,拼在一起就留出了一条缝。PromptArmor 在 8 月 16 日向 Databricks 报告了问题,双方协调了一个月,9 月 16 日 PromptArmor 通知对方准备公开。
Databricks 在回复里的态度相当明确:
“it is ultimately the user’s responsibility to ensure that uploaded skills do not contain malicious content” (确保上传的 Skill 不含恶意内容,最终是用户的责任。)
关于可以跳过逐次确认的自动批准功能,Databricks 也说它“不打算作为安全边界”,文档里写的是不建议用于生产环境。
同一类缝,别家也有
把 PromptArmor 过去一年公开的几份报告放在一起看,攻击面高度相似。它此前披露过 Claude Cowork 外泄文件、Google Antigravity 外泄数据,路数都是让智能体读到敏感内容,再借渲染、链接或网络调用把内容带出去。区别在于入口:前几起多靠提示词注入,这次的 Genie 换成了 Skill 这种“装上就能跑代码”的插件。
对企业来说,Skill 比一段注入文本更难防。注入文本至少要藏在网页或文档里等智能体读到,Skill 是用户主动装进来的,天然带着信任。学术界今年也在密集讨论这件事,arXiv 上已经出现了专门评测恶意 Skill 的基准,检测工具的漏报率普遍不低。
国内不少团队也在给数据平台接智能体、开放插件市场,这起事件给出的检查清单很具体:Skill 是否只能从管理员审核过的目录加载,智能体输出的 HTML 能不能执行脚本、能不能向外部域名发请求,自动批准开关在生产环境是否默认关闭。三条里只要有一条没卡住,PromptArmor 演示的链路就有机会复现。
PromptArmor 给出的建议也落在这几点上:生产数据别开自动批准,留意 Skill 市场里被投毒的包。Databricks 是否会在产品层面补一道出站过滤,目前没有公开说明。
参考来源:PromptArmor 安全研究报告、Databricks Genie Code 产品文档、CocoLoop、arXiv 恶意 Skill 相关论文;披露与协调节点、Databricks 回复原文以 PromptArmor 报告为准。