乐于分享
好东西不私藏

有人买了30个WordPress插件,然后在里面种了后门

有人买了30个WordPress插件,然后在里面种了后门

有人买了30个WordPress插件,然后在里面种了后门。

这新闻今天炸了。843分,Hacker News热榜第一。我看完的第一反应是:居然才30个?

说实话,WordPress生态这个玩法,出事是迟早的。你想想,一个插件作者,写了几年代码,积累了十万用户,每个月从 donations 里拿几百刀。突然有人私信他说:”兄弟,你这插件不错,我出五万刀买了。”

换你你卖不卖?

我认识一个哥们,真事。他2018年写了个WordPress缓存插件,免费,GitHub开源。到2022年,用户大概二十万。有一天收到邮件,对方说想”赞助”项目,条件是”帮忙加个小功能”。他查了那家公司,看起来挺正规,就答应了。

三个月后,他的插件开始往用户网站里插广告。不是那种明显的横幅,是藏在footer里的小字,带affiliate链接。用户投诉,他才发现代码被人改了。去问那家公司,对方说:”合同里写了啊,我们可以’优化’用户体验。”

他花了两周时间清理,发道歉信,最后把插件删了。二十万用户,一夜之间归零。

他说了一句话我印象很深:”我以为我在写代码,其实我在养猪。”

这次这个案子更狠。买家直接买了30个插件,不是赞助,是买断。然后在每个里面都塞了同样的后门——一个看似无害的”更新检查”功能,实际上会把管理员cookie发到远程服务器。拿到cookie,就能以管理员身份登录任何用了这些插件的网站。

三十个插件,覆盖了多少网站?保守估计,几百万个。

最讽刺的是什么?是这些插件被买之后,更新频率反而变高了。以前三个月更新一次,现在每周都push新版本。用户还挺高兴:”哇,作者好勤快!”

勤快个屁。是在勤快地把你的数据往外搬。

这事曝光是因为有个安全研究员闲着没事,用diff工具比对了插件更新前后的代码。发现多了一个base64编码的字符串,解码之后是个URL,指向一台位于俄罗斯的服务器。

他发了推特。WordPress社区炸了。然后大家开始查,发现这30个插件全是同一家公司买的——注册地在塞浦路斯,实际控制人是谁?不知道。

WordPress官方现在什么反应?没有反应。他们的逻辑是:插件是第三方开发的,我们不负责。你要用,自己承担风险。

这话技术上没错,但听着特别像”菜里有虫你怪厨师干嘛,你又没逼你吃”。

问题是,WordPress占了整个互联网43%的网站。你以为你在用WordPress,其实你是在用WordPress+两百个插件。每个插件都是一个信任节点,任何一个节点崩了,你的网站就是别人的了。

我之前写过一篇文章,说现在的程序员越来越像乐高玩家。不是贬义,是真的。你不需要知道数据库怎么实现的,用个ORM就行。不需要懂HTTP,调个axios就行。不需要会配服务器,点个Vercel部署就行。

乐高玩家没什么不好。直到你发现,你拼的城堡里,有一块积木是别人远程控制的。

这次WordPress这个事,最可怕的不是技术层面的后门怎么写的——说实话,那代码写得挺糙的,稍微仔细点就能发现。最可怕的是,这种模式可以复制到任何开源生态。

npm包呢?PyPI呢?Docker镜像呢?

你用的那个left-pad,作者心情不好就能删掉,让半个互联网瘫痪。现在有人出钱了,你觉得有多少”心情不好的作者”会变成”心情很好的卖家”?

我不是说开源作者都见钱眼开。我认识很多开源开发者,真的是用爱发电,凌晨三点还在回issue。但问题是,这个模式本身就有漏洞。一个人维护一个被十万个人用的项目,拿零收入,突然有人给他一年的工资让他放弃——这个诱惑,不是每个人都能扛住的。

而且买家越来越聪明了。不是直接塞恶意代码,是先养你几个月,建立信任,然后慢慢加”小功能”。用户看到的只是”更新更勤快了”,谁没事去diff代码?

这次被发现是运气。下次呢?

我查了一下,这次中招的30个插件,加起来有超过两百万的安装量。两百万个网站,可能包括你的博客,我的朋友的电商站,某个小公司的官网。他们的管理员cookie可能已经在某个俄罗斯服务器的数据库里了。

而这些网站的主人,现在可能还在愉快地更新文章,完全不知道自己的后台已经对别人敞开了大门。

这事最后会怎么收场?WordPress官方可能会发个公告,提醒大家注意插件来源。那30个插件会被下架,作者可能会出来道歉——如果他们还找得到人的话。然后过三个月,大家忘了这事,继续装插件,继续点更新。

因为没办法。你不用插件,WordPress就是个空壳。你用插件,就得信任几十个陌生人。这个信任链条,从一开始就是脆弱的。

我唯一能想到的解决办法,特别不现实:给开源作者发钱。不是donations,是正经的工资。让维护十万用户项目的人,能靠这个养活自己。这样他们才不会在收到五万刀offer的时候,纠结三天然后点下”接受”。

但这事谁来做?WordPress官方?他们连自己的编辑器都整不明白。政府?他们连什么是WordPress都不知道。

所以最后,还是得靠我们自己。多diff一下代码,少用点插件,重要的站自己写或者找信得过的人审一遍。

或者,接受一个现实:在互联网上,没有绝对的安全,只有相对的风险。你用的每一行别人写的代码,都是一次信任投票。而信任,从来都是会背叛的。

就像那个把插件卖掉的朋友说的:”我以为我在写代码,其实我在养猪。”

问题是,猪养大了,屠夫来的时候,猪是不知道的。

而你,可能就是那只猪。