Npm left-pad事件

2016年3月22日,软件工程师阿泽尔·科丘卢()删除了他在npm(JavaScript包管理器)上发布的left-pad包。Kik Interactive公司希望让科丘卢更改kik包的名称,但二者发生争执。后npm公司强行变更了kik包的所有权。作为回应,科丘卢删除了自己开发的left-pad等包 。此举导致成千上万依赖left-pad的项目无法构建或安装,包括Babel转译器和React网页框架。Facebook、PayPal、Netflix、Spotify在内的许多公司都在其软件产品中使用了left-pad,因此造成了不少问题。

该包从npm移除数小时后,npm公司手动恢复了该包。随后,npm修改了平台相关政策。该事件引起了媒体的关注,并在内引发了反响。人们讨论通过软件破坏以推动社会正义的问题,并关注模块化编程中供应链攻击的可能性。

背景
left-pad为自由开源的JavaScript包。发布者阿泽尔·科丘卢()是加利福尼亚州奥克兰的独立软件工程师。该包通过循环,在字符串前反复添加指定字符,使之长度符合要求。left-pad被认为极其简单,科丘卢编写的最终版本中仅包含11行代码(不计空行)。

科丘卢在npm上发布了left-pad,npm是Node.js的默认包管理器,Node.js是JavaScript运行环境。当时,left-pad鲜为人知,但其使用却极为广泛:其作为依赖被数千个软件项目采用,被移除之前下载量超过1500万次。一些JavaScript中的重要项目依赖于left-pad才能工作:转译器Babel,支持向后兼容JavaScript代码;模块打包系统Webpack;网页框架React和React Native,分别广泛用于网站和移动应用的开发。

除left-pad外,科丘卢在npm上还拥有kik包,这是允许开发者为其项目设置模板的工具。开发了即时通讯软件Kik Messenger的加拿大公司Kik Interactive认为,科丘卢占有了他们的公司名。2016年3月11日,Kik聘请的专利联系人联系了科丘卢,要求其放弃对kik包的控制权,理由是公司拥有「Kik」商标。他在一封邮件中写道:

科丘卢很快回应,拒绝更改项目名称,并表示:

Kik公司后来再次恳求科丘卢改名,因此科丘卢要求3万美元赔偿,理由是「为了放弃我心爱的项目,忍受一群公司混蛋的麻烦」。2016年3月18日,npm公司首席执行官艾萨克·Z·施吕特(Isaac Z. Schlueter)向Kik Interactive和科丘卢发信,表示kik包的所有权将被手动转交给Kik Interactive。

移除
科丘卢对npm公司的决定表示失望,并声明自己不再愿意继续参与该平台。随后,施吕特向他提供了删除命令,用以删除他所有的273个模块。科丘卢在2016年3月22日执行了这个指令,删除了所有他之前发布的包。left-pad被撤下,不再能在npm上公开访问,但项目和代码仍然可以在GitHub上找到。

软件包被删除后,任何尝试构建或安装依赖left-pad的JavaScript项目(包括Babel和Webpack)都会遇到404错误,致使操作失败。Meta Platforms、PayPal、Netflix、Spotify等知名软件科技公司都在使用这个包。就连Kik Interactive的开发者也因这个包被删除而遇到构建问题。

删除后不久,其他开发者开始在项目的Git事务跟踪管理系统上发布大量反馈、评论、应急修复方案。

删除包一个小时后,科丘卢在Medium上发布文章《我刚刚解放了我的模块》(),解释了他删除软件项目的原因,表示这是为了抗议企业利益对自由和开源软件的侵蚀。

善后
Babel等开源项目的维护者迅速发布了热修复,移除了科丘卢删除的依赖项。npm社群用户也迅速发布了多个被删除的同名包,以防止恶意攻击。例如,另一位开发者重新创建了1.0.0版本的left-pad包。但由于科丘卢发布的是0.0.3版本,用户仍然遇到了问题。

大约两个小时后,npm从备份中手动恢复了原始的0.0.3版本,回退了删除操作。npm的首席技术官劳里·沃斯()写道,尽管公司内部争论这是否为「正确的决定」,但他们还是「选择了大多数人的需求」。

后续
反响
npm的社区经理阿什莉·威廉斯()代表平台就事件引起的问题向用户道歉,并表示平台「未能保护社区」。Kik Interactive也为此事道歉,公司消息部门负责人迈克·罗伯茨()在Medium上公开了与科丘卢的邮件往来内容,并认为自己的交流是「一次礼貌的请求」。罗伯茨写道,他们最初联系科丘卢,是希望在npm上发布与科丘卢同名的开源包。科丘卢表示,他为干扰他人的工作感到抱歉,但他认为这样做「对社区长期利益有益」。

Twitter、GitHub、Reddit、Hacker News等平台上的用户对此事有着不同的反应,许多人认为这一事件曾短暂地「让互联网瘫痪」。不少人评价了JavaScript开发中「快速迭代、破坏一切」的文化、开源软件的不可预测性、对模块化编程的过度依赖。用户们还对npm强制将科丘卢的包转交给Kik Interactive的决定表示失望,认为这是法律威胁所迫。

影响
npm改变了其关于已发布包删除的政策,规定如果包发布超过24小时且至少有一个项目将其作为依赖,包将不能被删除。

该事件表明,npm包的中断可能会导致供应链攻击。除了备受关注的left-pad外,不少人迅速接管了其他被删除的包并注入未知代码。npm发布了新政策,以防止在类似纠纷中发生恶意接管。然而,该事件仍被作为过度依赖外部贡献者,导致软件产品攻击面增大的例证。科丘卢通过故意自我破坏left-pad来引发社会问题的做法,也被认为是npm等平台上发布抗议软件()的前奏。

参见
*
*
*

脚注
参考资料

评论 (0)

  • 还没有评论,来抢沙发吧。