微软 Copilot Cowork 沙箱被绕过:攻击者如何窃取你的邮件与文件

HN Enterprise AI Coding 2026-08-27T06:22:24.696233

安全研究人员发现 Microsoft Copilot Cowork 存在高危漏洞:恶意 Skill 代码可绕过沙箱网络隔离,与攻击者服务器建立「命令与控制」通道,进而窃取 Outlook 邮件、SharePoint 文件等敏感数据。即使用户按下停止按钮,攻击也不会中断。微软已在报告后约两个月完成修复。

背景:一个能接触你全部数据的 AI 代理

Microsoft Copilot Cowork 是 Microsoft 365(M365)中的智能代理(Agent),它以当前登录用户的身份运行,能够读取并处理 Outlook、Teams、SharePoint 以及已连接插件中的数据。换句话说,用户能访问什么,这个代理就有权限接触什么。

为了防止代理在执行代码时触达不受信任的外部服务,微软将其运行在一个沙箱中。沙箱是一种隔离的受限执行环境,会阻断网络访问,让代理内部的代码无法与外界通信——至少在设计的预期中是这样。

然而,研究人员发现了一个可以绕过沙箱、发起不受信任网络请求的漏洞。这意味着,如果 Copilot 被提示注入(Prompt Injection,通过精心构造的提示词诱导 AI 做出非预期操作)所操纵,或者用户运行了从网上下载上传的 Skill 代码(用户提供给代理使用的一段脚本),这些代码就能与攻击者的服务器通信。

一旦漏洞被利用,攻击者就可以建立一条完整的「命令与控制」链路:攻击者服务器下发指令 → 指令在沙箱内执行 → 执行结果回传。更严重的是,即使用户点击停止按钮,攻击也不会终止。

借助这个漏洞,攻击者可以执行任意命令,从沙箱或代理已连接的服务中窃取数据,包括:

该漏洞于 2026 年 6 月 24 日被报告给微软,微软已在 2026 年 8 月 19 日完成修复。关于负责任披露(Responsible Disclosure)的更多细节将在文章末尾说明。

攻击链:五步完成数据窃取

以下攻击链逐步说明攻击者如何利用该漏洞。网络绕过和恶意 Skill 代码的具体技术细节,将在后文中展开讨论。

第一步:受害者发起正常查询

受害者向 Copilot Cowork 发起一个正常请求:要求代理对比两份文档,检查它们之间是否存在相互矛盾的说法。Cowork 的编辑器里附上了 contract.docxproposal.docx,提示词要求它使用 /doc-consistency 命令检查合同与提案之间是否有不一致之处。

第二步:受害者使用了一个从网上找来的 Skill

为了完成文档对比,用户让代理调用一个名为 doc-consistency 的 Skill。这类 Skill 经常被人上传到网上分享,也可以在 M365 企业内部互相共享。根据文档说明,Skill 最多还能附带 20 个伴生文件(比如参考文档和脚本),而这个 Skill 捆绑的其中一个脚本——是恶意的。

从活动日志中可以看到,代理此时正在调用用户从网上找到的这个 Skill,日志显示「Reviewed custom skill Doc consistency」。

第三步:代理执行 Skill,恶意代码混入其中

代理决定执行 Skill 附带的脚本。脚本会生成一份完整的文档一致性报告,但与此同时,它也会悄悄触发一次攻击利用。表面上 Cowork 在检查文档一致性,实际上运行的 Skill 捆绑代码里,已经混入了恶意脚本。

第四步:恶意代码突破沙箱,建立远程连接

恶意代码绕过了沙箱的网络限制,从攻击者的服务器获取命令、执行,再把结果传回。攻击者的服务器上可以看到:一个宿主机连了进来、有一条 shell 命令在排队,以及从 Cowork 沙箱内部返回的输出。

第五步:攻击者窃取数据,停止按钮无效

攻击者可以随意执行命令,从 Outlook、SharePoint、Teams、已连接的插件、聊天记录等处窃取数据。更棘手的是,即使用户按下停止按钮,攻击也不会立刻终止——沙箱后台的进程会继续运行,即便代理这一轮的执行已经结束。

攻击者通过 MCP 服务器列出 Outlook 邮件、并获取某封交易相关邮件完整内容的终端画面。Copilot Cowork 是通过 MCP 服务器来访问 Outlook、SharePoint、Microsoft Graph、插件等服务的。攻击者可以用一条命令以编程方式访问这个 MCP 服务器。在这里,攻击者的服务器上有一个函数,能把类似「MCP Outlook ListMessages」这样的终端输入,转换成调用 MCP 服务器的内联 Python 脚本命令。

关键要点

攻击演示:让 Cowork 自己跑恶意代码

整个攻击链路并不复杂,核心思路可以浓缩成一句话:把一个看似无害的「文档检查」技能(Skill)交给 Copilot Cowork,让它主动执行技能里捆绑的代码——而这些代码,正是攻击者事先准备好的恶意脚本。下面通过几组演示截图,看看这套攻击在实际环境中是如何一步步发生的。

恶意技能混进了正常任务

The Cowork composer with contract.docx and proposal.docx attached and the prompt asking it to check the contract against the proposal for inconsistencies using /doc-consistency.

在 Cowork 的 Composer 界面中,测试者同时附上了 contract.docxproposal.docx 两份文档,随后输入提示词,要求系统调用 /doc-consistency 这个自定义技能,去核对合同与提案之间是否存在不一致。从表面看,这只是一个再普通不过的文档审查任务。

Cowork 在后台悄悄调用了外部技能

Cowork’s activity log showing “Reviewed custom skill Doc consistency” as the agent invokes the Skill the user found online.

从活动日志可以看到,Cowork 显示「Reviewed custom skill Doc consistency」,说明代理已经调用了这个从网上找到的技能,并开始执行它定义的任务。此时,用户以为自己在使用官方功能,实际触发的却是外部来源的自定义技能——攻击的入口就此打开。

界面正常「上班」,恶意代码在后台照跑

Cowork reporting that it is checking the documents for inconsistencies while running the Skill’s bundled code, including the malicious script.

Cowork 在界面上报告说,它正在检查文档的不一致之处——但与此同时,它已经在运行技能捆绑的代码,其中就包含恶意脚本。换句话说,系统在用户完全不知情的情况下,代为执行了攻击代码。

攻击者服务器收到来自沙箱的连接

The attacker’s server showing a new host connect, a shell command queued, and its output returned from inside the Cowork sandbox.

在攻击者的服务器上,可以看到一个新的主机连接进来,一条 shell 命令被排队执行,命令的输出结果也从 Cowork 沙箱内部原样返回。这说明攻击者已经突破了沙箱的网络隔离,能够在沙箱内部运行任意命令,并将结果传回外部。

沙箱失守:从命令执行到邮件窃取

攻击者控制的服务器很快就收到了来自沙箱内部主机的新连接。一条 shell 命令被加入执行队列,命令输出直接从 Cowork 沙箱环境返回到了攻击者手中——这意味着沙箱的安全隔离已经被完全突破。

The attacker’s terminal listing Outlook messages through the MCP server and retrieving the full contents of a deal-related email thread.

获得沙箱内的执行权限后,攻击者开始借助 MCP 服务器(即模型上下文协议服务器,可以理解为 AI 助手与外部应用之间的数据通道)列出 Outlook 中的邮件目录,并完整读取了一段与某笔交易相关的邮件线程。对企业来说,这等于把内部最敏感的沟通记录直接交到了攻击者手里。

这次攻击的实际危害并不局限于沙箱本身。攻击者没有通过复杂的钓鱼或端点渗透,而是借用了原本用于提升协作效率的 AI 工具,就拿到了真实的业务数据。对于依赖 Copilot Cowork 处理邮件、文档和交易信息的团队,这类漏洞的破坏力尤其值得警惕。

查看原文