Slopsquatting 是什么怎么防:AI 编造包名的供应链投毒
Slopsquatting 利用 AI 幻觉包名:攻击者抢注后投毒,Agent 自动安装更危险。本文对比 typosquatting、攻击链与开发者六步自查清单。

slopsquatting 是什么怎么防——Slopsquatting(常译「幻觉抢注」)是攻击者预先在 npm、PyPI 等公共 registry 注册 AI 模型幻觉出来的包名,再填入恶意代码;开发者或 Agent 按 AI 建议执行 npm install / pip install 时就会拉到投毒包。它与 typosquatting 不同:不靠人类拼写错误,而靠 LLM 反复「自信推荐」并不存在的库名。2025–2026 年已有多起真实恶意包案例(如 react-codeshift 幻觉名被引用数百次),自主 Agent 自动装依赖会把窗口从「人眼扫一眼」缩到零。
Slopsquatting 攻击链怎么跑通
完整链条通常四步:
- 模型幻觉:AI 在回答「怎么迁移 React 组件」时编造
react-codeshift——把jscodeshift与react-codemod两个真包名揉在一起(USENIX Security 2025 研究称这类「conflation」约占幻觉包名 38%)。 - 抢注:攻击者监控常见幻觉模式,在 PyPI/npm 抢先注册同名空包或恶意包。Typosquatting 靠「像真包」;Slopsquatting 靠「像 AI 会说的真包」——registry 的相似名拦截往往拦不住全新字符串。
- 传播:开发者复制 AI 生成的 import / install 命令;更糟的是 Agent 在无人确认下直接跑 shell,或把幻觉包名写进
package.json、skill 文件、示例仓库,被其他 Agent 复读执行。 - 执行:恶意
postinstall、窃取环境变量、回连 C2。Cloud Security Alliance 2026 研究指出,部分幻觉投毒包累计下载量已达数万级。
Bar Lanyado(Lasso Security)曾记录模型反复建议 pip install huggingface-cli,而官方正确写法是 pip install -U "huggingface_hub[cli]"——短名是幻觉,抢注后即可钓鱼。Agent 把「听起来对」当成「registry 里一定有」。
与 Typosquatting 有何不同
| 维度 | Typosquatting | Slopsquatting |
|---|---|---|
| 错误来源 | 人类 typo(cross-evn ← cross-env) |
AI 幻觉(全新 plausible 名) |
| 与真包关系 | 编辑距离近,易做相似名检测 | 往往是新造词,相似度检测失效 |
| 攻击面 | 人手输命令 | 人手 + Agent 自动安装 |
| 可预测性 | 围绕热门包拼写变体 | 围绕模型训练语料里的「像真的」组合 |
| Registry 防御 | npm 等已有限制过近名字 | 全新名字可正常注册 |
| 典型窗口 | 月–年 | 幻觉流行后 数小时–数天 |
Typosquatting 赌你手滑;Slopsquatting 赌你(或你的 Agent)信 AI。后者在 AI 代理 GitHub 权限审计 同一安全层里属于「不受信输入 → 高权限动作」:install 命令就是输入,shell 权限就是输出渠道。
为什么 AI 会反复编造同一个假包名
幻觉不是均匀随机。研究归纳三类:
- Conflation(合并):两个真包各取一段,如
react-codeshift。 - Typo variant(变体):对真包轻微改写,约占 13%。
- 纯编造:听起来像生态惯例(
huggingface-cli、fastapi-auth-utils)。
模型在训练语料里见过大量 pip install X 句式,会补全「最像答案」的 X,而非查 registry。自主 Agent 循环里,一次幻觉写进 lock 文件或 skill markdown,就会在团队内 持久复读——CSA 2026 报告提到单个 commit 向数十个 LLM skill 文件注入同一幻觉 install 命令,237 个 GitHub 仓库随后引用。
这与 如何避免 AI Slop 式垃圾代码 同源:表面 plausible、不经核验就进仓库。Slopsquatting 把 slop 从「丑代码」升级成「毒依赖」。
防护:锁文件、源、审核与 CI
没有银弹,需要多层叠加:
1. 锁文件 + 版本 pinpackage-lock.json / pnpm-lock.yaml / poetry.lock 提交进 Git。新依赖必须 PR 评审,禁止 Agent 直接改 lock 并 merge。已有锁的 transitive 依赖也要定期 audit,但「新增包名」是第一道闸。
2. 官方源与 registry 配置.npmrc 限定官方 registry;PyPI 用 --index-url 指向可信源。私服代理(Verdaccio、Artifactory)可设 allowlist:未批准包名一律拒绝解析。
3. 人工审核 AI 建议的每一个新包
规则写进 AGENTS.md:禁止 Agent 自行 npm install 未在 lock 中的包;若 AI 给出包名,人必须:
- 在 registry 网页确认包存在、作者、首发时间、下载曲线;
- 对照官方文档的安装命令(别信模型缩写);
- 读
package.json/setup.py的 scripts 段,看有无postinstall。
4. CI 校验
npm ci/pip install -r requirements.txt失败即阻断,不用install静默拉新包。- 集成 Socket、Snyk、Aikido 等 依赖防火墙:新包、新维护者、短生命周期域名发告警。
- 自定义脚本:diff 锁文件,凡 新增包名 且 registry 创建日期晚于项目立项日期 → fail。
5. 限制 Agent 安装权限
CI 容器只读;本地开发用 separate user;Codex / Claude Code 规则里禁用 npm i 类 bash,或要求 --dry-run 先行。敏感目录排除策略见 Codex 排除敏感文件——.env 与密钥别和可执行 install 脚本同权限。
6. 威胁情报与事件响应
订阅 npm/PyPI 安全公告;发现幻觉包名在团队内 grep 一遍(package.json、Dockerfile、.cursor/skills、AGENTS.md)。若已误装,先隔离机器、轮换 CI 与云服务密钥,再对照 SBOM 回溯受影响版本——Slopsquatting 的 postinstall 往往在第一次 install 就执行完,别只删 node_modules 当作清理完毕。
开发者六步自查清单
合并成可打印清单,Code Review 或接 Agent 前过一遍:
| # | 检查项 | 通过标准 |
|---|---|---|
| 1 | 这个包名谁提出的? | 若来自 AI 输出,默认 未验证 |
| 2 | Registry 上是否存在? | 在 npmjs.com / pypi.org 手动搜索,不靠模型 |
| 3 | 首发时间是否早于你的项目? | 新注册 + 零 star 高危 |
| 4 | 维护者是否可信? | 作者历史、Org 归属、是否 typosquat 账号 |
| 5 | 安装命令是否与官方文档一致? | 逐字对照,警惕 shortened CLI 名 |
| 6 | install 脚本是否可读且无网络回连? | 打开 tarball 看 postinstall / install.py |
任一项 FAIL → 不要 install,不要 merge PR,在 issue 里标记「疑似 slopsquatting」并换官方替代方案。
Agent 接入 MCP 或 fetch 工具时,还要防 存储型幻觉传播(恶意 README 诱导装假包)——外部文本进上下文的路径与 MCP ANSI 转义注入 同类,都是「不可信输入影响 Agent 行为」。
常见问题
Slopsquatting 只影响 npm 吗?
否。PyPI、RubyGems、crates.io、Go module proxy 均可被抢注。研究还提到约 8.7% 的 Python 幻觉包名在 JavaScript 生态里恰好有同名真包——跨语言 copy-paste 会装错生态的包。
让 AI「请只推荐真实存在的包」有用吗?
不够。模型无法可靠自查 registry;prompt 约束会降低频率,不能替代 安装前 registry 查询 + CI gate。把验证放在 Agent loop 之外的确定性步骤里。
私有 monorepo 没有外部依赖,还要防吗?
要。内部 Agent 仍可能幻觉 内部包名 或误引未发布的 workspace 名;更常见是开发者把 AI 生成的 Dockerfile / CI 脚本带进 repo,脚本里含公共 registry 的假包。任何 RUN pip install / npm i 都要过同一清单。
和依赖混淆(Dependency Confusion)是一回事吗?
不是。Dependency Confusion 利用私有包名在公共源缺失时被解析到恶意公共包;Slopsquatting 利用 根本不存在的名字 被 AI 发明出来。防御有交集(lock、私服优先级),但 Slopsquatting 的触发源是 LLM 输出,需额外审 AI 建议。