2024年3月29日,开源一个叫Jia Tan的压缩贡献者向xz utils的GitHub仓库提交了一串看似无害的代码。几天后,软件整个Linux社区炸了锅。开源微软工程师Andres Freund在调试SSH性能问题时,压缩发现了一个令人毛骨悚然的软件事实:这段代码是一个精心设计的后门,能让攻击者绕过SSH认证,开源直接拿到系统控制权。压缩如果不是软件Freund碰巧发现,这个后门会随着xz 5.6.0版本进入几乎所有主流Linux发行版。开源
xz utils是压缩什么?简单说,它是软件一个压缩工具集,核心是开源liblzma库,提供高压缩比的压缩LZMA算法实现。你下载的软件.tar.xz文件、许多Linux发行版的软件包、甚至一些嵌入式设备的固件,背后都有它在跑。它不像gzip那么古老,也不像zstd那么新潮,但胜在压缩率极高,尤其在处理大文件时优势明显。很多项目把它当作默认的压缩方案,因为它能省下可观的带宽和存储。
这个项目由Lasse Collin维护,从2009年开始,他几乎是一个人扛着整个代码库。长期孤独维护,加上社区对“更多贡献者”的渴望,给了攻击者可乘之机。Jia Tan从2021年开始频繁提交补丁,逐渐获得信任,最终成为事实上的共同维护者。他花了两年多时间,用多个马甲账号施压、伪装成热心开发者,一步步把恶意代码藏进测试文件和构建脚本里。这种耐心和社交工程手法,在开源史上极其罕见。
后门的技术细节更让人后背发凉。它并不直接出现在liblzma的源码里,而是藏在测试用的二进制文件中,通过构建系统在特定条件下触发。攻击者利用了glibc的IFUNC机制,在SSH服务启动时动态劫持RSA加密函数。整个过程只针对x86-64 Linux系统,且需要特定构建环境。换句话说,这不是广撒网,而是精准打击。
Andres Freund的发现过程也充满偶然。他注意到SSH登录时CPU占用异常,用perf工具追踪,才挖出这个后门。如果他没有在那一周调试性能问题,如果他的系统没有恰好触发条件,这个后门可能已经随Debian、Ubuntu、Fedora等发行版推送到全球数百万台服务器。事后回想,Jia Tan甚至试图说服维护者把后门代码合并到主分支,只是被Collin以“测试文件太大”为由暂时搁置。
这件事暴露了开源供应链的脆弱性。我们依赖的软件,往往由少数志愿者在业余时间维护,缺乏资金、审计和制度保障。xz utils不是个例,OpenSSL的Heartbleed、Log4j的漏洞,都是类似结构性问题。攻击者不需要攻破大公司,只要搞定一个疲惫的维护者,就能撬动整个生态。
事后,GitHub封了Jia Tan的账号,各大发行版紧急回滚到5.4版本。但问题没结束。谁在背后支持Jia Tan?他的马甲账号从哪些IP登录?为什么偏偏选xz?这些至今没有官方结论。有人猜测是国家行为,有人认为是商业间谍,但缺乏实锤。唯一确定的是,开源社区不能再假装“很多眼睛盯着所以安全”了。
作为普通用户,你能做什么?别盲目追新,尤其是系统级组件。关注发行版的安全公告,及时更新,但也别第一时间升级。更重要的是,支持你依赖的开源项目——捐钱、提issue、写文档,哪怕只是说声谢谢。维护者不是机器,他们需要被看见。xz后门能被发现,靠的是一个人的好奇心和专业技能,但下一次,我们未必这么幸运。