从下载目录启动编程代理的隐蔽风险
文章转述一例下载目录中恶意 AGENTS.md 诱导编程代理安装可疑 npm 包的事件,并介绍研究者的复现实验。相关 CLAUDE.md 实验还涉及 API 流量重定向、OAuth 令牌暴露和代码执行,所述成功比例均来自研究测试。
AI 深度解读
一个放在 ~/Downloads 里的 AGENTS.md,就能让编程 Agent 安装恶意 npm 包。攻击者没有利用内存漏洞,而是把恶意要求写进了 Agent 会自动读取的说明文件。
原文借这起事件提出一个判断:能指挥 Agent 执行操作的文本,应当像代码一样接受审查。对日常使用 Codex、Claude Code 的程序员来说,需要重新检查的除了提示词,还有启动目录、工具权限,以及哪些文件有资格发号施令。
下载目录里的文件,怎么变成了执行指令
据原文转述,Forever Security 研究人员在客户的 ~/Downloads 中发现了恶意 AGENTS.md。有人从这个目录启动编程 Agent,Agent 读取指令文件后,按要求安装了恶意 npm 包。
研究人员随后用打开计算器的无害载荷,在 OpenAI Codex 上复现了这条路径,测试成功率为 90%。原文没有给出测试次数、具体版本和权限配置,因此这个比例只能说明其测试环境中的表现,不能直接套到所有用户身上。
另一种相关攻击利用 CLAUDE.md,把 Claude Code 的 API 流量重定向到研究人员控制的服务器。这暴露了 Agent 的 OAuth token,还让对方能够返回触发代码执行的工具调用,成功比例约为一半。
这里的两个结果要分开看:安装 npm 包来自指令文件被执行;凭证泄露和远程工具调用来自 API 流量被改道。共同入口都是 Agent 接受了不可信文本的指挥。
研究人员的遥测还显示,仅 Claude Code 就曾从用户的 Downloads 目录启动超过 1,300 次。这不等于发生了 1,300 次攻击,但说明入口并不罕见。「帮我整理下载文件夹」恰好就是用户愿意交给 Agent 的任务。
为什么 Markdown 也要按代码审查
过去,工程师会警惕邮件附件里的 .exe,也知道不该随便执行没读过的 curl | bash。Markdown 通常被当作文档,风险判断完全不同。
Agent 改变了这层关系。它读取文字,再调用 shell、包管理器或其他工具,文字便可能影响机器实际执行的操作。如果 Agent 能接触用户的 token、SSH key 和本地文件,恶意指令也可能借用这些权限。
判断一个文件是否危险,不能只看扩展名,还要看谁会读取它、读完能做什么。
作者因此把启动目录视为信任边界:从哪个目录启动,决定了哪些本地说明可能进入 Agent 的指令上下文。不过,这不代表项目根目录天然安全。仓库里未经审查的 AGENTS.md、CLAUDE.md 或 Cursor rules,同样需要警惕。
原文还转述研究人员的看法,称这里没有一个等待 OpenAI 或 Anthropic 修补的传统漏洞:浏览器保存下载文件、Agent 加载工作目录中的指令文件,分别都是正常功能,组合起来却产生了攻击路径。
这个解释能说明问题为何出现,但不能据此断言产品侧没有改进空间。原文没有展开讨论加载提示、来源识别等机制,也没有比较不同防护设计的效果。
团队和产品,都要先决定谁能下命令
作者给工程团队的建议,核心是把已有安全习惯延伸到 Agent。
启动位置应固定在项目根目录,避免主目录、Downloads 和其他混杂文件的目录。指令文件应进入仓库,通过 pull request 修改;突然出现、无人审查的规则文件,应当触发检查。
权限也要单独审视。允许 Agent 推送到 main,或者读取存放秘密信息的目录,都是需要明确承担后果的配置。审批提示和沙箱应保留,不可信内容先放进容器、临时 VM 或云沙箱中处理。
作者还用自己参与的 Calendrz 说明,开发 Agent 产品时也存在相同问题。它的 Smart Scheduler 接收邮件并安排会议,而邮件正文可能来自不可信的人。
按作者描述,邮件首先必须来自已有账户的地址。如果没有同时通过 SPF 和 DKIM 检查,Agent 会等待账户所有者点击一次性确认链接。即便通过这些步骤,Agent 也会先提出时间、征求确认,再创建日程。工具只允许查找空闲时段和预约事件,没有安装软件包这类能力。
这里有两道不同的限制:身份校验决定输入能否进入后续流程,工具权限决定 Agent 最多能做什么。作者没有声称它绝对安全,也没有提供这套流程抵御攻击的对照测试。
我的判断
我赞同把指令文件纳入代码审查。对已经使用 PR 流程的团队,这是很自然的延伸:规则文件改变 Agent 的行为,就应当有人知道改了什么、为什么改。
但「只在项目根目录启动」只能减少误触,不能代替权限控制。相比完全依赖成员记住启动位置,限制工具能力、隔离不可信输入,能进一步缩小错误执行的影响范围;审批提示则提供人工介入的机会,效果仍取决于用户是否认真阅读。
还要分清证据强弱。90% 和约一半来自研究人员的特定复现实验;团队管理建议、Calendrz 的流程设计属于作者经验。原文没有对照数据证明哪项措施最有效,也没有证明邮件通过 SPF、DKIM 后,正文就值得信任。身份验证和内容可信是两件事。