摘要 :研究显示,AI 生成的代码中有 48% 存在"幻觉"------引用了根本不存在的包、API 或方法。更可怕的是,黑客已经开始利用这个漏洞:他们注册 AI 经常"幻觉"出来的假包名,等你
npm install,恶意代码就进了你的项目。这种攻击叫"Slopsquatting",已经影响了 44 万个包依赖。本文带你深入了解这个 AI 时代的新型安全危机。
01. 那个让我后背发凉的 Bug
上周,我在 Code Review 时发现了一个奇怪的 import:
javascript
import { validateEmail } from "email-validator-pro"
我没见过这个包,于是去 npm 上搜了一下。
搜索结果:0 个匹配。
我问写这段代码的同事:"这个包是哪来的?"
他说:"Cursor 自动补全的啊,我看着挺专业的就用了。"
我又问:"你 npm install 过吗?"
他愣了一下:"好像......没有?代码能跑啊。"
我看了一眼 package.json,果然没有这个依赖。代码之所以能跑,是因为另一个包里恰好有个同名的函数被导出了。
这次我们运气好。
但如果这个"不存在的包"真的被人注册了呢? 如果里面藏着恶意代码呢? 如果我们真的 npm install 了呢?
这不是假设。这正在发生。
02. AI 代码幻觉:48% 的代码在"胡说八道"
2.1 什么是 AI 代码幻觉?
AI 代码幻觉(AI Code Hallucination)是指 AI 生成的代码中包含:
- 不存在的包 :
import xxx from 'fake-package' - 不存在的 API :
response.data.nonExistentMethod() - 不存在的方法 :
array.filterMap()(JavaScript 没有这个方法) - 错误的参数 :
fs.readFile(path, 'utf-8', callback, extraParam) - 虚构的配置项 :
{ enableTurboMode: true }(没有这个选项)
2.2 有多严重?
2025 年的研究数据让人触目惊心:
erlang
AI 代码幻觉统计(2025年研究):
样本量:576,000 个代码样本
测试模型:16 个主流 LLM
关键发现:
├─ 48% 的 AI 生成代码包含某种形式的幻觉
├─ 440,000 个包依赖是"幻觉"出来的(不存在)
├─ 58% 的幻觉包名会重复出现(AI 会反复犯同样的错)
├─ 开源模型幻觉率:22%
├─ 商业模型幻觉率:5%(好一些,但仍然存在)
└─ 45% 的 AI 生成应用包含可利用的 OWASP 漏洞
将近一半的 AI 代码在"胡说八道"。
2.3 为什么 AI 会"幻觉"?
typescript
// AI 幻觉的产生机制
interface HallucinationCause {
cause: string
explanation: string
example: string
}
const hallucinationCauses: HallucinationCause[] = [
{
cause: "训练数据过时",
explanation:
"AI 的训练数据可能是 1-2 年前的,很多新包它不知道,很多旧包已经改名或废弃",
example: "推荐使用已经废弃的 request 库,而不是 axios",
},
{
cause: "模式匹配过度泛化",
explanation:
"AI 看到 'email' + 'validator' 就觉得应该有个 'email-validator' 包",
example: "生成 import { validate } from 'email-validator-pro' // 不存在",
},
{
cause: "混淆不同语言/框架",
explanation:
"把 Python 的库名用在 JavaScript 里,或者把 React 的 API 用在 Vue 里",
example: "在 Node.js 里 import pandas // 这是 Python 的库",
},
{
cause: "自信地编造",
explanation: "AI 不会说'我不知道',它会自信地给出一个看起来合理的答案",
example: "生成一个完整的、看起来很专业的、但完全虚构的 API 调用",
},
{
cause: "私有代码库盲区",
explanation: "AI 没见过你公司的内部代码,但会根据命名规律'猜测'",
example: "猜测你公司有个 @company/utils 包,但实际上叫 @company/common",
},
]
03. Slopsquatting:黑客的"钓鱼"新玩法
3.1 什么是 Slopsquatting?
Slopsquatting = Slop (AI 生成的垃圾内容)+ Squatting(抢注)
简单来说:黑客注册 AI 经常"幻觉"出来的假包名,等你上钩。
vbnet
Slopsquatting 攻击流程:
第一步:研究 AI 幻觉模式
├─ 用各种 LLM 生成大量代码
├─ 收集所有"幻觉"出来的包名
└─ 找出重复率最高的(58% 会重复)
第二步:抢注假包名
├─ 在 npm / PyPI 上注册这些包名
├─ 包内容看起来正常(躲避审查)
└─ 但藏有恶意代码
第三步:等待受害者
├─ 开发者用 AI 生成代码
├─ AI "幻觉"出这个包名
├─ 开发者 npm install
└─ 恶意代码进入项目
第四步:获利
├─ 窃取环境变量(API Key、密码)
├─ 植入后门
├─ 加密勒索
└─ 供应链攻击(感染下游项目)
3.2 真实案例
2025 年,安全研究人员发现了一个大规模的 Slopsquatting 攻击:
objectivec
案例:huggingface-cli 事件
背景:
├─ Hugging Face 是最流行的 AI 模型平台
├─ 官方 CLI 工具叫 huggingface-hub
└─ 但 AI 经常"幻觉"出 huggingface-cli 这个名字
攻击:
├─ 黑客注册了 huggingface-cli 包
├─ 包内容:正常的 CLI 功能 + 隐藏的数据窃取代码
├─ 窃取内容:HF_TOKEN(Hugging Face API 密钥)
└─ 影响:数千个项目被感染
发现过程:
├─ 安全研究人员在分析 AI 幻觉模式时发现
├─ 该包已被下载数万次
└─ 大部分下载来自 AI 辅助开发的项目
3.3 规模有多大?
go
Slopsquatting 威胁规模(2025-2026):
已发现的恶意包:
├─ npm:3,000+ 个疑似 Slopsquatting 包
├─ PyPI:1,500+ 个疑似 Slopsquatting 包
└─ 其他包管理器:数量不详
潜在攻击面:
├─ 440,000 个 AI 幻觉包名可被利用
├─ 58% 的幻觉包名会重复出现(高价值目标)
└─ 每天有数百万次 AI 辅助的包安装
受影响的开发者:
├─ 97% 的开发者不会验证 AI 推荐的包是否存在
├─ 大部分人直接复制 AI 生成的 import 语句
└─ 很少有人检查 package.json 里的陌生依赖
04. 更可怕的:AI 生成的"合成漏洞"
除了幻觉包名,AI 还会生成一种全新的安全威胁:合成漏洞(Synthetic Vulnerabilities)。
4.1 什么是合成漏洞?
合成漏洞是指:只存在于 AI 生成代码中的安全漏洞,人类程序员通常不会写出这种代码。
javascript
// 人类程序员写的代码(有漏洞,但是常见模式)
const userId = req.params.id
const user = await db.query(`SELECT * FROM users WHERE id = ${userId}`)
// SQL 注入漏洞,但 SAST 工具能检测到
// AI 生成的代码(合成漏洞,工具检测不到)
const userId = req.params.id
const sanitizedId = userId.replace(/[^0-9]/g, "") // 看起来做了过滤
const user = await db.query(`SELECT * FROM users WHERE id = ${sanitizedId}`)
// 问题:如果 userId 是 "1 OR 1=1",过滤后变成 "111"
// 不是注入了,但逻辑完全错误,可能返回错误的用户数据
// 传统 SAST 工具检测不到这种"逻辑漏洞"
4.2 合成漏洞的特点
typescript
// 合成漏洞 vs 传统漏洞
interface VulnerabilityComparison {
aspect: string;
traditional: string;
synthetic: string;
}
const comparison: VulnerabilityComparison[] = [
{
aspect: "来源",
traditional: "人类程序员的常见错误",
synthetic: "AI 的独特错误模式"
},
{
aspect: "可检测性",
traditional: "SAST/DAST 工具能检测大部分",
synthetic: "传统工具检测不到"
},
{
aspect: "模式",
traditional: "已知的漏洞模式(OWASP Top 10)",
synthetic: "全新的、未分类的漏洞模式"
},
{
aspect: "修复难度",
traditional: "有成熟的修复方案",
synthetic: "需要理解 AI 的"思维方式"才能修复"
},
{
aspect: "复现性",
traditional: "相同输入产生相同漏洞",
synthetic: "AI 可能每次生成不同的漏洞代码"
}
];
4.3 研究数据
erlang
合成漏洞研究(2025年,50万+代码样本):
发现:
├─ AI 生成的代码比人类代码有更多高危漏洞
├─ AI 会复制训练数据中的不安全编码模式
├─ AI 会"幻觉"出不存在的抽象层和框架
└─ 这些"幻觉框架"创造了全新的攻击面
具体数据:
├─ 45% 的 AI 生成应用包含 OWASP 漏洞
├─ AI 代码的高危漏洞密度是人类代码的 1.5 倍
├─ 30% 的合成漏洞无法被传统 SAST 工具检测
└─ 修复 AI 代码漏洞的时间比修复人类代码多 40%
05. 如何保护自己?
5.1 代码审查清单
typescript
// AI 代码审查清单
const aiCodeReviewChecklist = {
// 1. 依赖检查
dependencies: [
"每个 import 的包是否真实存在?",
"包名拼写是否正确?(typosquatting 风险)",
"包是否来自官方源?",
"包的下载量和维护状态如何?",
"包的最近更新时间?(太新可能是恶意包)"
],
// 2. API 检查
apis: [
"调用的 API 是否真实存在?",
"参数数量和类型是否正确?",
"返回值类型是否符合预期?",
"是否使用了已废弃的 API?"
],
// 3. 安全检查
security: [
"是否有 SQL 注入风险?",
"是否有 XSS 风险?",
"敏感数据是否正确处理?",
"权限检查是否完整?",
"是否有硬编码的密钥或密码?"
],
// 4. 逻辑检查
logic: [
"边界情况是否处理?",
"错误处理是否完善?",
"代码逻辑是否符合需求?",
"是否有"看起来对但实际错"的代码?"
]
};
5.2 工具推荐
arduino
防护 AI 代码幻觉的工具:
依赖检查:
├─ npm audit / yarn audit(基础检查)
├─ Snyk(更全面的漏洞扫描)
├─ Socket.dev(专门检测供应链攻击)
└─ deps.dev(Google 的依赖分析工具)
代码扫描:
├─ SonarQube(传统 SAST)
├─ Semgrep(可自定义规则)
├─ CodeQL(GitHub 的代码分析)
└─ AI 专用扫描器(2026年新出的工具)
实时防护:
├─ IDE 插件:在 import 时检查包是否存在
├─ Git Hooks:提交前自动检查依赖
├─ CI/CD 集成:构建时扫描
└─ 运行时监控:检测异常行为
5.3 最佳实践
markdown
AI 辅助开发安全最佳实践:
1. 永远不要盲目信任 AI 生成的代码
├─ 每个 import 都要验证
├─ 每个 API 调用都要查文档
└─ 每段逻辑都要理解
2. 使用锁文件
├─ package-lock.json / yarn.lock
├─ 锁定依赖版本
└─ 防止依赖被篡改
3. 定期审计依赖
├─ 每周运行 npm audit
├─ 检查新增的依赖
└─ 移除不需要的依赖
4. 使用私有镜像
├─ 公司内部 npm 镜像
├─ 只允许白名单包
└─ 阻止未知包安装
5. 代码审查流程
├─ AI 生成的代码必须人工审查
├─ 重点检查依赖和安全相关代码
└─ 使用自动化工具辅助
06. 给不同角色的建议
6.1 如果你是个人开发者
个人开发者防护指南:
立即做:
├─ 安装 Socket.dev 或类似的 IDE 插件
├─ 每次 npm install 前检查包是否存在
├─ 养成查文档的习惯(不要只信 AI)
└─ 定期运行 npm audit
习惯养成:
├─ AI 生成代码后,先读一遍再用
├─ 看到陌生的包名,先去 npm 搜一下
├─ 不确定的 API,查官方文档确认
└─ 保持怀疑态度
6.2 如果你是团队 Leader
团队安全策略:
流程层面:
├─ 建立 AI 代码审查规范
├─ 要求所有 AI 生成代码必须标注
├─ 重点审查依赖变更的 PR
└─ 定期安全培训
工具层面:
├─ CI/CD 集成依赖扫描
├─ 使用私有 npm 镜像
├─ 配置依赖白名单
└─ 自动化安全检查
文化层面:
├─ 鼓励质疑 AI 生成的代码
├─ 奖励发现安全问题的人
├─ 分享 AI 代码踩坑经验
└─ 建立安全意识
6.3 如果你是安全工程师
安全工程师行动指南:
短期:
├─ 研究 AI 代码幻觉模式
├─ 建立 AI 代码专用扫描规则
├─ 监控公司代码库中的可疑依赖
└─ 培训开发团队
中期:
├─ 开发 AI 代码专用安全工具
├─ 建立 AI 代码安全基线
├─ 与 AI 工具厂商合作改进
└─ 参与行业安全标准制定
长期:
├─ 研究合成漏洞的检测方法
├─ 建立 AI 代码安全知识库
├─ 推动 AI 编程工具的安全改进
└─ 培养 AI 安全专业人才
07. 写在最后
AI 编程工具是把双刃剑。
它可以让你的效率提升 10 倍,也可以让你的项目在不知不觉中被植入恶意代码。
48% 的 AI 代码在"胡说八道"。
这不是危言耸听,这是研究数据。
440,000 个幻觉包名等着被利用。
这不是未来威胁,这是正在发生的攻击。
作为程序员,我们需要:
- 保持警惕:AI 生成的代码不是"免检产品"
- 验证一切:每个包、每个 API、每段逻辑
- 使用工具:让自动化工具帮你把关
- 持续学习:了解最新的安全威胁和防护方法
最后,送给所有程序员一句话:
"AI 可以帮你写代码,但只有你能为代码的安全负责。"
"那个你随手 npm install 的包,可能正在窃取你的 API Key。"
在 AI 时代,安全意识比任何时候都重要。
保持警惕,保护好自己。
💬 互动时间:你遇到过 AI 代码幻觉吗?你的团队有什么防护措施?评论区聊聊!
觉得有用的话,点赞 + 在看 + 转发,让更多程序员朋友看到~
本文作者是一个差点被 AI 幻觉坑了的程序员。关注我,一起在 AI 时代保持安全意识。