2025~2026 年这段时间,npm 供应链攻击事件仍然层出不穷。
有人一个月偷偷往一个已经被几万人依赖的包里塞后门,有人把恶意代码藏在 prototype pollution 里,有人直接把 crypto miner 伪装成性能优化工具……
普通开发者面对几百上千个依赖时,真的很难判断一个包到底安不安全。
而今天要介绍的这个工具,就是专门来解决这个痛点的——
Package Inferno
github.com/MHaggis/Pac…
它到底能干什么?
一句话总结:
它能把一个 npm 包“解剖”得非常透彻,比你肉眼看代码、看 package.json、看最近提交记录要深入得多。
目前主要提供的核心能力有这些:
| 检测维度 | 能发现什么问题 | 难度(人工) | Package Inferno 是否能较好识别 |
|---|---|---|---|
| 可疑字符串/硬编码 | API key、wallet address、C2 域名、矿池地址等 | ★★☆ | 非常强 |
| 动态代码执行 | eval、Function、vm.runInNewContext 等高危写法 | ★★★ | 强 |
| 原型污染 | Object.prototype 相关操作 | ★★★★ | 中等~强 |
| 进程/文件系统操作 | child_process、fs.writeFile、process.exit 等 | ★★ | 非常强 |
| 网络外联 | http/https/fetch + 可疑域名 | ★★ | 非常强 |
| 环境变量窃取 | process.env 相关操作 + 敏感关键字 | ★★★ | 强 |
| 伪装/混淆 | 变量名极长、base64 大段字符串、unicode 混淆等 | ★★★★ | 中等(依赖规则质量) |
| 版本间行为剧变 | 某个版本突然多了很多奇怪代码 | ★★★★ | 支持(需配合历史版本对比) |
它是怎么做到的?
Package Inferno 的工作流程大概是这样的:
- 输入 → npm 包名 + 版本(或直接给 tarball url)
- 自动下载 → 解压 tarball
- 多维度扫描(目前主要有三类):
- 基于正则 + 启发式的字符串匹配(最快)
- YARA 规则引擎(最强可扩展)
- 部分 AST 分析(正在快速迭代中)
- 输出结构化的 JSON 结果,包含:
- 发现的每一个“红旗”(red flag)
- 对应的文件路径 + 行号 + 命中规则
- 严重性评分(可自定义)
- 证据片段(方便人工复核)
实际使用场景举例
场景1:新项目要引入一个冷门包
npx package-inferno lodash.debounce@4.0.8
→ 几秒钟告诉你这个版本有没有被投毒
场景2:公司内部供应链安全周
把所有生产依赖扫一遍,输出 top 20 最可疑的包
→ 直接生成报告发给安全团队
场景3:研究型玩家
想研究最近一年有哪些包被投过毒?
配合脚本批量拉取热门包的不同历史版本 → 对比 delta → 找规律
目前的状态(2026年1月)
- 项目非常新(公开时间 ≈ 2025年底~2026年初)
- 还在快速迭代中,规则还在疯狂补充
- 作者很活跃,issue 和 PR 响应很快
- 已经可以开箱即用(支持 Docker 一键跑)
- 社区贡献度还很低,正是现在参与最有影响力的时候
怎么快速上手?(最简单方式)
# 方式1:直接 npx(最快)
npx package-inferno express@4.19.2
# 方式2:Docker(推荐批量/公司用)
docker run -it --rm ghcr.io/mhaggis/package-inferno:latest axios@1.7.7
# 方式3:本地开发/改规则
git clone https://github.com/MHaggis/Package-Inferno.git
cd Package-Inferno
npm install
npm run scan -- axios@1.7.7
一句话总结
如果你:
- 经常选包选到焦虑
- 公司有供应链安全要求
- 对 npm 恶意包投毒原理感兴趣
那么 Package Inferno 非常值得你今天就 star + clone 一份,闲暇时跑跑自己项目里的依赖,看看能不能挖出一些“惊喜”。
安全,从审视每一个依赖开始。
祝大家 2026 年都能用上干净的 npm 包~