GitHub周一(11/15)修补了Node.js组件管理器Npm的两个安全漏洞,其一是在供第三方使用的复制服务器上(Replica Server)暴露了私有组件的名称,其二则是一个相对严重的安全漏洞,允许黑客更新任何Npm组件。
GitHub首席安全官Mike Hanley说明,第一个漏洞起因于例行性的维护任务,在维护该公开的复制Npm服务的数据库时,所创建的记录暴露了私有组件的名称,因而允许用户可自公开变更消息中查看私有组件的名称,但并无法访问组件的内容。
只要是在今年10月20日以前创建的私有组件,名字都已经曝光,不过,曝光时间仅限于10月21日至10月29日。GitHub已在10月29日移除了复制数据库中的所有私有组件名称。但GitHub仍警告,在这期间访问该数据库的用户,也许已经复制了这些名称。
为了避免类似的错误再度发生,GitHub变更了配置该公共复制数据库的方式,以确保未来的程序不会再产生内置私有组件名称的记录。
第二个漏洞则是来自于GitHub的漏洞挖掘项目,该由外部研究人员发现的安全漏洞将允许黑客以一个不具备适当权限的账号,出版任何Npm组件的新版本,由于事态严重,使得GitHub团队在收到报告的6小时内便将它修补。
Hanley解释,该漏洞是因为各种微服务在处理对Npm注册表的请求时,其授权检查与资料验证不一致所造成的。在该架构中,授权服务是根据所请求URL路径上传递的资料,正确地验证了用户对封包的权限,然而,在底层负责更新注册资料以判断要出版哪个封包的服务,却是依据所上传的封包文件内容。
这样一来,当请求出版一个封包的新版本时,将会取得一个封包的授权,但实际上却可执行一个完全不同且可能未经授权的封包。GitHub已让授权及发布服务完成一致,解决了该漏洞。
目前GitHub只能确定该漏洞自2020年9月以来并未被开采,而无法得知更早之前是否曾遭受过攻击。