依赖混淆攻击利用包管理器“公共源优先”的解析顺序:攻击者在 npm 公共仓库抢注与内网私有包同名的恶意包,当 CI 构建时若未锁定私有源作用域,就会拉取并执行恶意代码。
一、npm 作用域与私有源强制绑定
ini
# .npmrc —— 将公司作用域强制指向私有仓库,杜绝公共源同名包劫持
@mycompany:registry=https://npm.mycompany.internal/repository/npm-private/
always-auth=true
# 全局默认源仍可指向公共仓库,但作用域包永不回退
registry=https://registry.npmjs.org/json
{
"name": "@mycompany/payment-sdk",
"publishConfig": {
"registry": "https://npm.mycompany.internal/repository/npm-private/"
},
"overrides": {
"lodash": "4.17.21"
}
}