【导读】程序突然乱码,开发者紧急「修复」!然而……
这两天,一些开发者感觉有点懵……
一觉醒来发现,自己程序跑出来的全都是「乱码」。
说起来,这些开发者的共同点就是都使用了开源库「colors」和「faker」。
而且这两个库相当受欢迎!
仅仅在npm上,colors库每周的下载量就超过2000万次,并且有将近19000个项目正在使用。
faker在npm上每周的下载量超过280万次,有超过2500个项目使用。
甚至连亚马逊的云计算开发工具包(aws-cdk)也用上了。
最初,用户怀疑这些项目所使用的库「colors」和「faker」被入侵,类似于去年coa、rc和ua-parser-js库被恶意分子劫持的情况。
看到各种反馈之后,开发者也赶紧发文表示已经在努力「修复」了。
但事实证明,故事并没有这么简单。
事件的开端要从这位名为「Marak Squires」的开发者说起。近期,Marak在「colors」(GitHub上又名colors.js)加入了v1.4.44-liberty-2,并且发布了「faker」(GitHub上又名faker.js)的6.6.6版本。稍微对西方有所了解的朋友们很容易就能注意到,这个「666」有些不太对劲啊。而Marak所做的,正是引入了一个无限循环的bug,让数以千计的依赖「color」和「faker」的项目直接崩溃。这些信息包括文本「LIBERTY LIBERTY LIBERTY」,以及在后面跟着的一大串非ASCII字符。当然,这又是另一个非常有意思的故事了,感兴趣的朋友可以自己搜一下。然而,时间一分一秒地过去了,自己的程序跑不了,项目的开发者也迟迟没有提交解决方案。很快就有人发现,只要回滚到之前的1.4.0版本,问题就解决了。由此也就可以推断,这个bug很有可能就来自于最新提交的「v1.4.44-liberty-2」。通过查看项目的历史发现,Marak在v1.4.44-liberty-2版本的colors.js库中添加了一个「新的美国国旗模块」,并将其推送到GitHub和npm。就新的在代码中,有一段无限循环,会让所有使用「colors」的程序在控制台无休止地打印各种非ASCII字符序列。对于「faker」,Marak除了炸了自己程序之外,还修改了GitHub repo的README页面。Marak还提到了一个人:亚伦·斯沃茨。写到:「Aaron Swartz到底发生了什么?」斯沃茨是一名美国程序员、企业家和著名的黑客活动家,在一场法律诉讼后「自杀」身亡。为了使所有人都能自由获取信息,这位黑客从麻省理工学院校园网上的JSTOR数据库下载了数百万篇期刊文章,据称他通过反复旋转自己的IP和MAC地址来绕过JSTOR和麻省理工学院设置的技术封锁。此前,在2020年11月,Marak就曾警告说,他将不再用他的「免费工作」来支持大公司了,而这些企业应该考虑用每年「六位数」的工资来补偿。「恕我直言,我将不再用我的免费工作来支持财富500强(和其他较小规模的公司)。」「你们可以把这当作一个机会,给我发一份六位数的年薪合同,或者把这个项目fork之后,让别人来做。」于是,整件事的缘由逐渐明晰了起来,Marak似乎是在报复那些大型企业以及拿着开源项目赚钱的开发者。他认为,这些人不仅大量地使用开源社区的免费软件,但是对社区又毫无贡献。对Marak的这波迷之操作,开源社区一部分开发者表示理解,另一部分则直接「口吐芬芳芳」。「显然,『colors.js』的作者为没有得到报酬而生气......。所以他决定在每次加载他的库时打印美国国旗......。」信息安全专家VessOnSecurity称这种行为是「真**的不负责任」。「如果你对企业免费使用你的免费代码有意见,就不要发布免费代码。通过破坏你自己被开发者广泛使用的项目,你不仅伤害了大企业,也伤害了所有在使用它的人。」但是有人则认为:「将代码发布到他们自己的库中,不需要对任何事情负责。如果你不同意我的观点,那么请阅读许可证中的实际法律条文,它没有给出任何保证。如果是不负责任的,那又怎样,他们不需要负责任。」而GitHub一看,这个Marak怎么能瞎搞自己的项目,封了吧!NPM已经恢复到faker.js包的前一个版本,Github已经暂停了我对所有公共和私人项目的访问。我有100多个项目。
软件工程师Sergio Gómez对此表示非常不理解:「从GitHub上删除自己的代码是违反他们的服务条款的?WTF? 这是一种绑架行为。」Marak的「删库跑路」,不由得让我们想起最近闹得沸沸扬扬的「Log4j事件」。据火线安全不完全统计,仅在Github上,就有60644个开源项目发布的321094软件包存在风险,这一漏洞可以说是影响了互联网上70%以上企业系统的正常运转。由于Java应用程序通常会记录各种各样的事件,例如用户发送和接收的消息,或者系统错误的详细信息,因此该漏洞可以通过多种方式触发。很快,Log4shell漏洞开始出现大规模的恶意利用。随着越来越多的问题被发现,Log4j的开发者们也不得不开启了假期无偿加班模式,为该项目打补丁。虽然已经在「不眠不休地进行抢救:修复、文档、CVE、回复咨询了」,然而,依然有一些bug赏金猎人在对Log4j维护者进行围追堵截。Log4j这件事也让更多人开始关注大企业是如何「压榨」开源的问题。大量的网站、软件和应用程序依靠开源开发者来创造基本的工具和组件,他们不断地消费,却没有给予足够的回报。而这些「孜孜不倦」地修复着安全问题的开发者们,不仅放弃了自己的闲暇时间,也没有得到任何资金的支持。网友对此评论道:「对color.js/faker.js作者破坏他们自己的软件包的反应,恰好也说明了有多少企业开发者认为他们在道德上有权使用开源开发者的无偿劳动,而不用做出任何回报。」https://www.bleepingcomputer.com/news/security/dev-corrupts-npm-libs-colors-and-faker-breaking-thousands-of-apps/