当前位置:首页 > 技术分析 > 正文内容

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

ruisui883个月前 (01-26)技术分析24

近日,流行软件包管理工具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)是一种解决方案。

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/564.html

标签: 卸载npm包
分享给朋友:

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

基于archlinux的发行版有哪些?

Arch Linux 是一个 Linux 发行版,采用滚动更新的模型,这意味着 Arch Linux 不会定期发布新版本,而是持续接收更新和升级,保持系统与最新软件版本的同步。Arch Linux 以其极简主义、简单性和用户定制为中心的特点而闻名,专注于让用户对其系统配置具有完全控制权。然而,它也以...

Vue3,父组件子组件传值,provide(提供)和inject(注入)传值

父组件向子组件传值父子组件传递数据时,通常使用的是props和emit,父向子传递使用props,子向父传递使用emit。子组件接收3种方式// 1、简单接收 props:["title","isShow"], // 2、接收的同时对数据类型进行限制 props:{...

带你五步学会Vue SSR

作者:liuxuan 前端名狮转发链接:https://mp.weixin.qq.com/s/6K6GUHcLwLG4mzfaYtVMBQ前言SSR大家肯定都不陌生,通过服务端渲染,可以优化SEO抓取,提升首页加载速度等,我在学习SSR的时候,看过很多文章,有些对我有很大的启发作用,有些就只是照搬官...

GitLab-创建分支

描述分支是独立的生产线,是开发过程的一部分。分支的创建涉及以下步骤。创建一个分支步骤1-登录您的GitLab帐户,然后转到“ 项目”部分下的项目。步骤2-要创建分支,请单击“ 存储库”部分下的“ 分支”选项,然后单击“ 新建分支”按钮。步骤3-在“ 新建分支”屏幕中,输入分支的名称,然后单击“ 创建...

使用cgroup限制进程资源

这里使用containerd项目中的cgroup包来实现进程资源限制。先写一个耗费一个CPU并且一秒增加10m内存的测试进程package mainimport ( "fmt" "math/rand" "time")func main() { go f...

内存问题探微

这篇文章是我在公司 TechDay 上分享的内容的文字实录版,本来不想写这么一篇冗长的文章,因为有不少的同学问是否能写一篇相关的文字版,本来没有的也就有了。说起来这是我第二次在 TechDay 上做的分享,四年前第一届 TechDay 不知天高地厚,上去讲了一个《MySQL 最佳实践》,现在想起来那...