npm供应链投毒400+包,AI项目依赖包安全审计流程

近期披露的 npm 供应链投毒事件涉及 400 多个恶意包,不少伪装成 AI 工具或常用依赖被大量下载。
对于依赖密度极高的 AI 项目,npm 依赖包安全审计不能再只靠“感觉没问题”。
本文按零基础也能直接照做的顺序,从锁定依赖、自动扫描到人工复核,完整讲清一套可落地的审计流程,并给出可直接运行的命令。

为什么 AI 项目更容易被供应链投毒盯上

AI 项目通常重度依赖 npm 生态,像模型转换工具、向量数据库 SDK、API 封装库等,安装时会执行大量 installpostinstall 脚本。
攻击者常用两种手法:

  • 包名仿冒:把恶意包命名成知名包的相似名,比如将 transformers 改成 transformers-aitransfomers,拼写差一位,肉眼很难分辨。
  • 脚本投毒:在正常功能代码里插入 postinstall 脚本,安装时自动下载木马或窃取环境变量。

AI 项目里还有 .env、API Key、训练数据路径等敏感内容,一旦依赖被污染,泄露面比普通 Web 应用更大。

审计前准备:先锁死依赖版本和来源

很多供应链攻击利用的是“版本漂移”。
没有锁版本时,npm install 会拉取最新版,而恶意包可能刚被发布到某个新版本上。

先确认当前仓库是否已生成锁文件:

ls -l package-lock.json

如果不存在,先执行:

npm install

生成后提交到 Git,后续安装一律使用:

npm ci

npm ci 严格按 package-lock.json 安装,不会改动依赖版本,是审计和部署时更安全的选择。

接着确认 registry 来源,防止指向被篡改的私有源:

npm config get registry

正常输出应为 https://registry.npmjs.org/ 或你公司自建的可信镜像。

三步完成 AI 项目依赖包安全审计

第一步:用 npm audit 扫描已知漏洞

npm audit 会对比当前依赖和已知漏洞库,直接可跑:

npm audit

如果只想看高危及以上问题,并输出 JSON 便于分析:

npm audit --json > audit.json

注意:npm audit 只能发现已收录漏洞,对刚投放的恶意包基本无能为力。
所以不能把它当作唯一审计手段。

第二步:检查每个包的安装脚本

恶意行为常藏在 postinstallpreinstall 等脚本里。
逐个检查 node_modules 太重,可以直接看锁文件里的 hasInstallScript 字段:

npm ls --json | grep -B 5 "hasInstallScript": true

更直观的做法是检查项目所有依赖的 package.jsonscripts 部分,挑出非必要却存在的 install 脚本。
发现可疑脚本后,用下面命令查它的来源:

npm view <包名> --json

对比安装后的版本、发布时间、维护者信息是否与官方一致。

第三步:核对锁文件中的下载地址和完整性

打开 package-lock.json,重点看 resolved 字段:

"resolved": "https://registry.npmjs.org/xxx/-/xxx-1.0.0.tgz"

如果某个包的下载地址不是官方 registry,而是私有 IP、奇怪域名或带 http://,立刻标记为高危。
同时检查 integrity 字段,正常应为 sha512-sha1- 开头的哈希值,缺失或为空说明校验可能被绕过。

常见误区和避坑提醒

  • 只跑 npm audit 就完事npm audit 对 0day 恶意包基本无感,必须结合脚本检查和来源核对。
  • 忽略 lock 文件:不提交 lock 文件,等于每次安装都在碰运气。
  • 随意安装带 latest 的依赖:AI 项目迭代快,很多人喜欢装最新版,但这正是投毒窗口。建议固定精确版本,如 "axios": "1.7.9"
  • 发现恶意包只删 node_modules:删除后如果 lock 文件没更新,重新 npm ci 还会拉回问题包。正确做法是:先移除相关包,再删除 node_modulespackage-lock.json 后重新生成,或者手动修改 lock 再跑 npm install

验证审计结果是否到位

完成上述操作后,建议逐条确认:

npm audit --audit-level=high

无输出或显示 found 0 vulnerabilities,说明已知漏洞已处理。
再执行:

npm ls --depth=0

检查顶层依赖列表,确认没有多出陌生包。
最后抽查一个关键依赖的安装脚本:

npm view <包名> scripts --json

如果脚本干净、来源正规,整个审计流程就算走通了。

对 AI 项目而言,依赖包安全审计不是一次性任务,建议每次引入新依赖或每两周跑一遍上述流程。
如果条件允许,可以在 CI 中加入 npm audit 和脚本扫描步骤,让投毒包在进入代码库之前就被拦住。
你现在就可以按这套流程,先把你最常用的 AI 项目依赖全部过一遍。

分享到:
上一篇
sub2api会话池管理,维持大量网页账号会话减少
下一篇
中转服务监控面板Prometheus+Grafana指标模板
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意