一份伪装成工程笔记的文件

10 月 27 日,安全公司 Forever Security 披露了一起已经发生在真实客户机器上的攻击。攻击者把一个名为 AGENTS.md 的文件放进了用户的取目录,伪装成工程笔记。用户在那个目录里启动编码智能体时,智能体把这份文件当成了项目的可信指令。

后面的链条一路顺了下去:智能体按文件里的要求改写了自己的配置文件,接着尝试安装一个恶意的 NPM 包,并伺机取走登录令牌与凭据。Forever Security 在客户机器上发现了这次攻击,并阻断了后续动作,其中就包括那次安装尝试。

研究方给出的复现数据是:同一条攻击链在 OpenAI Codex 上成功率超过九成,在 Anthropic Claude Code 上大约五成。成功率会随安装路径等因素浮动。更值得留意的是他们对自己客户群的观察——约半数客户会在取目录里运行编码智能体,四分之一的智能体会话会打开真实浏览器。这两个比例合起来,意味着这类攻击的适用面已经铺好了。

不用漏洞,也不用钓鱼邮件网页静默投放恶意 AGENTS.md 被放进取目录,伪装成工程笔记启动智能体用户在该目录里打开编码智能体当成项目指令智能体把这份文件读成可信上下文改写自身配置按文件里的要求改掉自己的配置装包并取令牌尝试安装恶意依赖,伺机取走登录凭据来源:Forever Security 10 月 27 日披露,Aviatrix 与 QPulse 分别整理杀伤链与风险等级
图|攻击者把伪装成工程笔记的 AGENTS.md 放进取目录,编码智能体启动时将其作为项目指令读取,随后改写自身配置并尝试安装恶意依赖。

没有补丁,因为它在按设计工作

这起事件最别扭的地方在于:它没有对应的软件缺陷。智能体读取所在目录里的指令文件,本来就是它被设计成要做的事。厂商也没有东西可修——Aviatrix 的威胁研究直接写明,出现这种行为的智能体是在按设计运行,因此不会有补丁。

根子在于安全模型的假设换了人。为保护人类用户设计的那套假设里,目录里的东西是用户自己放的,人能分辨哪份文件可信,执行前会看一眼再确认。这三句话全建立在「有个会判断的人在场」之上。智能体接手之后,目录内容自动进入上下文,指令与数据之间的界线被抹平,照做反而成了正确行为。

这也是为什么这类攻击被归到间接提示注入,却比传统的提示注入更难处理:注入的载体不是一段用户粘贴的文本,而是一个本来就该被读取的文件。它站在信任链的内侧。

不是缺陷,是设计安全模型原本假设目录里的内容是用户放的人能分辨哪份文件可信执行前会看一眼再确认这套假设建立在人的判断上智能体接手后目录内容自动进入上下文指令与数据的界线被抹平照做就是按设计工作没有可修的软件缺陷研究方实测:同一链条在 Codex 上复现超过九成,在 Claude Code 上约五成成功率随安装路径等因素浮动;约半数客户在取目录里跑编码智能体,四分之一会话会打开真实浏览器
图|为保护人类用户设计的安全模型,假设人能分辨文件可信度;智能体接手后这层判断消失,照做反而是按设计工作,因此没有补丁。

同一周,另外两处也在响

把时间线拉到同一周,会看到另外两处披露。一处是 OpenHands Software Agent SDK:1.52.0 之前的版本里,Docker 与 Apptainer 的工作区启动器把沙箱服务绑在了全部网卡上,而会话密钥列表默认为空,等于默认免认证——能连到该端口的人可以以 root 身份在沙箱里执行命令、读取挂载的工作区、从机密存储里取出明文。CVSS 3.1 得分 9.8。

另一处在工具协议层:Google 的 MCP Toolbox for Databases 在 1.2.0 至 1.4.0 版本之间,云存储数据源存在路径遍历叠加缺失授权的问题,未认证的远程攻击者可以用构造过的工具调用参数,把主机文件复制到外部存储桶,或者覆盖本地文件。CVSS 4.0 得分 9.3。同一批公告里还有 Cloud Run MCP 的存储桶抢占问题,得分 7.7。

三件事分属不同层,但讲的都是同一句话:智能体的薄弱点正在从模型本身下沉到它跑在什么上面、读到什么、被谁配的。而就在同一周,凭证层拿到了一笔 4000 万美元的 B 轮融资,主张只给访问、不给钥匙。

同一周,另外两处也在响执行沙箱OpenHands SDK 1.52.0 之前沙箱服务绑全部网卡密钥列表为空即免认证工具协议层MCP Toolbox 1.2.0 至 1.4.0路径遍历叠加缺失授权可把主机文件搬去外部桶凭证层被定价同周 Infisical 4000 万 B 轮主张只给访问不给钥匙客户名单已含多家车企三处都不是模型问题:一个是默认配置,一个是老题型,一个是资本在下注接下来值得盯的三件事一、指令文件是否会加上来源校验与签名,而不只是靠目录位置判断可信二、沙箱与工具服务器的「默认安全」会不会成为采购硬性条款三、凭证层独立成赛道,还是被身份与访问管理吸收进去攻防细节与研究方原始数据仍在披露中,本文只采信已公开部分
图|同一周还有沙箱默认免认证、MCP 工具箱路径遍历两处披露,以及凭证层的一笔融资;三处合起来指向信任边界的整体下沉。

三盆冷水

其一是研究方的公开材料仍然有限。目前能看到的只有企业的风险通告和媒体的整理版本,具体样本量、客户行业分布、以及那次 NPM 包安装的完整时间线都没有公开。覆盖面有多大,暂时无法判断。

其二是「约半数客户在取目录里跑智能体」这个数字,来自一家安全公司自己的客户群。这类客户通常本身安全投入就偏高,能不能推广到一般开发者群体,是个问号。

其三是防御建议目前还停留在操作层面:别在取目录里跑编码智能体、检查项目里有没有不是自己创建的文件、保持审批与沙箱开启、怀疑失守就轮换全部凭据。这些建议都有效,但都是让人去记、去查,缺少一层能自动生效的机制。

三个观察哨

一是指令文件的来源校验。既然靠目录位置判断可信度已经不成立,接下来看有没有厂商给 AGENTS.md 这类文件加上签名或来源标记,而不是继续靠「它在项目根目录下」默认放行。

二是默认安全会不会变成采购条款。沙箱绑全部网卡、密钥列表为空即免认证,这类默认配置在过去只是文档里的一行提醒;如果采购方开始把它写进硬性要求,厂商的默认值才会真的变。

三是凭证层的归属。它现在是独立赛道,还是会被身份与访问管理吸收进去,半年内应该能看出走向。本站会持续跟进这几条线的迭代动态。