Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >下载量和Vue一样大的开源软件被作者恶意破坏,数千款应用受到牵连

下载量和Vue一样大的开源软件被作者恶意破坏,数千款应用受到牵连

作者头像
深度学习与Python
发布于 2022-03-01 03:50:20
发布于 2022-03-01 03:50:20
5170
举报

编译 | 核子可乐、Tina

开源的黑暗面:faker.js 到底发生了什么?

流行开源包“colors”与“faker”的用户们最近刚刚遭遇一场意外,毫无征兆的破坏导致应用程序在使用这些包后开始输出无法理解的乱码数据。这背后的原因竟然是开源软件包的作者 Marak Squires 故意引入了一个无限循环,让数千个依赖于“colors”与“faker”包的应用程序全面失控。

colors.js 是一个用于处理颜色的 JavaScript 库,而 faker.js 是一个用于生成假数据的 JavaScript 库。在构建和测试应用程序时,假数据很有用,faker.js 可以为各个领域生成虚假数据,包括地址、商业、公司、日期、财务、图像或名称。

这两个包特别受开发者欢迎,其中单是 colors 包在 npm 上就拥有每周 2000 多万次下载量,依赖于它的项目近 19000 个。此外,faker 在 npm 上每周下载量也超过 280 万次,相关项目超 2500 个,faker 的受欢迎程度可媲美于 Vue。因为这些开源软件的应用特别广泛,所以这个事件影响也特别深远。

开源革命,还是开源暴动?

这两套高人气开源 npm 包“colors”(在 GitHub 上名为 colors.js)与“faker”(在 GitHub 上名为 faker.js)背后的开发人员故意在代码中引入了错误内容,相应提交进一步对依赖这些包的成千上万应用程序造成影响。

就在昨天,Amazon 云开发工具包(aws-cdk)等开源项目用户,突然发现自己的应用程序开始在控制台上疯狂输出乱码消息。

这些消息中包含大量“LIBERTY LIBERTY LIBERTY”(自由)字样,之后还跑着一大堆非 ASCII 字符:

面对“faker”与“colors”项目倾泻出的垃圾数据,用户感到震惊错愕 (GitHub)

最初,用户怀疑这些项目使用的“colors”与“faker”包遭到了恶意入侵,类似于去年 coa、rc 和 ua-parser-js 等包被攻击者劫持的状况。但事实证明,令 colors 与 faker 陷入混乱的其实是由合法开发者故意提交的错误代码。

开发者 Marak Squires 向 colors.js 包的 v1.4.44-liberty-2 版本中添加了“新的美国国旗模块”,此项变更随后被推送至 GitHub 与 npm。

colors.js 恶作剧提交出自“Marak”之手 (GitHub)

新代码中引入的无限循环会没完没了地运行,任何使用“colors”的应用程序都会在控制台上无休止地输出由非 ASCII 字符序列组成的乱码。

同样的,faker 的恶作剧版本“6.6.6”也被发布到了 GitHub 和 npm 之上。这位开发者还语带嘲讽地表示,“我们注意到 v1.4.44-liberty-2 版本的 colors 中存在一项 Zalgo bug。”“我们正在努力解决这个问题,请大家静待解决方案的发布。”所谓 Zalgo 文本,指的就是因某些故障引发的非 ASCII 字符。

这位开发者的举动似乎是在故意报复,希望反抗那些长期依赖于免费和社区支持软件、但却从不向社区做出回馈的大型企业和其他利用开源项目进行商业化盈利的用户。

2020 年 11 月,Marak 就已经警告称不会再“无偿工作”来支持那些商业巨头,并强调这些业务实体面前只有两条路:要么选择项目分叉,要么以每年“六位数”的薪酬补偿开源开发人员。

这位开发者之前曾写道,“诸位,我不会再用自己的无偿工作来支持那些财富五百强(以及其他小型公司)了。言尽于此。”“所以现在只有两个选择,要么给我发一份年薪六位数的用工合同,要么赶紧分叉项目、找其他人接手。”

有趣的是,我们发现“faker”项目在 GitHub repo 上的 README 页面(https://github.com/marak/Faker.js/)也被 Marak 改掉了,里面赫然出现了“Aaron Swartz 到底经历了什么?”的字样。

Swartz 是一位杰出的开发人员,他帮助建立了 Creative Commons、RSS 和 Reddit。他的贡献对几乎所有的 Web 开发人员都产生了深远的影响。2013 年,年仅 26 岁的 Swartz 在一场法律纠纷中自杀身亡。

为了让所有人都能免费访问信息,这位黑客主义者从麻省理工学院的校园网络 JSTOR 数据库中下载到数百万篇期刊文章。据称,他采用的方法是反复轮换自己的 IP 与 MAC 地址以绕过校方和 JSTOR 设置的技术屏蔽方案。但此番举动也导致 Swartz 面对违反《计算机欺诈与滥用法》的指控,一旦罪名成立,他最高可能被判处 35 年监禁。

事件引发轩然大波

Marak 的大胆举动旋即引发轩然大波,各界纷纷就此事发声。

部分开源软件社区成员赞扬了这位开发者的勇敢行为,但也有人对他的过激举动表示震惊。一位用户在推文中写道,“很明显,colors.js 的作者因为拿不到报酬而抓狂……所以他决定每当有用户加载他的包时都输出一面美国国旗……这是什么脑回路?”

也有人觉得这是“又一个开源开发者造成的流氓案件”,信息安全厂商 VessOnSecurity 则公开指责此举“不负责任”,并强调:“如果你不想有人用免费代码组织商业业务,那别发布这类代码不就好了?这种无差别打击的行为伤害到的不止是大企业,更是每一位使用开源代码的用户。此类行径只会打击用户的版本更新热情,让他们在每次升级时都提心吊胆。”

根据相关报道,GitHub 已经冻结了这位开发者的账户,而群众们对此也是议论纷纷:

NPM 已经将 faker.js 包回滚至先前版本,GitHub 则暂停了我对所有公共及私有项目的访问权限。那可是上百个项目,现在都访问不了了。#AaronSwartz --@marak

软件工程师 Sergio Gómez 回应称,“删改自己的代码也违反到 GitHub 的服务条款了?这是赤裸裸的绑架!我们最好做好分散托管软件源代码的准备。”

另一位用户也发布推文称,“不知道究竟是怎么回事,但我自己所有的项目都托管在 GitLab 的私有实例上,以免遇上类似的状况。永远不要相信任何互联网服务商。”

一位名叫 Piero 的开发者则指出,“Marak 搞乱了 faker 和 colors、影响到无数项目,难道还指望着自己能不受一点牵连?”

需要提醒大家一点,Marak 的此次过激行为发生在不久前影响巨大的 Log4j 漏洞事件之后。作为一套重量级开源库,Log4j 在不同企业及商业实体开发的各类 Java 应用程序当中都有广泛使用。而 Log4shell 漏洞的曝光引发越来越多 CVE,不少开源维护者不得不在休假期间无偿帮助修复这些免费项目。

于是开源业界开始普遍担忧,认为大企业们已经习惯于“压榨”开源成果、不停消耗,但却没有给予足够的回报来支持这些志愿放弃空闲时间来维持关键项目的贡献者。面对网民和 Bug 赏金猎人们的指责之词,也有人愤然回击,强调 Log4j 的维护者们“已经在夜以继日地构建缓解方案,包括修复、撰写文档、提交 CVE 以及回复质询等等。”

有用户在推文中写道,“对于此次 colors.js/faker.js 作者破坏自有软件包的回应,恰恰说明很多企业开发者认为自己在道德上有权无偿享用开源开发者的劳动成果、且无需给出任何回报。”“虽然免费开源软件运动及其目标值得称赞,但它最终让许多非常有才华的人幻想破灭且变得贫穷,因为开源实际上并不是一种可行的商业模式。”

至于开源软件生态到底能不能长久存续,恐怕只有时间能给出答案。

与此同时,这里要提醒 colors 与 faker 两大 npm 项目用户务必使用安全的包版本。比较稳妥的方法是降级至上个版本的 colors(例如 1.4.0)与 faker(例如 5.5.3)。

参考链接:

https://www.bleepingcomputer.com/news/security/dev-corrupts-npm-libs-colors-and-faker-breaking-thousands-of-apps/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 InfoQ 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【CSS】220-你可能理解错了background-position
其效果如下图所示,注意图片平铺是从 padding-box 开始的,另外, border 后面也是有图片的。
pingan8787
2019/07/23
5590
【CSS】220-你可能理解错了background-position
基于HTML+CSS+JavaScript大学生静态后台管理7个页面(带JS商品删除)
✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (1000套) 】 🧡 程序员有趣的告白方式:【💌HTML七夕情人节表白网页制作 (110套) 】 🌎超炫酷的Echarts大屏可视化源码:【🔰 echarts大屏展示大数据平台可视化(150套) 】 🎁 免费且实用的WEB前端学习指南: 【📂web前端零基础到高级学习视频教程 120G干货分享】 🥇 关于作者: 历任研发工程师,技
IT司马青衫
2022/08/16
3.9K0
基于HTML+CSS+JavaScript大学生静态后台管理7个页面(带JS商品删除)
三种方法实现CSS三栏布局
本文会分别介绍三种CSS实现三栏布局的方法,可在浏览器中打开查看效果。
前端林子
2018/10/06
4K1
三种方法实现CSS三栏布局
【效果高能】你不知道的 Animation 动画技巧
在大多数需求中,css3 的 transition / animation 都能满足我们的需求,并且相对于 js 实现,可以大大提升我们的开发效率,降低开发成本。
一只图雀
2020/11/03
1.7K0
【效果高能】你不知道的 Animation 动画技巧
background-position 用法详细介绍
http://www.cnblogs.com/huazaizai/archive/2010/11/03/1867907.html
bear_fish
2018/09/19
9600
background-position 用法详细介绍
圣杯布局、双飞翼布局、Flex布局和绝对定位布局的几种经典布局的具体实现示例
题目要求:针对如下DOM结构,编写CSS,实现三栏水平布局,其中left、right分别位于左右两侧,left宽度为200px,right宽度为300px,main处在中间,宽度自适应。 要求:允许增加额外的DOM节点,但不能修改现有节点顺序。
全栈程序员站长
2022/09/07
1.2K0
HTML 实现仿 Windows 桌面主题特效
1.CSDN资源下载:https://download.csdn.net/download/qq_44273429/85524325 2.GitHub 地址:https://github.com/wanghao221/moyu
海拥
2022/06/05
3.4K0
HTML 实现仿 Windows 桌面主题特效
用jQuery 动画函数 animate 模拟豌豆发射
先上图。 Paste_Image.png 动态效果: pea.gif 豌豆射手,草坪还有子弹都是现成的图片,本文主要讲解jQuery的animate函数的基本用法。 1. jQuery是库还是框架?
剽悍一小兔
2018/05/17
1.5K0
奇技淫巧——CSS 实现波浪效果
因为实现波浪的曲线需要借助贝塞尔曲线。 而使用纯 CSS 的方式,实现贝塞尔曲线,额,暂时是没有很好的方法。 当然,借助其他力量(SVG、CANVAS),是可以很轻松的完成所谓的波浪效果的。
Javanx
2019/09/04
9650
奇技淫巧——CSS 实现波浪效果
布局
已搞完,代码下面。。。 这里的代码的核心我之后会发 <!--<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style type="text/css"> *{padding: 0px;margin: 0px;} /*要显示出高宽才能看得见啊并且颜色啊,不然默认白的啊*/ .q{height: 500px;width: 100%;background: yell
贵哥的编程之路
2020/10/28
5610
布局
五. css 布局之 position(定位)
包含块( containing block ) 正常情况下: 包含块就是离当前元素最近的祖先块元素,
小海怪的互联网
2020/10/26
2.3K0
圣杯布局与双飞翼布局
上一篇文章介绍了三种方法实现CSS三栏布局,本文则在此基础上,进一步介绍常用的圣杯布局与双飞翼布局。
前端林子
2018/10/06
3.5K3
圣杯布局与双飞翼布局
JQuery实现仿sina新浪微博新鲜事滚动
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档<
欢醉
2018/01/22
1.6K0
JQuery实现仿sina新浪微博新鲜事滚动
css3(animate)
1.animate //----------------------------------- <!--复合属性。检索或设置对象所应用的动画特效--> <' animation-name '>: 检索或设置对象所应用的动画名称 <' animation-duration '>: 检索或设置对象动画的持续时间 <' animation-timing-function '>: 检索或设置对象动画的过渡类型 <' animation-delay '>: 检索或设置对象动画延迟的时间 <' animat
天天_哥
2018/09/29
1.2K0
前端面试CSS「建议收藏」
代表内联样式,如style=”xxx”,权值为 1000; 代表 ID 选择器,如#content,权值为 100; 代表类、伪类和属性选择器,如.content、:hover、[attribute],权值为 10; 代表元素选择器和伪元素选择器,如div、p,权值为 1。
全栈程序员站长
2022/08/04
3030
面试必考点:前端布局知识
这里所要介绍的布局知识主要是在解决三列布局模式而出现的几种布局解法,其中包含了经典的圣杯布局,双飞翼布局,绝对定位的布局方式,还包含2009年W3C所提出的Flex布局方式和以CSS3所带来的calc计算函数来解决三列布局的方式。
用户1462769
2019/10/12
1.1K0
CSS布局(一)
只需要让header,footer充满整个屏幕,header的内容区、foooter的内容区,content设置一样的宽度,然后都设置 margin: 0 auto实现居中即可。
赤蓝紫
2023/03/11
1.4K0
CSS布局(一)
HTML5+CSS3学习总结(完结)
万维网的核心语言、标准通用标记语言下的一个应用超文本标记语言(HTML)的第五次重大修改,作为HTML语言,具有新的元素、属性和行为。
全栈程序员站长
2022/07/25
2.5K0
HTML5+CSS3学习总结(完结)
【前端攻略--HTML/CSS】这是你需要的transform学习教程
transition语法格式:transition: property duration timing-function delay;
野原测试开发
2019/07/10
1K0
【CSS】盒子模型外边距 ③ ( 插入图片 | 插入图片位置移动 - 修改外边距 | 背景图片 | 背景图片移动位置 - 修改背景位置 background-position )
文章目录 一、插入图片 1、简介 2、代码示例 二、背景图片 1、简介 2、代码示例 一、插入图片 ---- 1、简介 插入图片 : 插入图片方式 : 在 HTML 中 , 使用 <img> 标签可以插入一张图片 ; 插入图片适用场景 : 显示 内容 , 按钮 , 一般都使用 插入图片 的方式 展示图片 , 设置插入图片大小 : 通过设置 盒子模型 内容尺寸 而设置图片大小 ; width 设置图片内容宽度 ; height 设置图片内容高度 ; 设置插入图片显示位置 : 通过设置 盒子模型
韩曙亮
2023/03/30
1.8K0
【CSS】盒子模型外边距 ③ ( 插入图片 | 插入图片位置移动 - 修改外边距 | 背景图片 | 背景图片移动位置 - 修改背景位置 background-position )
推荐阅读
相关推荐
【CSS】220-你可能理解错了background-position
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档