cat case/PM-2018-0068.md

ESLint 2018 维护者 npm 账户被攻陷,发布含恶意代码的 eslint-scope 包

P2 · 攻击者盗用 ESLint 维护者 npm 账号发布恶意 eslint-scope 3.7.2,污染大量依赖该包的构建与项目

summary

2018-07-12,攻击者攻陷 ESLint 维护者的 npm 账户,发布了包含恶意代码的 eslint-scope 3.7.2,该包被海量 JavaScript 项目间接依赖,构成典型软件供应链投毒。

timeline

恶意版本发布后迅速被安装到众多 CI 与本地环境;社区与安全研究者发现异常并上报;npm 与 ESLint 团队协作撤销该版本、重置受影响账号凭据,并通知用户清理。

root_cause

维护者 npm 账户凭据泄露/弱保护,发布流程缺少二次确认或硬件密钥,单个账户失守即可向广泛依赖树注入恶意代码。

amplifiers

npm 生态按版本号自动解析安装,恶意包在短时间内即进入大量下游构建;账户级单点信任被直接转化为供应链风险。

mitigation

撤销恶意版本、重置并强制维护者账号 2FA、审计发布流水线,后续推广 npm 发布签名与令牌作用域最小化。

lessons

包管理器的发布账号是供应链咽喉,必须硬件 2FA + 发布令牌作用域限制;对高频依赖的基础包应增加发布审批与完整性校验。

checklist

维护者账号强制硬件 2FA;发布令牌按包与作用域最小化授权;关键基础包启用发布审批与签名;CI 应使用锁定版本与完整性校验。