简介:AI 编程代理通过读取项目指令文件来理解任务,而攻击者可以在下载目录、临时目录或第三方仓库中植入恶意指令文件,劫持代理执行危险命令。本文系统定义“指令文件投毒”攻击,拆解“投放—加载—诱导—执行”四阶段攻击链,给出目录隔离、文件管控、权限最小化、审计检测四层防护配置及每层已知绕过,并附中招后的处置步骤,帮助开发者把编程代理当作高权限执行者来安全管理。
AI 编程代理指令文件投毒,是指攻击者通过向代理会读取的工作目录投放包含恶意指令的文本文件,使代理在启动或运行阶段将这些指令误认为是项目规范,进而执行安装恶意依赖、读取敏感文件、发起网络请求、外传数据等操作的一种攻击方式。
这类指令文件通常以 Markdown 文本形式存在,常见命名为 AGENTS.md,部分工具也有自己的专属文件名。它的本来用途是告诉编程代理“这个项目如何构建、如何测试、有哪些代码规范和注意事项”,相当于代理的“上岗手册”。问题在于:代理无法从文本本身判断指令来自可信的项目维护者,还是来自某个被静默下载到目录里的恶意文件。只要代理“照着做了”,攻击就完成了第一步。
指令文件投毒不是传统意义上的漏洞利用,而是利用了 AI 编程代理的设计行为。代理为了完成真实编码任务,必须能够读取文件、执行 shell 命令、修改代码、安装依赖,这些能力本身就是高权限的。如果攻击者能向代理输入恶意指令,就相当于把一个拥有高权限的工具变成了自己的执行器。
它的危险性体现在几个方面:
AGENTS.md 这类说明文件的改动。已出现的真实案例中,攻击者把恶意指令文件投放到用户下载目录,用户在该目录启动编程代理后,代理按指令安装了一个恶意依赖包,最终导致代码被污染、凭据被读取。这说明攻击并不需要复杂漏洞,只需要一个“代理恰好在该目录启动”的机会。
一次完整的投毒攻击,需要四个要素协同:
一个被代理信任的工作目录
代理通常会把当前目录或项目根目录作为扫描起点,递归读取其中的指令文件。下载目录、临时目录、首页目录都是高风险位置。
一份可被加载的指令文件
文件可以是 AGENTS.md,也可以是其他类似命名的项目说明文件。文件内容不需要代码,只要是一段自然语言指令即可。
一个具备工具执行能力的代理
代理能调用 shell、读写文件、安装依赖、发起网络请求。没有执行能力,指令文件只是一堆文本。
一条可被诱导的决策链路
代理需要把指令文件中的内容纳入自己的任务规划。攻击者利用的是“指令文件是可信项目规范”这一默认信任关系。
指令文件投毒的攻击链可以拆成四个阶段:
攻击者先把恶意指令文件放到目标机器上。常见方式包括:
这一阶段不需要入侵操作系统,只需要诱导用户产生一次下载或解压行为。
用户在包含恶意文件的目录中启动编程代理。代理启动后,会扫描当前目录和上级目录,寻找并读取指令文件。如果用户习惯在下载目录里整理文件、在临时目录中运行命令、或在家目录直接启动代理,就很容易触发加载。
恶意指令文件会伪装成正常的项目说明或环境准备指引,例如:
由于指令来自“项目文件”,代理通常会优先服从。更隐蔽的变体是:指令文件要求代理修改模型 API 的接入地址或代理配置,使流量经过攻击者控制的服务器。攻击者服务器可以冒充模型返回结果,直接下发工具调用,从而绕过用户对自然语言指令的警惕。
代理执行恶意指令,可能产生以下后果:
.env、云密钥、SSH 私钥等敏感文件。这是最典型的场景。浏览器默认把下载文件保存到下载目录,用户有时会让代理“帮忙整理一下下载文件”。此时,目录里一旦有恶意指令文件,代理就会自动加载并执行。
从外部获取项目代码后,如果用户没有审查 AGENTS.md 就启动代理继续开发,恶意指令可能成为代理的“第一任务”。攻击者可以把指令文件伪装成构建说明,诱导代理安装恶意依赖或执行外部脚本。
团队共享目录、服务器工作目录、持续集成环境中如果存在不可信指令文件,代理一旦启动就会被影响。CI 环境通常有更多云平台凭据,暴露风险更高。
用户把代理写进自动化脚本,定时执行任务。由于没有人工确认环节,恶意指令可以被静默执行,而且日志很容易被其他大量输出淹没。
提示注入是指攻击者在用户输入、网页内容或文档中植入恶意提示,试图改变模型本身的指令。指令文件投毒更侧重于利用本地指令文件的长效性、高优先级和执行权限。提示注入可能是临时的、单次的,而指令文件投毒会持续影响代理每次在目录中的启动行为。
供应链投毒通常指攻击者感染依赖包、库或构建工具,从而影响下游使用者。指令文件投毒则是一种针对 AI 编程代理的引导式攻击。攻击者不一定要篡改代码包,只需要让代理相信文本指令即可。如果恶意指令文件最终被提交到公共仓库,它也可以成为供应链投毒的一种形式。
没有一种配置能完全免疫投毒,但纵深防御可以显著降低风险。下面四层防护层层递进。
配置要点:
已知绕过:
配置要点:
.md 文件或说明文件。已知绕过:
配置要点:
~/.ssh、.env、云密钥目录等敏感路径。已知绕过:
配置要点:
已知绕过:
如果怀疑代理已经执行了恶意指令,建议按以下顺序处理:
立即隔离
断开网络,停止代理进程,暂停容器或挂起虚拟机,避免恶意指令继续执行。
保留现场
复制当前目录的指令文件、代理会话日志、shell 历史记录和临时目录内容,作为后续分析依据。
轮换凭据
检查环境变量、.env、SSH 私钥、云平台密钥、OAuth 令牌可能被读取的路径,立即轮换相关凭据。
检查持久化
查看定时任务、启动项、hook 脚本、依赖锁文件是否被修改。攻击者可能植入后门以便下次启动时再次控制代理。
清理恶意文件
删除下载目录或项目目录中的恶意指令文件,从版本控制系统恢复被篡改的文件,清理恶意依赖包。
溯源复盘
确认恶意文件是通过浏览器下载、压缩包解压、仓库克隆还是其他方式进入的,然后针对入口补充防护策略。
AI 编程代理指令文件投毒,是 AI 编程工具信任模型下的系统性风险,而不是单一漏洞。它利用了代理“必须读取项目指令、必须执行命令”的设计特性,攻击者只需要一份纯文本文件,就能把高权限代理变成自己的执行工具。
有效的防护思路,是把编程代理当作一个高权限执行者来管理:限制它的工作目录,管控它读取的指令文件来源,缩小它可执行命令的权限边界,并对它每一次操作保留审计记录。在此基础上,再配合人工审查、异常告警和应急响应流程,才能在不牺牲效率的前提下,把指令文件投毒的风险降到可控范围。