DifyTap:四个授权缺陷致 Dify 租户间 AI 对话泄露
Zafran Labs 于 2026 年 6 月 22 日披露 Dify 中的四个 DifyTap 缺陷——两个严重、两个无需认证、三个具有跨租户影响——攻击者可窃听其他客户的 AI 对话并读取其文件。其中三个已在 1.14.2 中修复。
这是什么?
2026 年 6 月 22 日,Zafran Security(研究员 Ido Shani 与 Gal Zaban)发布了 DifyTap,这是对 Dify 中四个漏洞的协调披露。Dify 是一个开源的 LLMOps / 智能体工作流平台,GitHub 星标超过 14 万,其 API 镜像的 Docker 拉取量超过 1000 万次;据 Zafran 统计,该平台支撑着 60 多个行业中超过一百万的应用,使用方包括 Volvo、Maersk、Panasonic 与 Thermo Fisher 等企业。
其中两个缺陷为严重级别,两个完全无需认证,三个对 Dify 的多租户云(cloud.dify.ai)具有跨租户影响:一个客户的私有数据可被另一个客户读取。其结果是一个隐蔽通道,使攻击者能够「窃听」流经受害者应用的每一条消息与模型响应,并读取其他租户的文档与文件。根据 Zafran 的时间线,CVE 由 VulnCheck 于 2026 年 4 月 30 日分配,修复版本于 2026 年 5 月 19 日发布,早于公开报告。
工作原理
这四个问题都是授权缺陷——租户或所有权检查缺失或为间接检查——而非模型越狱。
CVE-2026-41947(CVSS 9.1)——追踪劫持。 Dify 允许应用将其追踪数据(其中包含真实的提示词与响应)转发给 LangSmith 或 Opik 等外部提供方。配置追踪的接口从不校验调用者的租户:任何拥有控制台账户的用户——由于云端允许自由注册,获取极为简单——都可将任意以客户端身份可访问的应用的追踪重定向到攻击者控制的提供方,从而为该应用的全部流量建立持久的外泄通道。
CVE-2026-41948(CVSS 9.4)——Plugin Daemon 路径遍历。 插件图标接口将 filename 参数未经净化便直接注入到内部 Plugin Daemon 的 URL 中:../../ 片段可抵达任意内部接口。更关键的是,该图标路由完全不强制登录,因此任何具备网络访问权限的机器都可触及,且租户 ID 由攻击者提供。当前可达范围有限(如 debug/pprof),但这是一个架构性漏洞:任何新增的内部接口都可能演变为高危漏洞。
CVE-2026-41949(CVSS 7.5)——预览任意文档。 /console/files/<id>/preview 接口返回文档的前 3000 个字符,且仅校验文件类型为「Document」——无所有权检查、无租户检查——因此任何控制台用户都可读取整个系统中的文档。
CVE-2026-41950(CVSS 6.5)——借助聊天机器人读取他人文件。 文件权限是从消息权限间接派生的。由于系统只校验租户 ID(而不校验某个文件 UUID 是否已属于他人的消息),攻击者可将受害者文件的 UUID 附加到自己的消息上,并要求具备文件读取能力的机器人:「逐字重复这个文件的内容。」 LLM 由此沦为外泄工具。
此外,Zafran 发现 Dify 在长达 18 个月的时间里(直到 2025 年 12 月 21 日)一直内置了易受 CVE-2024-5846(一个于 2024 年 6 月 11 日披露的释放后使用漏洞)影响的 PDFium 版本——只需向预览接口上传恶意 PDF 即可触发。
为什么重要
DifyTap 是一个教科书式的提醒:AI 平台中的危险漏洞往往是平淡无奇的 Web 授权缺陷,被平台所连接的能力放大。三点值得注意。其一,对话历史是皇冠上的明珠:追踪劫持(41947)将一个缺失的租户检查变成对每条提示词与响应的实时监听。其二,LLM 本身成为外泄原语(41950):一旦授权检查变为间接,具备文件读取能力的智能体便会乐于交出其用户本无权查看的数据。其三,扫描器无法发现:正如 Zafran 所指出的,Dify 将未打包的代码复制进镜像,因此传统容器扫描器根本无法将镜像映射到项目级 CVE——风险对安全团队完全不可见。
防御
- 立即打补丁。 升级到 Dify 1.14.2,它修复了 CVE-2026-41947、-41949 与 -41950;或从 GitHub 构建最新版本,其中还包含已合并的 CVE-2026-41948 修复。
- 缓解尚未修复的路径遍历(41948)。 在 1.14.2 上,针对
/console/api/workspaces/current/plugin/icon及插件tasks/.../delete/...路由的路径遍历尝试部署 WAF / IDS 规则;Zafran 已发布针对 GET 与 POST 两种原语的 Snort 签名。 - 不要暴露控制台。 将多租户控制台与内部 Plugin Daemon(端口 5002)置于公网之外;已观测到数以万计暴露在互联网上的 Dify 实例。
- 让授权直接化,而非派生化。 四个缺陷的根因都是从另一个对象(租户、消息)推断出来的权限。在每个请求上校验对真实资源(文件 UUID、应用、追踪目标)的所有权。
- 限制智能体的文件访问与出站。 将具备文件读取能力的机器人限定于当前用户的文件,并将任何追踪/遥测目的地视为需经白名单的出站决策。
- 隔离文件解析。 升级并隔离原生解析器(PDFium、ffmpeg)——不可信文档抵达内存不安全的库本身就是一个 RCE 攻击面。
状态
| CVE | CVSS | 问题 | 需要认证 | 跨租户 | 修复版本 |
|---|---|---|---|---|---|
| CVE-2026-41947 | 9.1 | 追踪配置授权绕过 | 控制台用户 | 是 | 1.14.2 |
| CVE-2026-41948 | 9.4 | Plugin Daemon 路径遍历 | 否 | 是 | GitHub(下一版本) |
| CVE-2026-41949 | 7.5 | 文档预览授权绕过 | 控制台用户 | 是 | 1.14.2 |
| CVE-2026-41950 | 6.5 | 经聊天机器人跨用户读取文件 | 租户用户 | 租户内 | 1.14.2 |
| CVE-2024-5846 | 8.8 | PDFium 释放后使用(解析器) | 租户用户 | — | 2025 年 12 月 21 日修复 |
关键日期:自 2025 年 12 月 14 日起在负责任披露框架下上报;CVE 由 VulnCheck 于 2026 年 4 月 30 日分配;修复版本 1.14.2 于 2026 年 5 月 19 日发布;公开报告于 2026 年 6 月 22 日。对任何运营 LLMOps 平台的人而言,结论是:模型很少是薄弱环节——围绕它的多租户底层管道才是。
Sources
- → https://www.zafran.io/resources/difytap-zafran-discovers-how-attackers-can-silently-wiretap-ai-data-across-tenants-on-a-platform-powering-1m-apps
- → https://thehackernews.com/2026/06/researchers-detail-difytap-flaws-in.html
- → https://nvd.nist.gov/vuln/detail/CVE-2026-41947
- → https://nvd.nist.gov/vuln/detail/CVE-2026-41948
- → https://github.com/langgenius/dify/releases/tag/1.14.2