前几天晚上在家写代码,用Cursor写一个数据处理的小脚本。写到一半它给我推荐了一个Python包,名字看起来特别正经,类似于pandas-datatools这种风格的名字。我当时没多想,习惯性地就要pip install。
手指悬在回车键上的时候,我突然起了个疑心,去PyPI上搜了一下。
这个包不存在。
或者准确地说,它曾经不存在。现在有人注册了它,但内容跟Cursor告诉我的功能完全不搭。
那一刻我背后出了一层冷汗。
一个安全研究员的实验
2023年,一个叫Bar Lanyado的安全研究员注意到一件事,AI编程助手在推荐Python包的时候,总是会推荐一个叫huggingface-cli的东西。
问题是,这个包根本不存在。
真正的安装命令是pip install -U huggingface_hub[cli],但AI就是一遍又一遍地告诉开发者去装huggingface-cli。
Lanyado做了一件事,他在PyPI上注册了这个包。里面什么代码都没有,就一个空壳。
三个月后,这个空壳包被下载了超过30000次。
三万次。一行有效代码都没有。没做任何推广。
下载它的人里,甚至包括阿里巴巴GraphTranslator项目的开发者,他们的README里直接写着pip install huggingface-cli。
如果Lanyado不是一个做实验的研究员,而是一个想搞事的人呢?
如果那个空壳包里装的是木马呢?
这玩意有个名字,叫Slopsquatting
Slopsquatting,直译过来大概是「AI废话占位」。Slop是AI那些一本正经胡说八道的废话输出,Squatting是域名抢注那个squatting。两个词拼在一起,精准地描述了这种攻击方式。
杀伤链条特别简单,就三步。
第一步,AI模型「幻觉」出一个不存在的包名。不是随机乱编,是信誓旦旦地告诉你「用这个包可以解决你的问题」,名字听起来特别合理,功能描述得有模有样,甚至能编出API用法。
第二步,攻击者提前把这个假包名注册了,往里面塞恶意代码。
第三步,你或者你的AI Agent执行了pip install或npm install。
完了。中招了。
你可能会说,这跟传统的typosquatting有啥区别?typosquatting是注册一个跟真包名差一两个字母的假包,等你手滑打错的时候中招。但slopsquatting不一样,它利用的不是你的手滑,是AI的信誉。
AI用一种极其自信的语气告诉你「安装这个包」,你信了。因为你信AI。
而且传统typosquatting现在占恶意包的比例已经降到9%了,包管理器可以用相似度算法拦截。但slopsquatting生成的包名跟任何已有包都不像,它是全新的名字,没有任何相似度检测能拦住。
数据有多吓人
有一组学术研究的数字我必须放在这里。
2024年的一项大规模研究,分析了576000个AI代码推荐样本,发现19.7%的包推荐是幻觉,压根不存在。差不多五个推荐里就有一个是假的。这不是某个垃圾模型的问题,是整个行业的普遍现象。
商用模型幻觉率大概在5.2%左右,开源模型能到21.7%。

更恐怖的是2026年Aleksandr Churilov做的跟进研究。他测了五个当前最强的模型,Claude Sonnet 4.6、Claude Haiku 4.5、GPT-5.4-mini、Gemini 2.5 Pro、DeepSeek V3。
这五个模型,幻觉出了相同的127个假包名。
相同的。127个。五个完全不同架构、不同公司的模型,编出了一模一样的假名字。
我看到这组数据的时候脑子转了好一会儿。五个完全没有关系的模型,怎么会编出一样的假名字?我猜测是训练数据里某种系统性偏差导致的确定性输出,但说实话我也没完全想明白底层原因。反正结论是,攻击者根本不需要猜你用的是哪个AI,因为不管你用哪个,大概率会幻觉出同一批假名字。
Forbes报道的数据更刺激,同一个幻觉提示词重复跑10次,同一个假包名会以43%的概率反复出现。58%的幻觉包名可以跨session复现。
我写到这里其实犹豫了一下,要不要把这些数字全列出来。怕写成恐慌贩卖。但想了想,这些数字本身就是事实,你知道了至少能多留个心眼,不知道的话可能就稀里糊涂中招了。
所以还是放出来吧。这不是偶尔犯错,这是可预测的、稳定的、可被攻击者利用的系统性漏洞。
已经发生的真实攻击
这不是「理论上可能」,这已经在现实中发生了。
2026年1月,安全公司Aikido发现了一个恶意npm包,叫react-codeshift。这个名字是怎么来的呢?AI把两个真实的包名jscodeshift和react-codemod混在一起,「幻觉」出了react-codeshift。
攻击者注册了这个名字,往里面塞了恶意代码。
被发现的时候,这个包已经出现在237个GitHub仓库的依赖里了。不是被人手动安装的,是被AI Agent在自动执行任务的时候装进去的。47个Agent的skill文件里直接引用了这个包,没有任何人类review。
同一时间,另一个叫unused-imports的恶意包每周被下载233次。
进化版,HalluSquatting
如果你觉得slopsquatting已经够吓人了,那它的进化版HalluSquatting会让你更不安。
2026年7月,特拉维夫大学、以色列理工和Intuit的研究团队发了一篇论文。他们测试了9个主流AI编程工具,Cursor、Cursor CLI、Gemini CLI、Windsurf、GitHub Copilot、Cline、OpenClaw、ZeroClaw、NanoClaw。
结论是,这9个工具在克隆GitHub仓库的时候,幻觉错误的仓库名的概率高达85%。在安装技能插件的时候,幻觉率100%。
100%。

而且HalluSquatting比普通的slopsquatting更进了一步。普通的slopsquatting是一次攻击一台机器。HalluSquatting可以把你的AI Agent变成僵尸网络的一部分,因为Agent会自动传播那个假仓库名到其他项目和配置文件里。
一台感染,自动扩散。像病毒一样。
说实话写到这里我自己也有点拿不准,这事到底有多大概率发生在普通开发者身上。毕竟论文里的数据是实验室环境,实际工作中AI推荐的包大部分时候还是靠谱的。但问题是,你不知道哪一次不靠谱。就像安全带,99%的时候用不上,但那1%你没系的话可能就没了。
为什么你该认真对待这件事
我知道很多程序员看到这里可能会想,我又不是无脑照抄AI的输出,我每个包都会检查的。
真的吗?
你上一次在Cursor或Copilot推荐一个import的时候,专门去注册表查了一下这个包存不存在,是什么时候?
说实话我自己也做不到每次都查。特别是写代码写到心流状态的时候,AI一推荐,tab一按,完事了。谁会停下来去验证一个看起来名字特别正经的包呢?
更别说现在越来越多的场景是AI Agent在自动跑。你设个任务让Codex去实现一个功能,它自己决定用什么包、自己pip install、自己写代码。你可能等它跑完了都不会看一眼它装了什么依赖。
这才是slopsquatting最毒的地方,它的攻击对象正在从「手动编码的开发者」转向「自动执行的AI Agent」。Agent不会起疑心,不会去PyPI上搜一下,不会在回车键前停一秒。
能做什么
我不想写成一篇恐慌贩卖。说实话这个问题目前没有完美的解决方案,但有一些事可以做。
最基础的,锁死依赖版本。requirements.txt、package-lock.json、yarn.lock,这些文件存在的意义就是不让任何未知的包偷偷溜进来。
其次,给AI Agent设权限边界。不要让Agent拥有无限制的pip install权限。可以配一个白名单,或者至少让install操作需要人类确认。
再进一步,用工具扫描。GitHub上已经有人做了slopcheck之类的工具,专门扫描你的markdown文档和配置文件里有没有引用不存在的包名。
最后一个建议可能听起来有点反直觉,对AI推荐的包名保持适度怀疑。它说得再自信、描述得再详细,如果你没听过这个包,花10秒去npm或PyPI上搜一下。10秒钟而已。

更大的图景
写到这里我突然想起一件事。
前几天OpenAI的Agent逃出测试沙箱、花了4天自己黑进Hugging Face的新闻,全网都在讨论AI失控。大家关注的是「AI会不会主动攻击人类」这种科幻式的恐惧。
但slopsquatting告诉我们的是另一种风险,一种更安静、更日常、更容易被忽视的风险。
AI不需要「主动作恶」就能伤害你。它只需要「犯错」就够了。
犯一个看起来无比正常的错误。推荐一个听起来完全合理的包名。用一种你完全没有理由怀疑的自信语气。
然后等着有人利用这个错误。
这让我想到经济学里「看不见的手」的反面。亚当斯密说市场里每个人追求私利,最终会通过看不见的手达到公共利益的最大化。但slopsquatting是一个「看不见的漏洞」,AI追求「看起来正确」,攻击者追求利益最大化,两者合力创造了一个完美的陷阱。
没有任何一方「做了错事」。AI没有恶意,它只是产生了幻觉。攻击者注册一个包名也不违法。开发者信任工具也不是过错。
但伤害就这么发生了。
这大概是AI时代一种新型风险。AI没有变坏,它只是在善意地帮助你的过程中,无意间给坏人递了刀。
以前程序员最怕的供应链攻击是「真包被黑」,比如event-stream事件那样,维护者把包转给了一个陌生人。现在多了一种全新的攻击面,AI凭空编造出一个从未存在过的包,然后有人把这个幻觉变成了现实。
从未存在过的东西,成了攻击你的武器。
这事我想了好几天,越想越觉得,我们信任AI的方式需要变一变了。不是不信任它,而是从「它说什么我做什么」变成「它说什么我验证什么再做什么」。
多了一步而已。但这一步可能让你避开一颗地雷。
你平时用AI写代码的时候,有没有碰到过推荐一个奇怪的包然后你去搜发现不存在的情况?评论区聊聊,我很好奇这种事到底有多普遍。
如果对你有帮助,可以的话请点赞、收藏+关注
谢谢你看我的文章,我们,下次再见。
/ 作者 rocs
夜雨聆风