NPM 注册表恶作剧导致开发人员无法取消发布程序包

admin 2024年1月5日00:20:21评论27 views字数 2007阅读6分41秒阅读模式
因明显的恶作剧原因,自上周起NPM注册表用户无法取消发布任何公开包。

NPM 是由 GitHub 运行的开源 JavaScript 包仓库,托管着200多万个程序包,由1700多万名开发人员使用。12月29日,一个名为 “everything” 的程序包被发布在注册表中,旨在安装该注册表中的所有其它公开包,从而在注册表中创建了大量依赖,禁止了开发人员在该站点上取消发布的能力,因为其它包所依赖的包无法被取消发布。

这起事件导致开发人员无法取消发布已弃用或实验性程序包,批评人士将此举视作对开源 NPM 系统的滥用。

everything” 背后的开发人员表示未预料到这些后果并已经与NPM和GitHub 联系解决该问题。颇具讽刺意味的是,由于一圈依赖导致该包依赖于自身,这些开发人员自身也无法取消发布 “everything” 包。

在回复一名 GitHub 用户关于该项目目的的提问时,“everything” 贡献者之一 Evan Boehs 写道,“我们只是认为这样做会很有趣。我们未料到会发生这些。”

破坏性 “everything” 包“为表情包”而创建


“everything” 包还附加一份 “README” 文件,它指出,“请不要真的安装它……”。该包中还包含了影片《这个杀手不太冷》加里·奥德曼的表情包图片,展现了奥德曼所饰演角色喊出 “everyone” 这个词的场景。

“everything” 仓库在“关于”部分中提供了网站 “everything.npm.lol” 的一个链接,展示了按照视频游戏《上古卷轴V:天际》表情包安装的众多程序包的动画。尽管有不要安装该程序包的提醒,但从NPM 注册表网站来看,截止到2024年1月3日,“everything”包已下载了224次。

Checkmarx 公司的供应链安全工程团队 Jossef Harush 在博客文章中提到,安装 “everything” 可能会导致拒绝服务。Harush 也将该项目称为 “菜鸟 (troll) 活动”。Boehs 在GitHub 平台的另一份评论中提到,“我想重申我们并不是菜鸟,我们最不济是 NPM 的QA测试人员,最多算是喜剧人和有创造性的码农。”

超过200万 NPM 包掉入“依赖地狱”


GitHub 平台的贡献者 PatrickJS 指出,“eveything”包在整个 NPM 注册表中的席卷之势暴露了 NPM 开源系统中的多个缺陷。

他在 GitHub 平台上提到,“需要澄清的是,这是 NPM 取消发布策略的一个极端案例,该策略不考虑 “*”。”PatrickJS 指出该星标表示的是一个程序包依赖于另外一个程序包的任一和所有版本。PatrickJS 建议,如果包依赖于“星标版本”,则GitHub 应允许开发人员取消报发布该包或者完全禁止使用 “*”。

Boehs 指出,“在讨论这一失败情况时,还需要注意另外一件事,我们认为它可用于更多恶意目的。比如,如有有人不小心上传了敏感信息,那么恶意人员可能会创建程序包获得这些信息。以这种方式捕获到这种情况,要比在野利用后发现要好。”其他开发人员在 “everything” 仓库的 issue 板块表达了挫折和不满。

作为一名用户,Matt Lucock 抨击了该团队的“莽撞疏忽”并就该项目造成的后果指责NPM,“你自我迷惑,认为该问题并非你滥用了该注册表,而是该 npm 的取消发布规则未能阻止有人以这种方式滥用注册表。”他提到取消发布规则对于“保护注册表的完整性”而言是必要的。

劳伦斯柏克利国家实验室的一名数据中心工程师 Nicolas Ventura 提到,自己一个弃用的程序包受该依赖问题影响,并指出虽然该项目“有趣且幽默”,但最终引发了不必要的问题。Ventura 写道,“该项目当然就像垃圾邮件,数千个子包不应当发布到官方 NPM 仓库,且触发了混乱。NPM 竟然没有标记或拦截任何包进行发布,因为其它很多网站如社交媒体都会有发布限制。”

“everything”包拥有3000多个子包,在本文成稿之时仍然在NPM注册表中发布,尽管 PatrickJS 报道称GitHub 自周二晚就一直着手修复。

并非第一个攻破 NPM 的依赖系统


Lucock 和 Harush 注意到,曾有发布NPM包的开发人员因创建注册表范围内的依赖而引起骚动的案例。

2012年,“hoarders”程序包被其创建人员描述为 “node.js 最完整的 ‘工具摸彩游戏”,为在 NPM 注册表中发布的所有2万个模块创建了依赖。该项目遭到抵制,后续被修改为无需修改它所安装的工具的直接依赖就能工作。

2023年1月,名为 “no-one-left-behind” 的一个程序包被创建且NPM注册表的其它所有包都依赖于它。该包被NPM标记为包含“恶意代码”且被删除,尽管如此,超过3.3万个子包仍然存在,引发了一些问题。

GitHub 尚未就其取消发布策略和如何处理 “everything” 置评。

原文始发于微信公众号(代码卫士):NPM 注册表恶作剧导致开发人员无法取消发布程序包

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月5日00:20:21
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   NPM 注册表恶作剧导致开发人员无法取消发布程序包https://cn-sec.com/archives/2365426.html

发表评论

匿名网友 填写信息