背景
Databricks Genie Code 是 Databricks 中的一个智能体助手,使用户能够通过自然语言指令对其租户中的数据进行操作。
Genie Code 可以在聊天中为用户渲染显示内容;恶意 Skill 可以利用这一功能,在工具结果被查看时触发数据外泄,并向用户显示钓鱼攻击。
这种攻击可以在没有任何人工在环审批的情况下发生,也不受组织可能依赖的控制措施的约束:
- 组织级别的 Skill 治理;Genie Code 从用户的个人工作区加载 skill,而不是从组织的受治理目录加载
- 在命令运行前对其进行评估的护栏智能体;Databricks 认为这是一种尽力而为的生产力功能,而不是安全控制措施
- 编码环境的出站网络控制;出站流量来自用户的浏览器,而不是编码环境
- 聊天中渲染的显示内容的沙箱隔离;Skill 使用用户数据构建显示内容,显示内容不需要访问租户来获取数据
该风险已于2026年8月16日向 Databricks 披露,但对方认定其属于“用户有责任确保上传的 skill 不包含恶意内容”的范畴。鉴于恶意 Skill 在在线市场中广泛传播,以及组织很可能依赖的控制措施并不能消除这一风险,我们发布此报告以告知面临风险的人群。
攻击链
Genie 被提示使用上传的 Skill 分析数据
Skill 通常通过在线市场分发,而这一生态系统已知充斥着恶意 Skill。 Databricks 确实有一套 Skill 治理系统,但 Genie Code 使用的 Skill 是从用户的个人工作区配置的,而不是从组织的受治理 Catalog 配置的。
Genie 执行来自恶意 Skill 的代码
当 Genie 执行来自 Skill 的代码时,会由第二个智能体进行检查,该智能体会标记超出用户预期操作的命令,例如“向第三方发送数据”的命令。
该在环智能体批准了运行 Skill 代码,未能发现其恶意功能。
Genie 指示用户打开完整的数据分析结果
当结果渲染时,会显示一个钓鱼弹窗,并且用户的数据集被外泄
恶意 Skill 中的代码构建了一个 HTML 元素,该元素有两个恶意用途。其中一个效果是渲染攻击者网站的覆盖层,对用户进行凭据钓鱼。
另一个效果是,当弹窗渲染时(例如,当用户查看结果时),来自受害者租户的数据被外泄。恶意 Skill 的代码利用其对受害者租户的访问权限收集敏感数据(如受害者的数据集),然后将这些数据构建到 HTML 显示内容中。当显示内容渲染时,恶意显示内容中的 JavaScript 会导致用户的浏览器发出网络请求,将数据外泄到攻击者的服务器。
虽然编码环境具有网络出站控制措施,可以阻止与攻击者服务器的通信,但显示界面没有此类措施,可以向攻击者发送数据。
负责任的披露
该风险已于2026年8月16日报告给 Databricks。Databricks 团队认定:
“确保上传的 skill 不包含恶意内容最终是用户的责任。”
网络出站控制规定编码环境不允许联系不受信任的外部方,这一点得到了遵守。它只是查询了数据并用它构建了一个 iframe。
面向用户渲染的显示内容的控制措施规定,显示内容不允许从租户查询数据,这一点也得到了遵守。它只是处理了由 Skill 的代码嵌入其中的数据。
因此,恶意 Skill 代码可以在计算环境中查询数据,将其构建到 iframe 中,而 iframe 可以发出网络请求以外泄数据……
我们认为这种交互代表了 Databricks 威胁模型中的一个缺口,因为这两项在技术上得到遵守的保证,其目的正是为了防止最终发生的数据外泄后果。
关于恶意命令被护栏代理批准的问题,Databricks团队指出,
“自动允许功能并非旨在作为安全边界,而是作为一项控制措施,用于防止不受信任的输入自动运行。”
文档支持这一说法:
然而,由于“auto-approve”被文档记载为默认且“推荐”的命令批准模式,我们认为用户在实际使用中不太可能遵守不将其用于生产数据的指示。
对于 Genie Code 的 Skills 是从用户的个人工作区而非组织级受管制的 Catalog 加载这一事实,没有任何声明。
时间线
| 2026年8月16日 | PromptArmor 向 Databricks 披露 |
| 2026年8月17日 - 9月15日 | PromptArmor 与 Databricks 协调 |
| 2026年9月16日 | PromptArmor 告知 Databricks 发布意向 |
