#优质博文 #npm #安全 #CSS #JavaScript #前端 #新动态
啊这,我居然才知道,第一句话就蚌埠住了。
PS: 现在看 npm 页面已经恢复了
npm 'accidentally' removes Stylus package, breaks builds and pipelines
author Ax Sharma
啊这,我居然才知道,第一句话就蚌埠住了。
PS: 现在看 npm 页面已经恢复了
npm 'accidentally' removes Stylus package, breaks builds and pipelines
AI 摘要:npm 不慎移除了被广泛使用的 Stylus 库,导致全球开发者构建和 CI/CD 流程中断。移除原因是 Stylus 的一位维护者发布了无关的恶意软件包,导致其账户及关联软件包被禁,Stylus 库也因此受牵连。目前,npm 和 GitHub 正在努力恢复 Stylus,并提供了临时解决方案以帮助开发者通过直接引用 GitHub 仓库或使用 overrides 功能来恢复其项目。
1. 事件总览
• Stylus 库被意外下架: 全球最大的软件注册表 npm 意外地移除了所有版本的 Stylus 库,并替换为一个“安全占位页面”,导致依赖该库的全球构建和 CI/CD 流程中断。
• 开发者与维护者回应: Stylus 开发者 Lei Chen 在 GitHub 和 X(原 Twitter)上声明 Stylus 被 npmjs 意外禁用,并寻求帮助以尽快恢复。
• 广泛的影响: 每周近 300 万次下载的 Stylus 库被下架后,大量依赖它的项目如 typescript-plugin-css-modules、Frappe/ERPNext 和 Angular 12 等的构建相继失败,引发开发者不满和担忧。
• 事件真相揭示: 供应链安全公司 Mend.io 的安全研究员 Tom Abai 调查发现,Stylus 库本身是干净且功能正常的。问题在于 Stylus 的一位维护者“panya”发布了三个无关的恶意软件包(如包含依赖混淆漏洞的 PoC),导致其账户被封禁,进而关联的 Stylus 库也被错误地移除。
• 临时解决方案: 针对 Stylus 库被移除,开发者可采取以下临时措施:
• 在 package.json 的 dependencies 中动态引用 GitHub 上的 Stylus 特定版本(例如:"stylus": "github:stylus/stylus#version-you-need")。
• 使用 npm v8.3.0 及更高版本支持的 overrides 功能来指定 Stylus 版本。
• 在应用上述更改后,需清除 npm 缓存(npm cache clean --force)。
• 维护者建议: Stylus 维护者 Lei Chen 确认 Stylus 不含恶意代码,并指出 npmmirror.com(由阿里巴巴赞助的非营利镜像)已恢复对该库的访问。他建议受影响的公司重新评估 npmjs 与 npm mirror 的关系,并设计更可靠的开发流程。
2. 安全事件分析
• 恶意行为与误伤: 事件起因是 Stylus 维护者之一“panya”发布了恶意软件包,但这些恶意软件包与 Stylus 库本身无关。npm 采取封禁账户并移除所有关联软件包的措施,却无意中“误伤”了无辜且重要的 Stylus 库。
• 官方回应: GitHub Trust & Safety 团队已回复 Stylus 维护者,确认问题是由于一名维护者发布了恶意软件包导致账户被暂停及关联软件包被移除,并表示工程师正在努力恢复 Stylus。
• 事件特殊性: 此次事件是首例由注册表因管理错误而下架整个合法开源项目的重要案例,与此前开发者因争议或抗议而自行撤回库的情况不同。
author Ax Sharma