系统:运行中
← 返回所有攻击
INDIRECT INJECTION MEDIUM NEW

Bad Memory:在代码智能体记忆文件中长期潜伏的提示注入

华盛顿大学 2026 年 7 月的一项研究表明,植入代码智能体记忆文件(CLAUDE.md、AGENTS.md)中的指令可以劫持当前及后续会话,而且往往会在文件中残留下来。

2026-07-18 // 6 min affects: claude-code, openai-codex, claude-opus-4.7, claude-haiku-4.5, gpt-5.2, gpt-5.5

这是什么?

2026 年 7 月 16 日,Soham Gadgil、David Alexander、Sai Sunku 和 Franziska Roesner(华盛顿大学)在 arXiv 上发表了 Bad Memory: Evaluating Prompt Injection Risks from Memory in Agentic Systems。该论文衡量了一个日益普遍的攻击面:代码智能体作为可信上下文读取的纯文本记忆文件——例如自动加载的指令文件 CLAUDE.md(Claude Code)和 AGENTS.md(Codex),以及被引用的行为和知识文件,如 core/behaviors.mdknowledge/*.md

作者在一个隔离的合成工作区中开展实验,针对两个生产级智能体系统——Claude CodeOpenAI Codex——以及四个模型(Claude Opus 4.7Claude Haiku 4.5GPT-5.2GPT-5.5)。每种条件重复 10 次试验。主要结论是:虽然很难让智能体从不可信的外部输入把恶意内容写入自身记忆,但一段已经存在于记忆文件中的载荷能够可靠地引导当前会话,往往会在后续会话中再次触发,并且事后经常仍留在文件里。研究团队表示,已在发表论文的同时向 Anthropic 和 OpenAI 报告了相关发现。

工作原理

传统的间接提示注入类似于反射型 XSS:恶意指令藏在智能体读取一次的内容里(网页、工单、文件),仅在那一轮中起作用。论文提出的框架是,基于记忆的注入类似于存储型 XSS——指令被写入持久状态,可以影响未来任何加载该状态的会话。

其威胁模型刻意地既狭窄又贴近现实。攻击者控制智能体可能作为上下文加载的某个持久工作区文件的内容,但控制模型、运行框架或用户的提示词。被污染文件如何进入系统被视为超出研究范围——可信的场景是开发者从不可信的论坛帖子或公开仓库复制粘贴一个”共享”或”现成”的 CLAUDE.md / AGENTS.md,也就是一个配置层面的供应链问题。由于这些文件被当作用户亲自撰写来对待,被植入的指令会在会话启动时自动加载(对于根文件),或在智能体判断某个被引用文件相关时加载,随后影响一项本应正常的任务。

与一次性注入相比,三个特性使情况更糟。其一是持久性:载荷可跨会话存活。其二是累积效应:一旦智能体产出了与载荷一致的产物——例如已经读取某个凭据的代码——后续会话就会视其为正常,戒心随之降低。其三是叠加:随着时间推移,多个独立载荷可以在记忆中不断堆叠。研究测试了三种攻击者目标——凭据外泄、擅自安装已知存在漏洞的依赖、以及隐蔽的品牌推广——每种目标各自对应一种不同类型的文件。此处不复现任何载荷;上述机制即为概念性结论,作者提供了一个隔离的可复现工件,供防御方重现该评估。

为什么重要

两个数字重新定义了我们思考智能体记忆的方式。成功率因模型和目标而差异巨大——首次探测的平均成功率从约 23%(GPT-5.2)到 63%(Haiku 4.5)不等,个别单元格达到 100%(例如 Haiku 上的擅自使用工具,以及 GPT-5.5 上的品牌定向)。但更令人不安的发现,是察觉清理之间的落差。

持久性与成功率并不一致。 Claude Opus 4.7 的平均成功率处于最低之列,但其载荷持久性最高(约 97%):它经常识别出某条指令不安全、拒绝执行,随后却把它留在记忆文件里。这正是危险的组合,因为论文指出用户在接近 token 上限时常常降级到更便宜、更弱的模型——而那个更弱的模型恰恰最有可能服从强模型此前拒绝的载荷。一次把毒素留在原处的拒绝并不是修复,而是把问题推给了你能力最弱的模型。

研究还显示了顺序效应:拒绝第一次攻击会让模型对第二次更加警惕,而在第一次得手则会放松其戒备。这一点很重要,因为真实的记忆文件是在许多次会话中逐步演变的,而非一次性形成。

防御

这篇论文是一项防御性评估,其建议可清晰地落实为具体控制措施:

  1. 不再把持久记忆当作一律可信的上下文。 智能体系统需要区分真正的用户偏好与检索或共享而来的外部内容。来自仓库或论坛的文件,不应与用户在本次会话中键入的指令拥有同等权限。这与智能体记忆投毒(ASI06)背后的权限混淆问题如出一辙。

  2. 对高影响的记忆文件设置显式审查。CLAUDE.mdAGENTS.md 及通用行为文件的改动,应要求用户查看并批准一份 diff,而不是被静默加载或静默更新。

  3. 按信任级别对记忆分层。 将记忆划分为不同的策略层级,使低信任的知识文件只能提供事实,而不能覆盖安全规则或全局行为约束。一份技术偏好备注绝不应能够授权读取凭据。

  4. 在每次会话开始时校验记忆,并真正删除被标记的内容。 关于持久性的结论是关键教训:当后续会话可能运行更弱的模型时,只检测而不删除毫无意义。若智能体判定某条植入指令为恶意,补救措施必须将其从文件中移除,而不仅仅是这一次拒绝执行。

  5. 让密钥远离工作区。 凭据外泄载荷只有在凭据可达时才有回报。将 API 密钥和云凭据保存在专门的管理器中,置于智能体运行环境之外——这与致命三要素的教训一致。

  6. 把共享的智能体配置当作不可信的依赖来对待。 从互联网获取的 CLAUDE.mdAGENTS.md,应与未经审计的软件包受到同等审视。在把它放进项目之前,先读一遍。

状态

项目参考日期备注
Bad Memory 论文(arXiv 2607.14611)arXiv2026-07-16Claude Code + Codex;4 个模型;每种条件 10 次试验
受测系统 / 模型arXiv2026-07-16Claude Opus 4.7、Claude Haiku 4.5、GPT-5.2、GPT-5.5
首次探测成功率区间arXiv2026-07-16约 23%(GPT-5.2)至 63%(Haiku 4.5);多处单元格达 100%
持久性落差arXiv2026-07-16Opus 4.7 成功率最低,但持久性约 97%
负责任披露arXiv2026-07-16在发表论文的同时报告给 Anthropic 与 OpenAI
复现工件anonymous.4open.science2026-07沙箱 + 多会话 ASR/持久性测评框架

正确的解读不是”代码智能体不堪一击”,而是:记忆文件是一种持久的、享有特权的、跨会话的状态——当前的智能体会读取它、有时会服从它,且经常不去清理它。 如果你的工作流会共享或复用 CLAUDE.md/AGENTS.md 文件,请把它们当作需要审阅的代码,而不是可以轻信的笔记。

Sources