NPM供应链攻击可以成功实施的原因是:
npm install ssnpmproxy包管理工具在更新NPM包时,总是会选用满足依赖约束条件的最新版NPM包,并且该行为还不支持更改
只要不使用最新版NPM包,就能避开大多数供应链攻击,因为安全社区也会监测NPM仓库内的恶意NPM包,并上报给NPM仓库删除,恶意NPM包的存活时间是短的
该命令可以强制 npm, yarn, pnpm 等包管理器使用次新版NPM包
npx ssnpmproxy init
`配置文件中,需要注意的只有 daysThreshold 字段,它表达信任发布多少天以上的NPM包
`json
{
"port": 40798,
"sslPath": "/var/folders/rs/w_d4vmzd1j30zdr_tyxjsvqw0000gn/T/npmproxy-c0f16174b4fe05c3",
"daysThreshold": 15
}
`安装 / 更新包
使用 npm, yarn, pnpm 安装 / 更新NPM包时,在前面添加 npx ssnpmproxy 前缀,如下示例
`
npx ssnpmproxy yarn add ...
npx ssnpmproxy npm add ...
npx ssnpmproxy yarn upgrade
`如下是一个使用示例,在启用npmproxy安装zustand时,它对发布在15天内的包进行了降级,例如将zustand降级到5.0.8
`
npx ssnpmproxy npm i zustand
starting server for registry.npmjs.org
https server started for registry.npmjs.org on 64057
⠇Downgrading zustand from 5.0.9 to 5.0.8
⠋Downgrading @types/react from 19.2.7 to 19.2.6
⠋Downgrading immer from 11.0.1 to 10.2.0added 1 package, and audited 33 packages in 10s
``