第几次了?
AntUI 是一例.
event-stream 也是一例
现在 node-ipc 又是一例.
这就不禁让人担心一个问题.
正如我在很久以前的一个问题里提出的观点一样
现在这种事情频繁发生就不得不牵扯出一个问题.
供应链安全问题.
越是庞大的项目在供应链安全方面越是脆弱.
大如 node, react, 甚至 linux 这些东西, 有没有可能其 Contributor 或者其依赖组件的 Contributor 在某种情况下 (如因信仰, 政治倾向, 现实生活, 甚至在其所在国政府警察或情报部门的威逼利诱下)
在其负责的开源项目中投毒?
说不好.
如果他们真的这么做了, 谁会审查他们的代码? 尤其项目庞大的情况下除了涉军工以外谁会一行一行的检查其代码?? 没人会吧? 尤其像他这种蓄意的在代码中安插 base64 编码后的恶意逻辑, 这要不是有人发现自己桌面上多了个文件, 谁能发现得了?
是, 总会有人逐行审查代码, 但是什么时候? 一年以后么? 还是爆发的时候再审查? 这种代码就是藏飞机设备舱里的定时炸弹, 没爆炸之前谁也不知道. 爆炸的时候做什么都晚了.
Supply chain attacks - Windows security | Microsoft Docs
开源软件的信任链崩塌了.
这是我一直反对在自由开源软件中夹带政治立场的原因,只不过 node-ipc 的作者更进一步,将纯粹的意识宣传转变为了物理斗争。
在我之前的一个回答里:
也有提到,有人就离不开政治。甚至自由软件、开源软件本身也是一场政治运动[1],但这并不代表通过自由软件宣传无关的政治立场是合理的。我一般把这种行为叫做夹带私货。而这次 node-ipc 夹带的私货,有点多。
当然,开源界也有分歧、也搞政治:自由软件与开源软件之间存在思想争论[2]。因此我在开放代码时选择什么样的开源协议,其实也是一种政治。但他们只是表现为对当今资本与商业社会的接纳方式不同,与谁当总统、谁来执政没有有半点关系。
自由与开源软件所代表的精神,是人人为我、我为人人的精神,是世界大同、天下一家的精神。从道理上讲,我认为将自由与开源软件与政治立场绑定的做法,违背了自由与开源软件运动的初衷。它通过政治立场隐式地对用户社区做了限制。
那一个自由开源软件是否可以通过使用某种开源协议、或是一些附加条款,显式地撤销某些特定用户的权利呢?作为软件的作者,当然有权利自行选择协议;但需要注意的是,不论是开源软件还是自由软件 ,对协议本身是有要求的。也就是说,不是所有的协议都能叫做“开源协议”,也不是开放了源代码就可以叫开源软件。例如,开源定义[3]的第五条指出,不得歧视任何个人或群体:
5. No Discrimination Against Persons or Groups
The license must not discriminate against any person or group of persons.
再比如,GPLv3[4] 中的第七条明确指出,
……
尽管已存在本协议的其他条款,对你添加到受保护作品的材料,你可以(如果你获得该材料版权持有人的授权)以如下条款补充本协议:
a)表示不提供品质担保或有超出十五、十六条的责任。
b)要求在此材料中或在适当的法律声明中保留特定的合理法律声明或创作印记。
c)禁止误传材料的起源,或要求合理标示修改以别于原版。
d)限制以宣传为目的使用该材料的作者或授权人的名号。
e)降低约束以便赋予在商标法下使用商品名、商品标识及服务标识。
f)要求任何转发该材料(或其修改版)并对接收者提供契约性责任许诺的人,保证这种许诺不会给作者或授权人带来连带责任。
此外的非许可性附加条款都被视作第十条所说的“进一步的限制”。如果你接收到的程序或其部分,声称受本协议约束,却补充了这种进一步的限制条款,你可以去掉它们。……
我不是律师,但“某些群体不得使用”,应当不包含在上面允许的范畴中。也就是说,你可以移除它们。
因此,虽然用户社区是不受这些条款限制的,但是很显然,这种“限制某些群体融入社区”是有违开源软件和自由软件的思想和初衷的。
至于 node-ipc,就让他凉凉吧。暗暗庆幸我用的不是俄罗斯 IP。
【3月21日下午更新】
我参加了老朋友们做的《后互联网时代的乱弹》节目一起讨论了本次事件,欢迎收听!
此外,node-ipc作者除了锁定了仓库,还将仓库里最近的所有issue都关闭了,并把标题全部置空、issue描述都清空了。
【3月19日下午3点半事态更新】
大约13小时之前,进行供应链投毒的node-ipc的作者的twitter账号 electricCowboyR 被黑客攻破,头像被更换为了俄罗斯国旗,并发布其大量个人信息和其妻子的个人信息。其中暴露的个人信息也解释了为什么他有一个日文中间名,实际是其妻子(日本人)的姓。此外黑客指其加入了两个约会网站并婚内出轨。
此时只能感叹,自作孽不可活……
【3月18日晚间更新】
我看了下这波冲击issue列表的网友,几乎没有中国的,而且至少一半从github记录来看确实是程序员而不是临时注册的小号。此外,有人在油管发了个视频 Popular JS Package node-ipc Adds Malicious "Protest-ware" On Purpose,视频最后还放出了node-ipc作者自己以前发的自拍视频,也就是说,node-ipc作者的信息已经完全曝光了。
node-ipc作者锁定了repo,也就是没有人可以再发issue和评论了。同时他将仓库内容强行回滚到了恶意代码之前的提交点,并在README里写下:「Thanks for all the free pizza, and thanks to all the police that showed up to SWAT me. They were really nice fellas.」
【3月18日更新】
node-ipc的恶意代码已经被网络安全独角兽Snyk公司提报为CVE漏洞:CVE-2022-23812 。
最早发现恶意代码的MidSpike已经被node-ipc作者block,无法在node-ipc仓库下再进行发帖和评论。MidSpike整理了个gist:CVE-2022-23812 | RIAEvangelist/node-ipc is malware / protest-ware,并保持更新,建议关注此问题的朋友订阅和标星。
node-ipc仓库的issue列表现在已经是炸翻天了,原issue#233(这个issue号也是神)已经接近500楼,最近24小时内则被增加了200多个issue。大部分issue就是轰炸,不过也有少数issue包含一些内容,比如有个issue包含几个俄罗斯程序员的看法。我翻译了一下,有兴趣可以看看:
【3月16日凌晨回答】
如果说,往所有依赖了这个包的应用的最终用户的桌面和OneDrive目录里写个文本文件,是激进的反战宣传;那么这个comment https://github.com/RIAEvangelist/node-ipc/issues/233#issuecomment-1068182278 所发现的,就是彻底的恶意攻击了。
原始评论已经被该repo的owner删除,但我恰好做了截屏:
攻击源码在 https://github.com/RIAEvangelist/node-ipc/blob/847047cf7f81ab08352038b2204f0e7633449580/dao/ssl-geospec.js 。源码经过压缩,并简单地将一些关键字符串进行了base64编码。其行为是,利用第三方服务探测用户IP,针对俄罗斯和白俄罗斯IP,会尝试覆盖当前目录、父目录和根目录的所有文件。
也许是「良知未泯」,或者意识到这种行为已经是严重犯罪,又也许只是「误提交」,该库的owner随后删除了这段的攻击代码(https://github.com/RIAEvangelist/node-ipc/commit/cc282c2b06c98eb0a01543639ac8d117476dc4c8),半天后改为了现在这种更为「和平」的往桌面上写个反战宣传的做法。
但这仍然是一种恶劣的供应链投毒。这里,具体的动机不重要,无论其动机多么良好(更不用说,很多人可能并不同意其政治倾向和道德立场),这样的行为都严重破坏了开源生态中的信任。
这一事件也再次显示了JS/node/npm生态的脆弱,要解决或缓解这一问题,应该考虑在JS语言和JS运行时层面引入一些机制,比如说针对包级别的权限管理(deno那样粗粒度的应用级别的权限管理并不足以解决供应链投毒问题),在更多的API中引入类似TrustedType的机制等。而这显然已经超出了库、框架或工程管控的层面。这也是为什么我一直说国内头部大厂应该要投入资源去参与语言标准、引擎和平台实现。
【更新】进行供应链投毒的Brandon Nozaki Miller在删除了其repo下揭露其潜在的恶意代码的评论后,在vue-cli的相关issue https://github.com/vuejs/vue-cli/issues/7054 下还狡辩说,这段代码并不会真正工作,然而我的实测表明该段代码确实会覆盖用户文件,然后他又说(用来检测IP位置的服务的)API key是失效的,但被最早发现该代码的用户MidSpike揭穿——当时该API key是有效的,所以应该是Brandon Nozaki Miller在被发现后reset了API key。
如果说一开始他的行为勉强有借口,在被发现潜在的恶意行为之后,不仅不反省,还通过reset API key、删除评论等举动妄图隐瞒自己的不当行为,至此,该人的信用可谓完全破产。
我认为这样的人是开源社区的害群之马,应该果断地全面封杀。
根据 @天猪 的评论,npmmirror(原taobao npm镜像)已经将node-ipc包列入黑名单,不会同步任何新版本。进一步的,我强烈建议 npmmirror 将该人标记为不受信任的用户,将所有由其发布的包都进行锁定。我同时强烈建议所有开发者和所有开源项目行动起来,检查该人发布的所有库,如在项目中有引用,应立即锁定版本并开始寻找替代品。同时如果有其他项目授予了该人提交权限,应立即收回。
以上。
【再次更新】很遗憾(但是意料之中)https://github.com/RIAEvangelist/node-ipc/issues/233 这个主题下的一些评论已经渐渐失去焦点,尤其在庄表伟发表他的观点「在issue下破口大骂同样不可取后」,一些评论开展了对庄表伟的人身攻击,骂他理中客,甚至莫名其妙地回复「You guys should first stop being triggered by the word "Taiwan"」。这和之前我评论轰炸React的issue列表事件一样,「小将的水平真心令人捉急」。
我要明确地声明,在谴责node-ipc作者,强烈建议开源社区全面清理他发布的包的同时,我,作为「开放原子开源基金会」TOC成员之一,完全赞同开源社理事长庄表伟的观点:我们需要建立一种开源世界的反分裂共识。
我推荐大家认真读一下表伟的文章:
我建议所有人在开源社区如GitHub的相关issue讨论中,借鉴我党的光荣传统和斗争经验,避免单纯的情绪输出,以建立「开源世界反分裂共识」为核心目标,团结可以团结的全世界开发者,建立广泛的统一战线,无论其来自中国(包括台湾地区)、欧美、印度、俄罗斯、乌克兰、日韩、非洲……共同对抗将政治立场和意识心态分歧凌驾于开源价值之上的错误观点和分裂行为,主动有意识地传播人类命运共同体这一真正普世的价值观——并引导世界人民认识到,开源和开放标准就是构建人类命运共同体的伟大实践的一部分。
npm应该有个针对项目和针对人的安全评级了,像这种人就应该永远被钉在开源的耻辱柱上。
protestware这个词造得好。不过,人家既然要protest,这事情本来就是要让别人知道的,迟早被发现并加以应对,就怕某些更critical又不开源的东西,里面有开发者甚至开发者的领导,秘密搞一些奇怪的把戏,比如类似特斯拉的所谓智能车的软件,识别到有人在车内说俄语就让刹车失灵、自动急刹、自动熄火,故意错误导航之类。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有