PHP 9.2 漏洞与开源单人维护
你打开一个网站,页面加载出来了。
你点开一篇新闻,看完,划走。你不知道它是用什么写的,架在谁的服务器上,由谁每天盯着它的日志。
你觉得这一切理所当然,就像你按下手机上那个 8:30 的闹钟,理所当然地以为它会响。
10 月 21 日这一天,有两条消息放在一起看,像一根针同时扎进了两件事:
一条是,PHP 开发团队要修复两个 CVSS 9.2 分的漏洞。欧盟计算机应急响应小组(CERT-EU)警告:装不上补丁的机构,把网站下线。因为 9.2 分意味着,攻击者不用登录,就能远程在你的服务器上执行代码。PHP 5 之后的所有版本都可能有风险,而具体哪些版本中招,官方还没公布。
另一条是,一位 Reddit 网友统计了全球 23 个核心开源项目,发现过去一年里,有 11 个只靠 1 到 2 个人在维护。
这两条新闻看起来毫不相干。但如果你知道那 23 个项目是什么,你会发现它们说的是同一件事。
一、支撑你的手机,需要几个人
先看几个名字和数字。
时区数据库(tzdata)——安卓、iOS、绝大多数服务器用来算本地时间的那个文件。你的手机没调快调慢,靠的就是它。2025 年 10 月到 2026 年 10 月,这个文件被改了 251 次。其中 218 次由一个人完成:保罗·埃格特(Paul Eggert),加州大学洛杉矶分校的计算机科学高级讲师。他的备份 Tim Parenti 做了 28 次。
这个文件最近一次更新(2026e 版,9 月 29 日发布)的第一条内容是什么?是:曼尼托巴省将在 10 月 31 日永久转为 -05 时区。也就是说,11 月 1 日,曼尼托巴省所有手机都不会再把时钟拨回去。
做出这个决定的,是一个 UCLA 老师的课余时间。
sudo——Linux 和 macOS 上给你管理员权限的那条命令。2008 到 2018 年间,它被修改了 5409 次。其中 5408 次,一个人:Todd Miller。这个项目大概是这份名单里"最有钱的单人项目"——今年 2 月 Miller 发了条消息说自己在找赞助,被 The Register 报道了一句之后,项目 Open Collective 的年度预算涨到了约 61,700 美元。
这件事本身就是名单里其余项目的注脚。
xz——几乎每台 Linux 服务器都装的压缩工具。芬兰人 Lasse Collin 一个人做大部分工作,2025 年他写了 97% 的修改。2026 年,这个项目只有他一个常规贡献者。而自 2024 年那次后门事件之后,分析没有找到任何新的资金支持。
core-js——让现代 JavaScript 能在老浏览器里跑起来的库,按作者自己的说法,全球访问量最高的一千个网站里大约一半在用它。Denis Pushkarev 发起募捐的时候,筹到了每月 57 美元。2019 年他全职无薪做这个项目,后来因为一场致命车祸入狱服刑十个月。那段时间项目提交几乎停滞,如今他一个人写了 95% 的修改。
zlib——PNG 图片、Git、安卓、iPhone、Chrome 里压缩数据的那个库。Mark Adler 在 1995 年把它写出来,他的另一份工作是在 Spirit 火星车飞往火星的路上管理它。他和另一位贡献者做完了去年大部分工作,Adler 没有赞助页面。
还有 libjpeg-turbo(安卓、Chrome、Edge 解码 JPEG 用的),维护者 DRC 用缩写署名,把项目当成一人公司经营,普通资金大约能覆盖每月 8 到 10 小时的工作量。
把那些在自己手机上设早晨闹钟的人算进去,受影响人数估计是 40 亿。
二、这些代码不是问题,它们周围的关系才是
有一个细节值得说清楚。
名单上这些代码,大部分不年轻、不好对付、被人研究过很多年。zlib 1995 年就有了,sudo 大约 1980 年出生于纽约州立大学布法罗分校。成熟的软件变动慢,低提交量有时候意味着"做完了",而不是"被忽略了"。
所以别把这份名单读成"开源要完蛋了"。它不是。
真正脆的是代码周围的那个安排:一个人,一份日常班工作,一个邮件列表,以及偶尔出现的、一个主动伸手的陌生人。
这个安排在 2024 年 3 月 29 日被验证过一次。
微软工程师 Andres Freund 发现,他的 SSH 登录比正常情况多消耗了处理器时间——几百毫秒。他顺着这条线索摸到了 xz 的后门。那个后门是通过分发版补丁路径进入的:几个 Linux 发行版把 OpenSSH 链接到 libsystemd,libsystemd 又依赖 xz。攻击者利用的机制,是一个陌生人用持续数月的关怀,把独居的维护者磨到交出权限。Collin 在 2022 年 6 月发过一封邮件,说这是"一个没有报酬的业余项目",他的精力有限,主要受长期心理健康问题困扰。他随后给了那位贡献者更多访问权限。到 2023 年,那位贡献者做的修改比 Collin 还多:304 次对 172 次。
至今没人知道那是谁。
三、你只在出事的时候才听到他们的名字
我们习惯在出事的时候听到维护者的名字。
Heartbleed、Shellshock、Jia Tan。
发现 Shellshock 漏洞的 Stéphane Chazelas 有人提。发现 xz 后门的 Andres Freund 有人提。那些花了几年让代码继续好好跑的人,几乎没有人提。
有些人是有意躲开的。DRC 用缩写署名。SQLite 官网曾经把开发者名单和照片页面下掉过一次,理由是有些人可能会滥用这些信息。
也不是没有人吃过亏。2011 年,一家占星软件公司起诉了埃格特和数据库创始人 Arthur David Olson,声称这个文件的部分历史来自他们拥有的一本地图集。邮件列表和下载站直接下线,直到当月晚些时候 IANA 接手。电子前哨基金会免费为两人辩护,那家公司才在 2012 年 2 月撤诉。
那家公司告的,是一个把代码免费送出去二十多年的人。
r/linux 上最高赞的评论是愤怒,而且愤怒的方向很一致:这些公司把库打包进几十亿台设备,然后只为炫的东西和跟自己业务直接相关的部分付钱。有位老 commenter 把问题追溯到用词上——free software 谈的是人、权利和责任,而 open source 谈的是流程,责任那部分在换词的时候丢了。
也有一个更尖锐的分歧:有人说 xz 后门在发布几周内就被抓出来,说明开源审查是有效的。另一边反驳说,它被发现只是因为一个工程师去追了 SSH 登录多出来的几百毫秒。
四、但钱确实有用,而且快得惊人
这是整件事里最让人乐观的部分。
2014 年 4 月,Heartbleed 漏洞曝光。按 Netcraft 的估算,约 17% 的可信安全服务器内存里的密码和私钥可以被直接读出。那一周,OpenSSL 基金会主席 Steve Marquess 公开表示,捐款大约是每年 2000 美元,并告诉 NPR 当时只有一个人在全职做这个项目。
两个月内,Linux 基金会从科技公司筹到 540 万美元。OpenSSL 拿到了两名带薪开发者和一次审计。常规贡献者人数从 2013 年的 6 人涨到 2014 年的 14 人,到 2026 年是 32 人。
curl 是另一个样本。Daniel Stenberg 1996 年在瑞典创建了它,如今手机、汽车、电视和 2018 年以后的 Windows 都在用它。今年有 11 个人做常规工作,Stenberg 在 2025 年的年度总结里写,除了他之外的所有人加起来的代码行数已经超过他了。他能全职做这件事,是因为有人付费买支持——项目每年通过 Open Collective 拿到约 89,700 美元,GitHub 上有 64 位赞助人,德国的主权科技基金 agency 另外付了 19.5 万欧元。
对照着看,结论很清楚:OpenSSL 在 Heartbleed 之后把贡献者翻了一倍多;xz 在后门事件之后没有等到同类的钱,它至今还是一个人。
德国主权科技局(Sovereign Tech Agency)2022 年以来资助了大约 90 个开源项目,Alpha-Omega 基金去年发出近 600 万美元。名单里拿到最多的几个是 log4j(59.6 万欧元)、FFmpeg(43.8 万欧元)、OpenSSL(40.6 万欧元)、OpenSSH(20 万欧元)、curl(19.5 万欧元)。
而时区数据库、SQLite、zlib、libjpeg-turbo、HarfBuzz、xz、bash、nghttp2——八个项目,一分钱公开资助都没查到。埃格特、Collin、DRC、Adler,都没有赞助页面。
也要说清楚,"没有公开资助"是个很窄的判定。Eggert 在 UCLA 教书,Ramey 在大学网络组工作,都是有本职工作的人。企业私下付钱、公司内部消化的工时,都不会出现在公开记录里。但公开记录能确认的是:23 个项目里有 8 个,从那四个主要来源拿不到任何一分钱。
五、你可以先看看自己依赖了什么
这件事不需要等 CVE 告诉你。在你自己的机器上跑一行命令就能看到一部分:
ldd "$(command -v curl)" | grep -E 'libz\.so|libssl|libnghttp2'
在 Ubuntu 24.04 上,它会打印出 zlib(libz.so.1)、nghttp2 和 OpenSSL(libssl.so.3)。一条命令行工具,就加载了这 23 个项目里的 3 个。
把这个命令指向你每天用的其他程序,名字只会更多。
如果你想知道自己手机里装着谁,打开 xkcd 的第 2347 号漫画——每次安全新闻之后总有人转发的那张:一整座现代基础设施,架在一块小砖上,小砖由一个人维护,没有一句谢谢。
那幅画画于 2011 年。十五年后,有人真的去数了一遍支撑它的那些人。
六、能做的事,比想象中具体一点
如果这些代码里有你每天都在用的东西,你其实可以做几件很具体的事:
- 赞助你天天用的工具。 sudo 和 curl 都有 GitHub 和 Open Collective 的赞助入口。sudo 的资金增长,起因只是被一篇新闻报道了一次。
- 写进公司的预算。 如果你的公司在用或发行 Linux,那就为你的技术栈真正依赖的那些项目申请一笔经常性付款。相比一次事故的账单,这是小数目。
- 问你的发行版回馈了什么。 有 commenter 认为,发行版是资助上游最合适的位置——因为只有它清楚自己依赖了什么。
- 提 bug 的时候带复现步骤,能带补丁更好。 不要提要求。xz 那段故事里,对一位疲惫的维护者施加公众压力本身就是攻击手段的一部分。
- 如果你自己维护着什么关键的东西,把交接计划写下来。 埃格特 2020 年就在邮件列表上指定了备份。libxml2 的交接做得极好:Nick Wellnhofer 2025 年 9 月宣布要退场,12 月把自己从维护者名单上移除,大约 12 小时后新维护者就加上了。
这份统计和那些新闻一起,其实只说明了一件事:名单上这些代码不是弱点,它们周围的安排才是。
那位作者在文章末尾写了两句话,我觉得比任何评论都更值得记住:
这些维护者写下了有用的东西,免费送出去,然后整个行业踩在它上面。现在就去记住他们的名字。
另一个选择是,从一个 CVE 里认识他们。
而今天,PHP 的两个 9.2 分漏洞正在等一个补丁。修好它需要的时间不多,需要决定"要不要下线"的人,可能比维护 PHP 的那个团队还要多。