Hotdry.
ai-security

Mintlify供应链攻击技术分析:XSS漏洞如何影响X、Vercel、Cursor、Discord等数百家公司

深入分析2025年11月针对Mintlify文档平台的供应链攻击事件,拆解跨域SVG文件加载漏洞的技术原理、攻击向量放大效应,以及企业级应急响应机制。

2025 年 11 月,一场针对 AI 文档平台 Mintlify 的供应链攻击震动了整个科技行业。这场攻击不仅影响了 X(原 Twitter)、Vercel、Cursor、Discord 等知名公司,更暴露了现代 SaaS 供应链中隐藏的致命弱点。本文将从技术角度深入分析这一事件的攻击向量、依赖劫持机制,并提供可落地的防御策略。

事件概述:单一漏洞,数百家受害者

2025 年 11 月 7 日,Discord 宣布将其开发者文档平台迁移至 Mintlify—— 一个 AI 驱动的文档生成平台。仅仅两天后,16 岁的安全研究员 Daniel 和他的朋友发现了 Mintlify 平台中的一个关键漏洞,这个漏洞允许攻击者在 Discord.com 域上执行任意 JavaScript 代码。

正如 Daniel 在技术报告中所描述:“这个跨站点脚本攻击影响了几乎每一个 Mintlify 客户。” 受影响的公司名单读起来像是科技行业的 Who's Who:X、Vercel、Cursor、Discord,以及数百家其他企业。

技术拆解:/_mintlify/static/端点的致命缺陷

漏洞核心:缺乏子域名验证的静态文件端点

攻击的核心在于 Mintlify 平台的一个内部 API 端点:/_mintlify/static/[subdomain]/[...route]。这个端点的设计初衷是允许 Mintlify 平台从不同子域名加载静态文件,但存在一个致命的安全缺陷:它没有验证请求的[subdomain]参数是否与当前主机匹配

这意味着,攻击者可以通过 Discord.com 域访问该端点,指定任意 Mintlify 子域名,然后加载该子域名下的任意文件。更糟糕的是,这个端点支持 SVG 文件格式,而 SVG 文件可以嵌入 JavaScript 代码。

SVG 文件中的 JavaScript 注入

SVG(可缩放矢量图形)文件通常被视为图像文件,但它们实际上是基于 XML 的格式,可以包含<script>标签。当浏览器加载 SVG 文件时,如果 SVG 是通过<img>标签加载的,其中的 JavaScript 不会执行 —— 这是浏览器的安全限制。

然而,Mintlify 的/_mintlify/static/端点存在一个关键差异:它返回的 SVG 文件被当作独立的文档处理,而不是作为图像资源。当用户访问https://discord.com/_mintlify/static/hackerone-a00f3c6c/lmao.svg时,浏览器会将其视为一个独立的页面,SVG 中嵌入的 JavaScript 代码就会在 Discord.com 域上执行。

攻击链还原

  1. 侦察阶段:攻击者分析 Mintlify CLI 源代码,发现/_mintlify/static/端点
  2. 武器化阶段:创建包含恶意 JavaScript 的 SVG 文件,上传到自己的 Mintlify 文档
  3. 投递阶段:构造指向 Discord.com 域的特殊 URL
  4. 执行阶段:受害者访问恶意链接,JavaScript 在 Discord.com 域上执行
  5. 持久化阶段:攻击者可以窃取会话令牌、执行账户接管等操作

供应链攻击的放大效应

信任边界的模糊化

Mintlify 案例揭示了现代 SaaS 供应链中的一个根本问题:信任边界的模糊化。当企业使用第三方 SaaS 服务时,他们实际上将自己的安全边界扩展到了该服务提供商的基础设施上。

在传统架构中,企业需要保护自己的服务器和应用程序。但在 SaaS 时代,企业还需要信任:

  • 第三方服务的代码安全性
  • 第三方服务的 API 端点设计
  • 第三方服务的内部访问控制
  • 第三方服务的依赖链安全性

攻击面的指数级扩大

Mintlify 拥有数百家企业客户,每个客户都在自己的主域名上托管 Mintlify 文档。这意味着:

  • 单一漏洞影响数百个域名:一个漏洞可以同时影响 discord.com、docs.x.com、vercel.com 等
  • 攻击成本极低:攻击者只需发现一个漏洞,就可以攻击所有客户
  • 防御难度极高:客户难以审计第三方服务的所有内部端点

正如安全研究员所指出的:“这是一个供应链攻击的典型案例 —— 通过攻破一个供应商,你可以访问所有客户的系统。”

应急响应机制分析

Discord 的快速响应:2 小时回滚

Discord 的安全团队在收到漏洞报告后采取了教科书式的应急响应:

  1. 立即隔离:在确认漏洞后 2 小时内,Discord 完全关闭了其开发者文档平台
  2. 影响评估:安全团队评估漏洞的潜在影响范围和严重性
  3. 回滚策略:Discord 迅速回滚到之前的自定义文档平台,完全移除 Mintlify 路由
  4. 透明沟通:通过 Discord 状态页面公开事件信息,保持透明度

这种快速响应机制值得所有企业学习。关键的成功因素包括:

  • 明确的回滚路径:Discord 保留了旧系统,使得快速回滚成为可能
  • 自动化部署流程:能够快速切换文档平台
  • 跨团队协作:安全、开发和运维团队的紧密配合

Mintlify 的修复过程

Mintlify 的响应同样值得关注:

  1. 建立直接沟通渠道:与安全研究员建立 Slack 频道,直接与工程团队沟通
  2. 快速修复:在收到报告后迅速修复漏洞
  3. 赏金计划:向研究员支付总计约 11,000 美元的赏金
  4. 安全改进:根据 Mintlify 的安全更新,公司实施了多项安全改进措施

企业级防御清单

基于 Mintlify 事件的分析,我们提出以下可落地的防御策略:

1. 第三方 SaaS 服务安全评估清单

在采用任何第三方 SaaS 服务前,企业应进行以下评估:

  • API 端点安全审计:要求供应商提供所有公共 API 端点的安全评估报告
  • 跨域资源访问控制:验证服务是否实施严格的同源策略
  • 文件上传处理:审查文件上传和处理的安全机制
  • 内容安全策略(CSP):确认服务是否实施严格的 CSP 头

2. 供应链攻击监控指标

建立以下监控指标,早期发现供应链攻击:

  • 异常跨域请求:监控来自第三方域名的异常请求模式
  • 静态文件加载模式:跟踪 SVG、JavaScript 等文件的加载行为
  • API 端点访问频率:监控内部 API 端点的访问频率和模式
  • 用户行为异常:检测账户接管等异常用户行为

3. 应急响应预案参数

制定具体的应急响应参数:

  • 回滚时间目标(RTO):针对关键第三方服务,设定明确的回滚时间目标(如 2 小时)
  • 数据备份频率:确保关键数据有可用的备份
  • 通信协议:建立内部和外部通信的明确流程
  • 责任分配矩阵:明确安全、开发和运维团队的责任

4. 技术防御措施

实施以下技术防御措施:

  • 严格的 CSP 策略:实施script-src 'self'等严格策略,限制外部脚本执行
  • 子资源完整性(SRI):对第三方资源使用 SRI 哈希验证
  • 沙箱隔离:在 iframe 中加载第三方内容,使用sandbox属性限制权限
  • 定期安全审计:定期对第三方集成进行安全审计

未来展望:供应链安全的新范式

Mintlify 事件标志着供应链安全进入了一个新阶段。随着企业越来越多地依赖第三方 SaaS 服务,传统的安全边界正在消失。未来,我们需要:

  1. 零信任供应链:将零信任原则扩展到整个供应链,不信任任何第三方服务
  2. 自动化安全验证:开发自动化工具,持续验证第三方服务的安全性
  3. 共享威胁情报:建立行业内的供应链威胁情报共享机制
  4. 标准化安全框架:推动第三方服务安全评估的标准化

结论

Mintlify 供应链攻击事件为我们敲响了警钟。在数字化时代,企业的安全不再仅仅取决于自身系统的安全性,还取决于整个供应链的安全性。通过深入分析这一事件的技术细节、攻击向量和应急响应,我们可以更好地理解现代供应链攻击的运作机制,并制定有效的防御策略。

关键要点总结:

  • 单一 SaaS 漏洞可影响数百家企业,攻击面呈指数级扩大
  • 第三方 API 端点的安全设计至关重要,缺乏验证的端点可能成为攻击入口
  • 快速回滚能力是应急响应的关键,Discord 的 2 小时回滚值得学习
  • 企业需要建立全面的供应链安全评估框架,而不仅仅是技术防御

随着 AI 和 SaaS 服务的进一步普及,供应链攻击只会变得更加频繁和复杂。只有通过持续的技术创新、严格的安全实践和行业协作,我们才能在这个日益互联的世界中保护数字资产的安全。


资料来源

  1. How we pwned X (Twitter), Vercel, Cursor, Discord, and hundreds of companies through a supply-chain attack - hackermondev 的技术报告
  2. How Mintlify is improving security - Mintlify 安全更新公告
查看归档