Andres Freund 在 2024 年 3 月 29 日发现了一个在 xz-utils
注入的后门;使用了 xz/lzma
5.6.0 / 5.6.1 的项目皆受影响。
杀伤力:
当前还未完全清楚;但 openssh 的 sshd
首当其冲;注入的代码会 Hook OpenSSH 的 RSA_public_decrypt 函数,致使攻击者可以通过构造特定的验证数据绕过 RSA 签名验证,允许特定的 SSH 密钥进行登录,绕过 SSH 身份验证。凭此一点,足见其影响之恶劣。
波及的范围:
- 可以通过命令
xz --version
或者xz -V
来查看当前 xz 的版本;幸运的是,该后门被及时发现,还未进入到主流 Linux 发行版的 stable 版本;但采用 rolling update 或者追求软件最新版的包管理器(例如 nix)的用户可能受到影响,请马上更新或者回退。 - 注意,上述命令只能确认 xz 命令是否受此后门影响,不能完全排查出系统其它软件是否依赖问题版本,从而有风险。请大家密切关注该安全事件,我们也会在官网上持续更新相关的信息。
- 根据 repology,已知受影响的版本:
- Cygwin, mingw, Manjora,AUR,
- Alpine( EDGE 版本 受影响,所幸 latest 版本 没有受影响 )
- 前沿尚未稳定的 Linux 发行版 (Arch, Debian, Red Hat, openSUSE)
事情简报
- 攻击者 JiaT75 于 2021 年注册了 GitHub 账号,之后积极参与 xz 项目的维护,并逐渐获取信任,获得了直接 commit 代码的权利。
- JiaT75 在最近几个月的一次 commit 中,悄悄加入了
bad-3-corrupt_lzma2.xz
和good-large_compressed.lzma
两个看起来人畜无害的测试用二进制数据,然而在编译脚本中,在特定条件下会从这两个文件中读取内容对编译结果进行修改,致使编译结果和公开的源代码不一致。 - 目前初步的研究显示,注入的代码会使用 glibc 的 IFUNC 去 Hook OpenSSH 的 RSA_public_decrypt 函数,致使攻击者可以通过构造特定的验证数据绕过 RSA 签名验证。(具体细节还在分析中)
- 只要是同时使用了 liblzma 和 OpenSSH 的程序就会受到影响,最直接的目标就是 sshd,使得攻击者可以构造特定请求,绕过密钥验证远程访问。
- 受影响的 xz-utils 包已经被并入 Debian testing 中进行测试,攻击者同时也在尝试并入 fedora 和 ubuntu。
- 幸运的是,Andres Freund commiter 在做一些微基准测试,看到 sshd 进程使用了惊人数量的 CPU,随后顺藤摸瓜发现了这个阴谋并报告给 linux-distros,然后报告给 oss-security。致使此事败漏。
- 目前 GitHub 已经关停了整个 xz 项目
上述简报内容有对 Yachen Liu 的推文帖进行参考并进行改动
作者及官网声明
注意,攻击的开发者是 Jia Tan,而非 xz-utils 的原作者 Lasse Collin。以下是 Lasse Collin 的声明:
Facts:
- CVE-2024-3094
- XZ Utils 5.6.0 and 5.6.1 release tarballs contain a backdoor. These tarballs were created and signed by Jia Tan.
- Tarballs created by Jia Tan were signed by him. Any tarballs signed by me were created by me.
- GitHub accounts of both me (Larhzu) and Jia Tan are suspended.
- xz.tukaani.org (DNS CNAME) was hosted on GitHub pages and thus is down too. It might be moved to back to the main tukaani.org domain in the near future.
- Only I have had access to the main tukaani.org website, git.tukaani.org repositories, and related files. Jia Tan only had access to things hosted on GitHub, including xz.tukaani.org subdomain (and only that subdomain).
当前作者的声明比较仓促,因此大家可以持续关注官网的声明。
https://tukaani.org/xz-backdoor
x-cmd 自查 – 暂未受影响
当前 x-cmd pkg 的软件体系,暂时还没找到携带该漏洞的 pkg:
- x-cmd/pkg 的包:
- 我们首先排查的 7za 用的是 lzma 5.4.5
- 其次 zstd 和 python 同样也使用 xz-utils 5.4.5 版本作为依赖进行编译。
- 因事故的发生,x-cmd 在将暂时锁定 xz-utils 5.4.5 版本作为所有需要 xz-utils 软件依赖进行编译。
- 开发/构建环境:
- 其次,我们打包xz 的时候,所用 xz 版本 是 5.4.2
- 所用的服务器以及镜像,都还没更新到 5.6.0/5.6.1 版本,因此刚好避开了这个问题
- x.bat / mingw /
git for windows
:- x-cmd 为 windows 用户提供了
x.bat
,以帮助没装 WSL 及 mingw/cygwin 的用户通过安装git-for-windows
来使用 x-cmd。 - git-for-windows 依赖 mingw,而 mingw 最新版也受此波及,因此我们赶紧自查。
- 自查发现,我们使用的 git-for-windows 是 v2.41.0,所用的 xz-utils 是 5.4.3 版本,因此没有受到此后门的影响;更让我们感到高兴的是,git-for-windows 的最新版(2.44.0)中的 xz 是 5.4.6,而并未受此波及。
- x-cmd 为 windows 用户提供了
然而,事情尚未尘埃落定,我们会继续关注这个问题,并尽最大努力守护我们的 pkg 体系。
这件事对 x-cmd pkg 工作的启发
这件事对我们有很多启发和影响:
- 我们将继续坚持这个观点: pkg 应该优先保证安全和质量;数量只能是更低的优先级
- 在未来,pkg 的引入会渐趋保守;尤其对于 x-cmd 模块中频繁使用的 pkg 版本,应该满足:
- 发布已有一段时间,久经考验,并未发现重大漏洞
- 在维护周期内的版本
- 我们的软件构建和上游供应链检查应该进一步加强,并不断使用最新的 CVE 数据库扫描自查。
其它思考
- 软件供应链是一个严肃的事情,但也是一个 出了事/发现损失 才会被严肃对待的事情
- FOSS 是一项伟大的事业,本身的开放带来技术传播的同时,丰富、优质的库以近乎零成本提供给下游应用开发者
- 然而,长期对 FOSS 社区的无偿要求,只会恶化这个社区,并增加此类安全问题的概率 – 进而让下游开发者的成本变得更高
- 需要有持续的正向资金支持 FOSS;保证并促使更多 FOSS 的开发者体面地且专注投入到 FOSS 软件的开发和维护
- FOSS 是这个时代的奇迹,也是这个时代的幸运;需要大家好好守护。
参考
- Openwall: backdoor in upstream xz/liblzma leading to ssh server compromise
- Article: A backdoor in xz
- Article: Everything I Know About the Xz Backdoor
- GitHub Gist: FAQ on the xz-utils backdoor