想象一个场景。
你让 Cursor 帮你写一个 Django REST API。AI 秒回——代码干净、注释清晰,连 pip install 指令都贴心地列好了。你扫了一眼,看起来都对,复制粘贴,回车。一切正常。
只有一个问题。
它让你装的某个包,根本不存在。
不,不是「作者删库跑路了」那种不存在。是这个包从头到尾就没被任何人创建过。它是 AI 自己编出来的——一个听起来极其合理、但纯属幻觉的包名。
如果只是这样倒还好。代码跑不起来,报个错,你骂一句「什么破 AI」,换个别的方式搞定。
但真正的剧情是:有人抢在你前面,把这个不存在的包名注册下来了。里面塞的不是你想要的工具库,是一个后门。
你 pip install 的那一瞬间,攻击者拿到了你开发环境的完整权限。
这种事已经有名字了。它叫 Slopsquatting——「幻觉占坑」。
不是手滑,是AI在替你犯错
传统的供应链攻击,赌的是你手滑。
typosquatting 就是典型的「欺负你打错字」——把 requests 注册成 reqeusts,把 djangorestframework 注册成 django-rest-framework,等你不小心输错。
但 Slopsquatting 不一样。它不赌你手滑。它赌的是 AI 每次都会犯同一个错。
今年 5 月,一位独立研究者测试了 5 个最前沿的代码大模型——Claude Sonnet 4.6、GPT-5.4-mini、Gemini 2.5 Pro、DeepSeek V3.2、Claude Haiku 4.5——在 20 万次代码生成中检查模型是否引用了不存在的包名。
结果让人背脊发凉:五个模型共同幻觉了 127 个包名,其中 53 个至今仍可被攻击者注册。
不是某个模型有 bug。是所有模型都在犯同一批错。
比如模型经常让你装一个叫 aws-cdk 的包——听起来完全正确,AWS CDK 啊。但实际包名是 aws-cdk-lib。同理,opentelemetry 不存在,真实被拆分成了 opentelemetry-api 和 opentelemetry-sdk。tencentcloud 不存在,真实的是 tencentcloud-sdk-python。
这些幻觉包名有一种诡异的「正确感」。它们不是胡说八道,它们是模型的「合理外推」——正因为太合理了,人类反而不会怀疑。
而攻击者要做的,只是在 PyPI 或 npm 上蹲守这些名字。
从Slopsquatting到HalluSquatting:攻击升级了
如果说 Slopsquatting 是「在 AI 可能走错的路上挖坑」,那今年 7 月刚被披露的 HalluSquatting 就是「在 AI 的盲区里建了一座军火库」。
特拉维夫大学和以色列理工的研究团队发现,问题不只是包名。AI 编码助手会幻觉出完整的 GitHub 仓库名、插件名、Skill 名。 而一旦你让 Cursor 或 Copilot「帮我克隆那个缓存库」,它可能给你一个听起来很靠谱的仓库名——攻击者早就注册好了,里面藏着恶意指令。
更可怕的是,这些恶意指令不是传统的病毒代码。它们是间接提示注入。
什么意思?你让 AI 去拉一个仓库,AI 拉回来了。在这个仓库的 README 或代码注释里,藏着一段你看不到、但 AI 会读到并执行的指令。然后你的 AI 编码助手——那个拥有你终端完整权限的工具——开始按照攻击者的指令干活了。
研究团队测试的结果:让 AI 克隆仓库时,幻觉率高达 85%。让它安装一个具名 Skill 时,幻觉率 100%。
100%。
九个主流 AI 编码工具全部中招:Cursor、Windsurf、GitHub Copilot、Cline、Gemini CLI……一个不剩。
这不是漏洞,这是AI的「出厂设定」
最让人不安的是:这个问题没法从模型层面修复。
你可以让模型更谨慎、少幻觉——但你无法让模型永远不说出「不存在但听起来很对」的东西。因为幻觉不是 bug,是生成式 AI 的工作原理。模型没有「我不知道」的开关,它的底层逻辑就是「根据概率生成最像正确答案的东西」。
而攻击者做的,就是利用这个「像」。
研究论文的结论很直接:「缓解方案存在结构性障碍。」 翻译成人话就是:短期内,这个问题无解。
你想想看,如果一个攻击者提前知道了主流模型都会幻觉哪些包名——而这些包名跨模型高度一致——他只需要花一个下午注册 50 个域名和仓库,然后躺平等着。
不需要钓鱼邮件。不需要社工。不需要零日漏洞。
你的 AI 助手会自己走过去,敲门,把钥匙插进锁孔。
85%的开发者都在用AI写代码
再看一组数据:2026 年,85% 的开发者使用 AI 编码工具,73% 日常使用。GitHub Copilot 付费用户超 470 万,Cursor 超 100 万。Gartner 预测,到 2026 年底,60% 的新代码将由 AI 生成。
这些数字意味着什么?
意味着 HalluSquatting 的攻击面不是某个公司的内网,不是某个产品的用户群——是所有在用 AI 编程的人。每一次「帮我写个脚本」「帮我装个包」「帮我克隆个仓库」,都是一次潜在的攻击入口。
而攻击者要做的,只是在正确的路口提前站好。
那怎么办?
不是让你戒了 AI 编程。那不现实,也没必要。
真正要做的是改一个习惯:不要把 AI 给出的依赖名当作「已确认」,只当作「候选」。
装任何包之前,去 PyPI 或 npm 搜一下是否真的存在。看一眼维护者、下载量、GitHub 仓库是不是活的。这些事花不了 30 秒,但能在整条供应链上砍掉一大半的攻击面。
如果你维护 CI/CD 流水线——锁死依赖版本,新增外部包必须有 PR review,build 阶段的网络权限能收多紧收多紧。
这些操作一点都不酷。跟 AI 画风也不搭。但它们是目前为止,唯一有效的防御。
最后
AI 辅助编程这件事,本质上是把「信任」前置了。以前你查文档、看 GitHub、翻 Stack Overflow,每个环节都有一道人工判断。现在你把这道判断外包给了模型——它说装什么你就装什么。
你省了 30 秒。
但有人在路的尽头,等了三个月了。
读者留言
留言
还没有留言,欢迎抢沙发。