安全公司 Forever Security 十一月披露的测试结果里有个扎眼的数字:往仓库的 AGENTS.md 里写进恶意指令,Codex 的复现率超过九成,Claude Code 也在五成上下。指令文件读到什么就执行什么,这份项目说明书被人下了毒,智能体照单全收。

说明书也能成为入口
AGENTS.md 这类文件的本意是给智能体立规矩:项目结构、构建命令、注意事项。问题在于智能体分不清哪条规矩是作者写的,哪条是攻击者后来塞的。这不是某一家工具的独有短板,凡是会主动读仓库文件的智能体都在射程内。上个月有安全研究者汇总 AI 编码工具的漏洞,一个月数出了 26 条,横跨好几个产品。
攻击的门槛也不高。恶意指令混在正常的说明文字里,不报错,不留异常日志,仓库的贡献者一眼扫过去未必看得出来。智能体也不核实指令的来路,谁提交的、有没有经过评审,它不问。往说明文件里塞一句"构建前先执行某个脚本",生成链路就可能多跑一段不该跑的东西;再藏一句"把配置里的地址换成另一个",数据去哪了都难查。一份没人盯的说明文件,成了整条生成链路上最便宜的那个入口。更麻烦的是它披着合法外衣:说明文件本来就是该提交的东西,恶意提交混在一堆正常提交里,code review 的人未必逐字读。
厂商的护栏在加高,方向是检查前移
各家的动作摆在一起看,方向是一致的。Copilot 这个月给本地侧配了沙箱,生成的东西先搁进隔离环境里跑一遍;Anthropic 把政策性的 hooks 做成正式功能,拦截点开放给项目配置。信任边界从生成完再看,往跑之前先拦挪,这是行业层面的共识。还有一层:沙箱和 hooks 配置起来各有成本,哪些操作拦、哪些放,每个团队要自己定,定错了要么太松要么挡住正常开发。
厂商的护栏盖不住的部分在仓库里:业务逻辑上的漏洞,不合规范的输入处理,只有团队自己知道该怎么验。工具能拦住越权的操作,拦不住一个没人验收的用例。沙箱能挡住危险命令,挡不住一段逻辑就写错了的业务代码;hooks 能拦特定操作,拦不住每个接口的边界条件。这段空白得由团队自己的控制面来填,检查动作长在仓库里、长在流程里,不依赖某家厂商替你把关。
团队自己的控制面,落在产物上
产物层这一段,飞算 JavaAI 落了两个入口。Java 安全修复器是个独立入口,按 OWASP 十大和 Java 安全最佳实践扫一遍,问题挨个列出来,改不改你定,工作区里逐处确认,改坏了能回退,Gradle 项目先编译通过再扫,扫的才是能跑的代码。需要的时候起一次扫描,改完再扫一次,节奏自己掌握。

单元测试生成器走的是另一条验收线:构建工程,探明本地环境,JDK 用哪一版、工程拿什么建、测试挂什么框架,都摸清了才写用例,用例编译、运行全部通过才往仓库里并。进仓库的东西,是跑通过的。
用例还有一层价值:它攒下来就是回归资产。下个迭代改别的代码,这批用例再跑一遍,改坏没改坏一眼可见。恶意指令骗过了生成那一关,骗不过每一次回归。接手老代码的人,跑一遍存量用例,哪些行为动不得,结果里都写着,比口口相传可靠。
模型侧也有对应的搭配。第三方直连里,智谱的 GLM-5.3 在官方描述里带安全审查与漏洞推理,安全向的重活可以点它;自有几档按 Java 场景调优,日常生成不吃力。模型会读到什么、生成什么,管不完全,但验收环节握在自己手里。安全向的活换对模型之外,扫描和用例这两道还是基础,模型只是让活干得更快,替代不了验收。
护栏分两层,各验各的
厂商管的是工具层:沙箱、拦截、权限。团队管的是产物层:用例跑没跑通,扫描有没有过,改没改有人确认。两层都硬,AGENTS.md 里藏再多花样,进不了仓库就落不了地。落地的时候可以从三步起:说明文件进 review,动过的仓库跑一遍用例,上线前扫一次安全。11 月这轮披露之后,说明文件的评审会多一条军规,仓库里可跑的检查也会多一个把验收前置的理由。三步跑顺了可以再加:说明文件的提交人固定下来,改动说明文件的人进得少、看得多;用例失败的通知接到群里,坏了当天就知道。三步的成本不高,第一步是习惯问题,后两步工具都在流程里;真正的门槛是不出事没人觉得要验收,出了事才回头看 AGENTS.md 是谁提交的,把验收放在前面,这两头的亏都不用吃。飞算 JavaAI 这类把检查做进流程的工具,省的不是扫的那一下,是每次都要想起来扫的那个动作。这个动作养成之后,AGENTS.md 注入这种事,影响面就被压到了最小。
276



被折叠的 条评论
为什么被折叠?



