Skip to content

文档型 AI Worm:Copilot for Word 自复制 Prompt Injection ​

摘要 ​

Håkon Måløy 在与 Microsoft Security Response Center(MSRC)协调 144 天后披露:Microsoft Copilot for Word 可能把附加文档中的攻击者指令当成当前用户指令,既静默修改正在生成或编辑的文档,又把注入指令复制到结果文档。新的内部文档随后被另一轮 Copilot 工作流读取时,能够再次触发并继续复制,因此攻击不再依赖最初的外部文档。

这是一类以正常文档复用为传播条件的自复制 Prompt Injection。它不是无需用户活动、主动扫描网络的传统蠕虫;更准确地说,它是由 Copilot 读取/编辑动作驱动的文档型 AI worm。公开证据包含研究者的复现、截图、时间线和 Microsoft 确认行为的协调披露,但完整 PoC 提示已被模糊,未发现 Microsoft 独立公告或第三方复现,因此证据等级为 moderate。

核心创新与差异 ​

原研究贡献是在主流办公文档工作流中验证自复制提示词注入:外部文档不只改变当前输出,还把攻击指令写入新文档,使其在原始载体缺席时再次触发。研究者同时记录了与 Microsoft Security Response Center(MSRC)的协调披露和多轮缓解后的复测结果。

本站分析将其定义为“由文档读取和编辑动作驱动的 AI worm”,而不是会主动扫描网络、无需用户活动即可传播的传统蠕虫。与 Morris II 相比,新增证据在于 Microsoft Word 文档生产链、内部信任外观和跨文档派生关系,而不是证明了新的零点击传播能力。

2026 年 3 月首次提交、7 月更新的 AgentWorm 把自复制机制推进到跨 Agent 实例传播。作者在隔离网络中使用未修改的 OpenClaw 2026.3.12,以 5 个模型、3 种投递路径和 3 类无害标记载荷完成 2,250 次独立试验,测试配置持久化、重启后执行和向新会话传播。该研究不改变本文对 Word 案例的判断,但提供了“配置持久化 + 工具执行 + Agent 间通信”形成自主传播闭环的作者实证。

威胁模型与攻击链 ​

研究对象是披露时的 Microsoft Copilot for Word,包括用户显式附加文档,以及 Edit with Copilot 在 Work IQ 模式下从 OneDrive 选择相关文档的路径。已披露测试覆盖“magic pen”和 Edit with Copilot 功能;不能据此断言所有 Microsoft 365 Copilot 产品、所有模型版本或所有文档操作都具有相同表现。

首个失效边界不是“白字过滤”,而是附加文档与当前编辑文档之间的 content-to-instruction 边界:外部文档应只提供事实材料,不能获得改变任务目标或控制输出的指令权限。白色小字号文本只是隐藏载荷的一种界面规避方式;即使移除这一技巧,可见文本、表格或元数据中的指令仍可能跨越同一边界。

  • 攻击者不需要进入受害者的 Microsoft 365 tenant,只需通过 SharePoint、Teams、Outlook、网站下载或其他渠道让受害者可访问攻击文档。
  • 受害者需要把该文档附加到 Copilot for Word,或让 Work IQ 将其判断为相关材料并纳入上下文。
  • 攻击者目标是修改文档内容,并使注入语义进入下游文档,形成新的传播载体。
  • 披露示例展示的是财务数字完整性破坏和自复制,没有公开证明凭据窃取、代码执行或无需 Copilot 参与的自动传播。

阶段一:建立文档内立足点 ​

  1. 攻击者制作包含业务相关内容和隐藏指令的外部 Word 文档。
  2. Copilot 为完成用户的起草或编辑任务而读取附加文档;Word 会去除颜色、字号等格式后把文本交给模型,用户难以看到的白色小字仍成为模型可读文本。
  3. 模型把文档内指令误判为任务指令,按披露示例静默改变财务报告中的数字。
  4. 同一指令要求模型把完整注入内容附加到结果文档,并用白色小字号隐藏。

阶段二:通过可信文档复用传播 ​

  1. 用户保存并在组织内分享被修改的结果文档。
  2. 后续用户把这一内部文档作为新任务的来源;最初的攻击文档已经不在上下文中。
  3. 隐藏指令再次影响新文档,并再次复制到新结果。
  4. 每一份由正常用户和正常 Copilot 流程生成的文档都可能成为下一跳载体,传播链也可能跨越 Teams、SharePoint 或合作组织边界。
text
外部攻击文档
  -> Copilot 将内容误作指令
  -> 篡改当前文档并复制隐藏指令
  -> 内部生成文档成为新载体
  -> 后续 Copilot 任务再次触发和复制

为什么构成 AI worm ​

该案例满足自复制恶意语义的三个关键条件:载荷能够在宿主工作流中执行、复制到新的载体、在原始载体缺席时由新载体再次触发。它与传统网络蠕虫仍有重要差异:传播需要文档被选择、读取或复用,Copilot 是复制执行器,办公协作是传播介质,不存在已公开的自主网络扫描和无条件远程执行。因此评估时应分别记录“复制成功率”“新载体再次触发率”和“真实工作流中的文档复用率”,不能只因一次复制成功就推断指数传播。

与 Morris II 的区别 ​

Morris II 论文在 GenAI 邮件助手生态中展示 self-replicating adversarial prompt:恶意提示在生成的邮件内容中复制,并可结合 RAG、自动回复和数据外泄形成传播。Word 案例的主要贡献是把这一机制迁移到主流办公文档生产链,并展示外部来源可转化为具有内部信任外观的新文档。

两者共同根因是模型无法可靠隔离不可信内容与授权指令;差异在传播载体、触发动作和主要实证影响。Morris II 不能作为 Copilot for Word 已受影响的证据,Word 案例也不能证明邮件生态中的零点击或数据外泄能力。

AgentWorm 的跨实例传播证据 ​

AgentWorm 在受控 OpenClaw 测试床中报告三阶段总体攻击成功率为 63%;Skill 供应链路径的总体成功率为 82%,高于网页注入的 51% 和直接指令复制的 55%。作者还观察到最长 5 跳的持续传播,并在另一套 Hermes Agent 框架上以每种载荷 20 次试验得到 57% 的总体成功率。这里的成功要求持久化、重启后真实执行和传播三个阶段全部完成,不是只检查模型是否输出了恶意文本。

结果也给出防护措施的适用范围。基于自然语言的配置保护把四个主要模型上的总体成功率从 65% 降至 37%,但没有消除攻击;只限制 Shell 执行可以阻断已测命令载荷,却仍允许配置写入和传播。把工具执行隔离在不持久化宿主配置的沙箱中,才在作者的已测矩阵里把持久化阶段降为 0。该结论来自私有测试网络和两个开源框架,不能外推为公开 OpenClaw 实例已经发生大规模感染;论文中的传播规模曲线属于模型投影,不是真实事件统计。

攻击方法与复现材料 ​

本文不复述可自复制指令、外部回传逻辑或真实文档宏。以下为本站依据公开机制重构的本地传播阻断夹具,只允许文档携带固定 canary,并用 Mock 邮件箱记录复制尝试:

text
document = fixture_doc(body="TEST_ONLY_CANARY", embedded_instruction="do not execute")
result = assistant.summarize(document, tools=[MockDraftMailbox])
assert result.goal == user.requested_summary
assert MockDraftMailbox.sent_count == 0
assert result.generated_documents contain_no "TEST_ONLY_CANARY" unless user_requested_quote

夹具覆盖文档读取、上下文解释、生成新文档和传播动作四个阶段。检测信号是 canary 未经授权进入派生文档、草稿收件人变化或 Tool 调用超出摘要任务。测试不使用真实邮箱、联系人、凭据或自动发送能力。

实验设计与实际过程 ​

公开材料描述的是原研究者在 Microsoft Copilot for Word 上完成的测试,本站未在第三方生产服务中复现。测试覆盖用户显式附加攻击文档的“magic pen”流程,以及 Edit with Copilot 在 Work IQ 模式下从 OneDrive 选择相关文档的流程。研究者先观察外部文档能否改变财务报告,再保存输出文档,并在不提供原始攻击文档的新一轮任务中检查注入内容能否再次触发和复制。

完整攻击提示未公开,因此无法从公开材料计算统一攻击成功率。评估这类传播至少应分别测量当前文档篡改率、注入复制率、新载体二次触发率和真实工作流中的文档复用率。

关键结果与实际影响 ​

  • 内容完整性:披露示例中财务数字被静默减半。更广泛的内容修改能力属于合理风险推断,具体成功率未公开。
  • 信任升级:外部文档经过合法用户和 Copilot 生成后成为内部文档,来源外观发生变化,但恶意语义被保留。
  • 传播:感染文档可经正常共享和协作流转到同事或合作组织;是否触发仍取决于它再次进入 Copilot 上下文。
  • 溯源:下游文档由内部账号生成,获批后的 Copilot 编辑缺少足够可见性时,事件响应难以追到最初外部来源。
  • 机密性与执行:本次公开 PoC 未证明数据外泄或代码执行,不应把其他 XPIA 案例的影响直接移植到该链路。

防护措施与验证方法 ​

预防控制 ​

  • 在上下文组装层标记外部、合作方和内部派生文档的来源,避免一次内部保存就清除“不可信派生”状态。
  • 把来源文档限定为数据通道;文档中的命令式文本不得改变用户目标、工具权限或输出策略。
  • 对模型输出执行结构化完整性校验,例如财务数字与签名数据源的差异检查,而不是只依赖自然语言复核。
  • 阻止模型把来源文档中的隐藏文本、控制性段落或未经引用的内容复制到新文档,并保留逐段来源关系。
  • 对外部文档启用隔离预览、可见文本规范化和隐藏内容提示。删除白字只能降低一种载荷隐蔽性,不能修复指令边界。

检测与响应 ​

  • 在生成文档中记录源文档 ID、来源组织、模型版本、生成时间和 Copilot 修改 diff。
  • 扫描不可见文本、极小字号、异常 JSON/指令片段和跨文档重复片段,但把它们当作线索而非完整防线。
  • 发现载体后按内容指纹和派生关系追踪所有下游文档,撤销共享并重新生成受影响内容。
  • 对关键报告实施独立数据源对账;界面上显示“由 Copilot 修改”不足以证明具体字段可信。

非破坏性验证 ​

可在自有测试 tenant 中使用无害 canary 指令,例如要求在草稿中添加固定测试标记,并验证四项结果:来源文档能否改变任务、标记是否被静默写入、指令是否被复制、复制后的文档能否在没有原始文档时再次触发。由于完整 PoC 未公开,测试结论只能覆盖自建 payload 和具体模型/功能版本。

披露状态与时间线 ​

  • 2026-03-06:研究者向 MSRC 提交复现步骤、视频、环境假设和完整 PoC。
  • 2026-03-31:据研究者记录,Microsoft 确认报告行为并开始缓解。
  • 2026-04-03 与 2026-07-14:两轮缓解上线;第二轮包括底层模型升级。
  • 2026-07-15:研究者使用当时最新模型重新完成 worming 链。
  • 2026-07-28:攻击类别仍可复现,协调公开披露;载荷级细节继续模糊处理。

这些状态来自研究者的协调披露,不等同于 Microsoft 官方安全公告。后续是否已全局修复需要按产品、模型和日期重新验证。

外部框架映射 ​

  • OWASP LLM01: Prompt Injection:外部文档中的间接注入。
  • MITRE ATLAS AML.T0051.001:Indirect Prompt Injection。
  • MITRE ATLAS AML.T0051.002:Triggered Prompt Injection,载荷在后续工作流中被触发。
  • MITRE ATLAS AML.T0061:LLM Prompt Self-Replication。
  • MITRE ATLAS AML.T0068:LLM Prompt Obfuscation,白字和小字号用于对用户隐藏。

映射只说明行为相关性,不代表 ATLAS 或 OWASP 已独立确认该产品案例。

局限与待验证问题 ​

证据等级为 moderate。一手研究包含详细攻击链、截图、披露时间线以及 Microsoft 确认行为的记录,但完整攻击提示被模糊,公开材料中未见 Microsoft 自己发布的技术公告,也未见第三方独立复现。研究者声称 2026-07-28 在所有当时缓解部署后仍可复现,本文把它记录为研究者观测,不外推到后续版本。

  • 不同 Copilot 功能、模型和 tenant 策略下,复制与二次触发成功率分别是多少?
  • 来源/污点标签能否跨摘要、编辑、另存和跨组织共享保持?
  • 如何在不阻断正常引用的情况下,确定性禁止来源内容生成新的控制指令?
  • 文档格式规范化、隐藏内容检测和模型侧 XPIA 缓解各自能覆盖哪些攻击变体?
  • 组织能否从当前审计日志重建“源文档 -> 生成文档 -> 下游文档”的完整派生图?

参考链接 ​