用途:防御新闻工具链中常见的 npm/bun 供应链攻击模式——维护者账号或 CI 被攻陷后发布恶意版本,机器在社区察觉前就完成安装。
主要能力(三层防御):
- 安装冷却期:只安装发布超过 N 天(默认 7 天)的版本,为主要防线。
- 沙箱预装扫描:需绕过冷却期时,对候选 tarball 做静态分析,检测供应链恶意软件特征,扫描在 bwrap/firejail/unshare 内运行。
- 安装时 --ignore-scripts:postinstall 是首要攻击向量,绕过冷却期时跳过生命周期脚本。
配置(npm v11+ 与 bun 1.3+): ~/.npmrc 写入 min-release-age=7(单位天);~/.bunfig.toml 写入 [install] minimumReleaseAge = 604800 与 minimumReleaseAgeExcludes = [](单位秒,精确名称不支持通配)。旧版 npm 会静默忽略未知键,需用 npm --version 与 npm config get min-release-age 验证。
按命令绕过: npm install <pkg>@<version> --min-release-age=0 --ignore-scripts bun add <pkg>@<version> --minimum-release-age=0 --ignore-scripts 绕过时务必搭配 --ignore-scripts;确需 postinstall 的原生模块,人工审查 package.json 的 scripts 后再手动运行。
扫描检查项包括:依赖含 github:/git+ URL、根目录未被引用的 JS 文件、体积超上版 3 倍、文件数微增但体积翻倍、存在生命周期脚本、引用 .ssh/.aws/.npmrc 等凭据、registry 标记 deprecated 含安全措辞、OSV.dev 命中已知漏洞。预发布版本不纳入体积基线。
限制:冷却期无法拦截超过 7 天未被发现的投毒、传递依赖、npm ci 对已锁定版本的安装、node_modules 中已存在的恶意包,也不防运行时从 CDN 动态加载的供应链攻击。建议配合 npm audit、osv-scanner 扫描解析树与 lockfile。
适用场景:新机器加固、团队绕过流程文档化、CI 锁文件扫描。具体脚本与自测夹具随技能提供,需按本机环境适配。