比Log4j漏洞还可怕?NPM代码库被开发者“投毒”

近日,流行软件包管理工具NPM的两个开源库“color”和“faker”被其开发者“投毒”。这些库的开发者故意引入了一个无限循环,破坏了数千个依赖“color”和“faker”代码库的项目。这两个代码库的用户在更新版本后发现程序开始在控制台疯狂输出乱码!

“color”库在npm上每周下载量高达2000万,有近19000项目依靠它。而“faker”在npm上每周下载量也超过280万次,拥有超过2500名志愿者。

昨天,亚马逊云开发工具包(aws-cdk)等流行开源项目的用户发现他们的应用程序在控制台上输出乱码消息时感到震惊。

这些消息包括文本“LIBERTY LIBERTY LIBERTY”,后跟一系列非ASCII字符:

“勒索警告”还是“恶作剧”?

最初,用户怀疑这些项目使用的库“colors”和“faker”受到了破坏,类似于coa、rc和ua-parser-js库去年被恶意行为者劫持的情况。

但事实上,是color和faker库的开发者故意提交了导致重大错误的代码。

这两个库的开发者名叫Marak Squires,昨天在版本v1.4.44-liberty-2中向colors.js库中添加了一个“新的美国国旗模块”,然后他将其推送到了GitHub和npm(下图)。

代码中引入的无限循环将无限期地持续运行;任何使用“color”库的应用程序,在控制台上都会无休止地输出非ASCII字符乱码。

同样,faker的破坏版本“6.6.6”已发布到GitHub和npm。

Marak的恶作剧似乎是一种报复行为,针对大型公司和开源项目的商业消费者。后两者广泛依赖开源软件和社区,但据Marak称,“他们从不回馈(开源)社区”。

2020年11月,Marak曾警告称,他将不再通过“免费工作”来支持大公司,商业实体应考虑分叉项目或以每年“六位数”的工资来补偿开发人员。

“尊敬的,我不再用我的免费工作来支持财富500强(和其他小型公司)。没有什么可说的了,”Marak之前写道:“以此为契机,向我发送一份每年六位数的合同,或者分叉该项目并让其他人负责。”

本周一,GitHub上的“faker”库的README页面也被Marak加上了一句“Aaron Swartz到底发生了什么?”

Marak所说的Swartz是一位美国程序员、企业家和著名的黑客活动家,他在一场官司之后自杀了。

官司的起因是Swartz从麻省理工校园网上的JSTOR数据库下载了数百万篇期刊文章,向全球公开免费提供。据称下载过程中还通过反复轮换他的IP和MAC地址来绕过JSTOR设置的技术障碍。

结果,Swartz因违反《计算机欺诈和滥用法》并面临刑事指控,最高可处以35年的监禁,结果Swartz不堪压力自杀身亡。

比Log4j漏洞还可怕?留神开源“自杀式投毒”

如果说Log4j漏洞依然属于“疏忽”范畴,那么Marak在自己负责的开源项目中“下毒”的性质则要“恶劣”和“可怕”得多,同时也引发了业界的激烈争论。

开源软件社区的一些成员赞扬了Marak的行为,但更多人则对此感到震惊。

“显然,‘colors.js’的作者因为没有得到报酬而生气……所以他决定每次加载他的代码库时都打印美国国旗,”一位用户在推特上写道。

安全专家VessOnSecurity则认为该行为非常“不负责任”:

“如果开源软件的开发者对商业用户感到不满,可以选择不要发布免费代码。通过破坏自己开发的被广为使用的工具,开源开发者不仅会伤害大企业,还会伤害任何使用它的人。这会导致开源软件的用户不(敢)更新,开源情怀就此破灭。”

Log4j漏洞一波未平

据报道,GitHub已暂停Marak的帐户,并将faker.js软件包恢复到上一个版本。

Marak本人在发推抱怨Github账户被封导致他无法访问自己的超过100个公共和私有项目:

值得注意的是,“销户”是GitHub对开发者最严厉的惩罚之一,前不久GitHub刚对Log4j漏洞PoC的首个披露者给与了类似惩罚(编者:也有人认为是xxx公司主动删除)。

安全专家指出,最近引发全球恐慌的Log4j漏洞披露一波未平,Marak的“疯狂”举动距离无疑将惊魂未定的开源软件用户面临的安全威胁和压力推向了一个新的波峰。

Log4j漏洞之后,人们开始担心大型企业如何习惯于“利用”开源;不停地消耗它,但没有给予足够的回报来支持那些放弃空闲时间来维持这些关键项目的无偿志愿者。这种不对等的价值交换最终导致了Marak的“极端行为”,同时也表明开源可持续发展问题已经到了必须要给个说法或方案的关键时刻。

最后,安全专家建议“colors”和“faker”NPM项目的用户确保他们没有使用不安全的版本。降级到较早版本的color库(例如1.4.0)和faker库(例如5.5.3)是一种解决方案。

前一篇一文告诉你什么是公钥基础设施(PKI)
后一篇微软:“白屏死机”不算漏洞