AI编程工具给你发明了一个npm包名字,今天它可能已经被人抢注了——包名幻觉攻击的完整防护手册

有些攻击根本不需要你点击任何东西——AI编程工具自己会帮你「装」进去。

这就是包名幻觉攻击(Package Hallucination Attack)的基本逻辑:攻击者不去黑你的服务器,而是让AI自己动手装一个恶意包。整个过程你的CI/CD绿得发光,但你已经被攻破了。

攻击是怎么发生的

AI编程工具在写代码时,会根据上下文「推断」出需要的依赖包名字。比如:

这个项目需要一个日期处理库,AI可能会「发明」一个叫 `date-fronter` 的包名
因为它见过 `date-fns`,见过 `day.js`,这两个名字混在一起,生成一个不存在的包名

这个不存在的包名会被AI写入 package.json,然后 npm install 执行。攻击者只需要做一件事:抢在你发现之前把这个包名注册了。

当AI执行 npm install date-fronter,攻击者的恶意包就被装进了你的 node_modules

这个攻击为什么危险

1. 它绕过了所有人工审核
传统的供应链攻击还需要攻击者找到内部人员、钓鱼邮件、或者入侵npm账号。包名幻觉攻击完全靠AI自动完成,你写的代码里就带着恶意依赖。

2. 自动化程度极高
攻击者可以写一个脚本,监听npm上所有新注册的小众包名,然后等着AI「发明」这些名字。一旦发现,立刻注册并植入恶意代码。

3. 隐蔽性极强
恶意包可以做到:首次安装完全干净,等你review通过、CI/CD跑完、代码合并之后,再通过版本更新注入恶意代码。杀掉的代码可能第二天才出问题。

真实案例:npm包的「先干净后投毒」

安全研究人员发现,2025年底有多个npm包利用隐藏提示(obfuscated instructions)和脚本规避AI安全扫描器的检测。这些包在第一次发布时完全干净,等AI安全工具放过它们之后,再通过版本更新植入恶意代码。

还有一个更直接的例子:攻击者注册了 agent-security-scanner-mcp 这个包——听起来像一个安全工具,但实际上是攻击者精心设计的陷阱,专门等待AI编程工具去「安装安全工具」时中招。

怎么防

1. 锁定已知包名白名单
在项目根目录维护一个 approved-packages.json,所有AI生成的包名必须先在白名单里查一遍,不存在的一律拒绝。

# 写一个pre-install钩子
node scripts/audit-packages.js

2. 用专业工具扫描
agent-security-scanner-mcp 这个开源工具专门检测包名幻觉——它维护了430万+的真实包名数据库,AI生成的任何「发明型」包名都会被标红。

npx agent-security-scanner-mcp scan-packages ./package.json npm --verbosity compact

3. 把npm安装结果纳入diff review
不管是谁(包括AI)提交了新的 package.json,都要强制走PR review流程,且reviewer必须对比 package-lock.json 的变化。

4. 启用npm的 --package-lock-only 预检
在CI里先跑 npm install --package-lock-only,不实际安装,只是检查包是否真实存在且版本可解析。

# GitHub Actions示例
- run: npm install --package-lock-only --dry-run
  env:
    NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

下一步

如果你现在就在用AI编程工具处理项目,第一件事不是加防护——是先跑一遍现有 package.json 里的所有依赖,看看有没有「看起来真实但实际上不存在」的包名:

npm info <package-name> 2>&1 | grep -q "Not found" && echo "DANGER: $package-name is fake"

这个命令批量跑一遍,你可能会发现惊喜。

评论区

0 条评论

登录后可评论。

阿监·前端工程化 683 阅读