近日,Github 首席安全官 Mike Hanley 宣布已修复 npm JavaScript 注册表的漏洞(npm 是 JavaScript 运行时环境Node.js 的默认包管理器), 还透露未来将对 npm 包的维护者和管理者实行双因素身份验证 (2FA)。
此前,npm 的漏洞曾导致私有 npm 包的名称泄露,以及恶意攻击者可以在未经授权的情况下更新 npm 包。此次修复的 npm 漏洞主要也是包含这两方面的内容:
- GitHub 公开的 npm 服务日常维护,引发了npmjs 副本服务器上的 npm 包名称数据泄漏。
这个泄漏暴露了私有 npm 包的名称列表,虽然包的内容没有暴露,但是攻击者可以利用这些私有包的名称进行包名混淆和域名抢注攻击。此前我们报导的 NPM 出现 Noblox.js 假包,内置勒索软件和吓人把戏 攻击事件正是出于此漏洞,恶意攻击者提前获取了“noblox.js-proxied” 域名,抢注了“noblox.js-proxy”和“noblox.js-proxies”这两个混淆的域名并发布恶意勒索软件包。
- 逻辑错误导致的越权漏洞:系统正确了验证用户身份,但接着就允许该用户进行超出权限的操作。
该漏洞存在于 npm 软件包的发布过程中,对 npm 软件包发布请求的多个微服务之间不正确的授权检查和数据验证。这个漏洞允许用户将发布某个包的请求授权应用于另一个包,也就是说攻击者只需要获取一次发布请求的授权,就可以发布任意一个 npm 包的新版本。这个漏洞最早可以追溯到 2020 年 9 月,但目前尚未被恶意利用,而且发现的 6 小时后就被修复了。
目前,上述漏洞都已被修复。而出于对 npm 生态的保护,Github 决定对 npm 平台的维护者和管理者强推基于 WebAuthn 的双因素身份验证 (2FA),以保护他们的账户安全。双因素身份验证 2FA 是基于时间、历史长度、实物(信用卡、手机、令牌、指纹)等自然变量 + 特定加密算法组合出的动态密码,而且隔一段时间刷新一次,不容易被获取和破解,相对传统的密码验证会更安全。
Github 会在接下来几周发布关于推行 2FA 的详细计划,目前 2FA 还属于建议但不强制执行的阶段,预计从 npm 2022 年第一季度的第一批顶流软件包开始实行。
来源:oschina 作者:罗奇奇