中科天齐软件安全中心
- 关注
安全研究人员发现了一种npm计时攻击,该攻击揭示了私有软件包的名称,因此威胁参与者可以公开发布恶意克隆,诱骗开发人员使用它们。
这种攻击依赖于搜索私有包时返回的“404 Not Found”错误与在存储库中搜索不存在的包时返回的时间差。
虽然响应时间差只有几百毫秒,但这足以确定是否存在执行包模拟攻击的私有包。
组织为内部项目和某些软件产品创建私有包,以将开发团队陷入拼写错误攻击的风险降至最低,并将代码和功能保密。
对使用私有包的企业来说,保持私有包的私有是至关重要的。否则,攻击者可以创建克隆或类型化的软件包,黑客可以欺骗企业的员工下载并在软件项目中使用。
如果开发人员和内部软件测试人员没有发现妥协,产品可能会到达最终用户,从而影响供应链安全。
Aqua Security的威胁研究团队在一份报告中表示,攻击者越来越关注供应链攻击,2021年相关活动增长300%。
定时攻击详细信息
npm包含一个注册表API,允许用户下载现有包,检查包的存在,并接收特定范围内所有包的信息。
当使用npm注册表下载一个不存在或设置为private的包时,网站将返回一个404 HTTP错误码,表示无法找到包。
404 在npm上找不到API请求的响应
Aqua Security通过使用这个API检查他们在npm上创建的私有包是否存在,并将404 HTTP错误的响应时间与API检查不存在包的响应时间进行比较,从而发现了npm定时攻击。
研究人员通过五次检查是否存在一个包的名称来执行他们的测试。他们发现npm响应请求所需的平均时间有一个可测量的差异,这使他们能够辨别一个包是私有的还是不存在的。
更具体地说,私有包存在时的平均响应时间为648毫秒,而私有包不存在时的平均响应时间仅为101毫秒
研究人员认为这是由于npm的API的缓存机制和体系结构引入了这种信息泄露的潜力。
黑客可以尝试“盲”字典攻击,或者在目标组织的公共包中查找命名模式和组合,以获得可能的私有包名称。
此外,在线信息包含历史包信息,因此攻击者可以使用它们来确定哪些公共包可能已变为私有。
在后一种情况下,克隆软件包的潜在危害可能非常隐蔽,因为曾经是公共的软件包的旧副本可能仍保留足够的功能,以便在使用它的软件产品中按预期工作。
GitHub 不会修复此问题
Aqua Security在2022年3月8日向GitHub披露了该漏洞,但在3月25日被告知,由于架构限制,该漏洞将无法修复。
GitHub告诉Aqua Security:“由于这些架构上的限制,我们无法阻止定时攻击,因为它们决定了npm上是否存在特定的私有包。”
研究人员说,组织可以通过经常搜索npm来发现可疑的包,这些包用重复或类似的名称欺骗了他们的私有包,从而采取预防措施。
此外,由于npm不允许在公共存储库上上传同名包,组织可以创建公共包,将私有包伪装成占位符。
参读链接:
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)