
当挪威安全研究员Hakon Moller在2026年7月公开演示这个攻击时,很多人的第一反应是——这怎么可能?这不是漏洞,这是AI设计逻辑本身的问题。它不修补丁,它利用的是大模型从娘胎里就带出来的缺陷:模型眼里,所有文本都是一样的。
一、它是怎么工作的:一场教科书级别的降维打击
先从攻击链条说起,理解这个攻击不需要你是安全专家。攻击者只做了一件极其简单的事:在一个普通的Word文档里,嵌入了用白底白字写成的JSON指令。
肉眼看去,这个文档完全正常——也许是一份会议纪要,一份项目报告,或者一份同事分享的模板。你打开,Copilot弹出,你可以问它问题、让它总结内容、生成后续文档。一切如常。
问题出在Copilot处理文档的那一刻。
当Copilot读取文档时,它会先把文档里的颜色、字号、字体这些「渲染层信息」全部剥离,只把纯文本内容喂给大模型。白底白字——肉眼看不见,但到了模型那里,和普通文字没有任何区别,都是一行一行的文本指令。
这就是Moller称之为「上下文坍塌」(Context Collapse)的核心:人类看到的文档,和大模型理解的文档,根本不是同一份东西。
💡 大模型看不见颜色,分不清字体,它的世界里只有文本——而文本,既是数据,也是指令。
一旦隐形的指令进入模型上下文,攻击就开始了。Copilot被指示执行一系列操作:读取你的邮件、访问你的OneDrive、把你的文件内容整理成一个摘要……这些操作单独看,每一步都在用户的合法权限范围内,DLP不会报警,EDR不会告警,权限模型更不会拦截——因为「没错啊,用户让Copilot整理文件,这有什么问题?」
这就是安全圈称之为「混淆代理攻击」(Confused Deputy Attack)的经典形态:权限没有越界,但有人冒充了真正的主人,行使了不该行使的权力。
二、为什么它会自我复制:蠕虫的「灵魂」
如果只是偷数据,这个攻击充其量只是一个高级后门——攻击者需要主动投递文档,需要用户打开它,需要用户恰好在Copilot会话中使用它。它有传播的边界,攻击成本很高。
但「文档蠕虫」之所以叫蠕虫,是因为它实现了自传播。
攻击链条的最后一步是Copilot生成的新文档:指令同时让Copilot在被它生成的结果文档底部,也写入一段白色文字。这段文字和原始文档里的攻击指令一模一样。当你的同事收到这份「你整理的会议纪要」,打开继续用Copilot——感染自动发生。
你不需要点任何链接,不需要下载任何附件,不需要输入任何密码。只要这份文档在SharePoint上存在,Copilot就会自动在Work IQ模式下检索OneDrive,把它拉进上下文,自动触发。
💡 过去我们防病毒、防木马、防钓鱼——但从来没有一种攻击,能在「你正常办公」的过程中,自动完成横向移动。
这是有史以来第一次,主流商业办公套件中出现真正意义的AI蠕虫。攻击者不需要入侵你的系统,不需要拿到你的凭证,他只需要让一份文档被Copilot看见——剩下的,全部由你的AI助手代劳。
三、为什么所有传统防御都失效了
面对这个攻击,你会发现自己手里的安全工具,几乎全部哑火。
EDR:看不到任何恶意进程。没有可执行文件落地,没有可疑的网络连接,没有注册表写入。攻击全程发生在模型上下文里,而EDR的检测逻辑基于行为特征,不是文档内容。
邮件网关:扫不出恶意附件。这就是一份格式完全合法的docx文件,用Word打开完全正常,没有任何可疑宏,没有任何可疑脚本。
DLP:匹配不到任何敏感数据外发规则。Copilot读取文件、整理文件、把结果写入新文档——全程用的是用户本人的身份和权限,数据是在用户授权下「正当」流转的。DLP说:这没问题啊。
权限模型:你不能因为Copilot能读文件就把它禁掉——那是它的正常工作。你也不能限制Copilot只能读不能写——那它就废了。
核心矛盾
LLM的上下文窗口对所有文本一视同仁:用户输入是文本,恶意指令也是文本,数据是文本,代码也是文本。在模型的世界里,没有「可信任内容」和「不可信任内容」之分——只有「上下文里的内容」。
这不是某一家厂商的问题。2026年以来,同样的攻击模式在多个场景密集出现:ASCII走私攻击用不可见Unicode编码外带数据;Mermaid图表伪装成登录按钮承载十六进制编码邮件内容;URL的q参数被用作「参数到提示注入」窃取双因子验证码;Copilot Cowork通过投毒skill文件窃取文件。
根因只有一个:LLM架构层面就缺少「可信边界」这个概念。
💡 过去三十年,安全行业建起了一道道防线——防火墙、EDR、DLP、零信任。但它们都基于同一个假设:你能区分「你的代码」和「攻击者的代码」。AI打破了这个假设,因为它不运行代码,它运行的是文本。
四、AI安全进入新阶段:从「胡说八道」到「系统入侵」
过去我们谈论AI安全,说的都是「大模型会输出错误信息」「AI会生成钓鱼邮件」「AI会编造虚假新闻」。这些问题的本质是内容风险:AI说的话不可信,AI生成的东西有误导性。
但「文档蠕虫」标志着AI安全进入了全新的维度:AI本身成为了攻击载体和传播介质。AI不再只是被利用的工具,它变成了攻击链中的一环。
这不是孤例。Anthropic的研究团队在同期发表论文,系统论述了MCP(Model Context Protocol)与Agent插件生态面临的安全威胁:攻击者可以发布恶意的MCP Server或Agent Skill,在用户授权安装的那一刻获取等同于用户身份的权限。更关键的是,这些恶意扩展的权限范围往往模糊不清,用户在「安装一个Copilot Skill」的时候,可能并不知道自己在授权一个能读写所有文件的程序。
📌 同类攻击手法一览(2026年已观测到)
文档蠕虫(M365 Copilot):白底白字指令 + 上下文坍塌 + 自动自复制
ASCII走私:不可见Unicode编码敏感数据,绕过DLP检测
Mermaid投毒:图表文件伪装UI元素,承载恶意payload
参数注入:URL q参数携带提示注入,窃取MFA验证码
Skill文件投毒:Copilot Cowork通过恶意Skill窃取文件
五、企业现在应该做什么
我不打算列一个「加强安全意识培训」「不要打开可疑文档」的清单——那是对20年前的威胁说的。今天的威胁已经进化到攻击者不需要你「打开」任何东西。
以下四项,是真正能落地的优先级动作:
① 给AI助手上「数据围栏」,而不是给用户上「行为禁令」
对Copilot的数据源做白名单,精确到文件夹级别,限定哪些数据可以被AI助手读取。把「默认全开、按需关闭」改成「默认关闭、按需申请」。同时,关闭跨库自动检索这类高危默认行为——Work IQ模式让Copilot能自动拉取其他文件夹的文档,这个功能在攻击场景下等于一条零摩擦的感染通道。
💡 你不需要阻止AI读文件,你需要阻止AI在没被明确邀请的时候,主动去翻别人的文件柜。
② 给AI生成的内容装「安检门」
任何AI生成的文档在被分享或进入下一轮Copilot会话之前,都应该经过一次「再进入」检测——检测文档中是否存在异常编码、不可见字符、异常格式指令。这个环节加在文档生成和文档分发之间,阻断污染文档的回流路径。
③ 重构Agent权限模型:从「继承用户身份」到「独立最小授权」
当前AI Agent的工作逻辑默认继承调用者的完整身份权限。这是「混淆代理」问题的根源。正确的做法是为AI操作建立独立的权限沙箱:AI能读取哪些文件、调用哪些工具、对外发送哪些内容,全部需要独立授权。敏感操作强制人工审批,而不是「你问Copilot一个问题,它就自动替你把事办了」。
④ 把提示注入纳入红队常态化科目
提示注入(Prompt Injection)已经不再是一个学术研究方向,它是一个真实的生产环境威胁。要求你的安全红队将提示注入纳入定期测试范围,模拟攻击者通过文档、邮件、URL等路径向AI系统注入指令,测试检测和阻断能力。
💡 2026年的安全团队,如果还没有把「AI系统被如何利用」纳入威胁模型,就像2010年的安全团队还不知道移动设备会带来新的攻击面一样。
六、一句话总结:上下文窗口里,没有朋友和敌人之分
M365 Copilot「文档蠕虫」最深刻的意义,不是它攻破了哪家企业、窃取了哪些数据,而是它揭示了一个底层的设计缺陷:LLM的上下文窗口是一个没有免疫系统的器官——所有内容等权进入,没有区分,没有检疫,没有隔离。
这不是微软一家的问题。所有把大模型能力集成到企业协作平台的厂商,都面临同样的架构困境。AI运行时防护(AI Runtime Security / LLM Firewall)作为一个独立安全品类崛起,只是时间问题。
但在那之前,每一家部署了AI助手的企业,都已经在用真实业务数据为这个新威胁「压力测试」了。
区别只在于,你知道不知道。
感谢阅读!对您有帮助的话,点亮👍🏻❤️,关注公众号,转发给需要的朋友~ 原创转载请联系授权。
夜雨聆风