蛰伏三年,XZ开源项目维护者转身投“核弹级漏洞”,幸被微软工程师捉 Bug 时发现!

整理 | 屠敏

出品 | CSDN(ID:CSDNnews)

在刚刚过去的周末里,一则“大多数 Linux 发行版中存在的压缩工具 XZ Utils 已被其维护者设置后门”的消息震惊了整个开源社区,很多工程师一夜梦回 2021 年 Apache Log4j 漏洞被发现的那一晚,加班加点开始排查自己使用的 Linux 发行版。

好在有些幸运的是,这一次被标记严重程度为 10 级的“核弹级漏洞”未经广泛扩散之前就已被发现,归根究底,这得感谢微软的一位纠结于捉 Bug 的软件工程师。

本是 Debug,却意外发现一个“惊天”漏洞

事情要从微软工程师 Andres Freund 在过去几周里注意到一个异常情况谈起。

Andres Freund 发现自己远程 SSH 登录时间比应有时间长了 500 毫秒,同时 SSH 占用大量 CPU 资源以及会出现 valgrind 错误。他不知道为什么会这样,所以他决定追查一下原因。

“起初,我以为是 Debian 的软件包出了问题”,但在深度观察过程中,Andres Freund 发现,SSH 出于某种原因对 liblzma 压缩库进行了系统调用,而 liblzma 压缩库包含在他自己安装的 Debian sid 中的 xz(XZ Utils)工具中。

此次本是 Debug 的尝试,结果 Andres Freund 意外看到,在安装过程中使用的 Debian 的 xz 工具压缩包中找到了后门代码,但这些代码并不在该库的原始 GitHub 源代码中。

这些额外的包是一个被篡改的脚本,它会在 tarball 的配置设置结束时被执行

XZ Utils 是一个用于数据压缩和解压缩的开源工具集,它提供了命令行工具(如 xz、xzcat、xzdec),可以在大多数操作系统上进行压缩和解压缩操作,通常也能够提供比其他流行算法(如 ZIP 或 GZIP)更高的压缩比。在日常使用中,XZ Utils 会与 liblzma 一起使用,liblzma 库被用来执行实际的压缩和解压缩操作。

其中,XZ Utils 的 5.6.0 和 5.6.1 版本中,都含有恶意代码。

基于此,3 月 29 日,Andres Freund 发布了一则主题为《上游 xz/liblzma 中的后门导致 ssh 服务器被入侵》的邮件,详述了自己发现的具体问题与过程。

他在邮件列表中写道:

== 被破坏的存储库 ==

包含大量漏洞的文件以混淆的形式存在于上游提交的:

  tests/files/bad-3-corrupt_lzma2.xz

  tests/files/good-large_compressed.lzma

中。它们最初是在https://github.com/tukaani-project/xz/commit/cf44e4b7f5dfdbf8c78aef377c10f71e274f63c0 中添加的。

请注意,这些文件甚至未用于 5.6.0 中的任何“测试”。

随后,由于堆栈布局与后门所期望的不同,注入的代码在某些配置中导致了 valgrind 错误和崩溃。这些问题已尝试在 5.6.1 中解决:

https://github.com/tukaani-project/xz/commit/e5faaebbcf02ea880cfc56edc702d4f7298788ad

https://github.com/tukaani-project/xz/commit/72d2933bfae514e0dbb123488e9f1eb7cf64175f

https://github.com/tukaani-project/xz/commit/82ecc538193b380a21622aea02b0ba078e7ade92

随后调整了漏洞利用代码:

https://github.com/tukaani-project/xz/commit/6e636819e8f070330d835fce46289a3ff72a7b89

与此同时,在观察这个漏洞对 OpenSSH 服务器的影响时,Freund 发现,安装后门  liblzma 后,通过 SSH 登录会变得慢很多。

之前:

nonexistant@…alhost: Permission denied (publickey).

之前:

real 0m0.299s

user 0m0.202s

sys 0m0.006s

之后:

nonexistant@…alhost: 拒绝访问权限(公钥)。

real 0m0.807s

user 0m0.202s

sys 0m0.006s

openssh 并不直接使用 liblzma。不过,debian 和其他一些发行版对 openssh 进行了修补,以支持 systemd 通知,而 libsystemd 确实依赖于 lzma。

“我不是安全研究员,也不是逆向工程师,有很多东西我没有分析,我观察的大部分内容纯粹是来自观察,而不是详尽地分析后门代码”,Freund 写道。

为此,在发现这一后门时,「鉴于上游的明显参与,我没有报告上游的错误」,由于最初认为这是 Debian 特有的问题,Freund 向 Debian Security 报告了这个有问题的压缩包,然后又向发行商渠道报告。

在排查这一问题后,红帽公司将此问题作为 CVE-2024-3094 提交,严重程度为 10。这种看似恶意代码的注入发生在 Linux 发布周期的上游,这让 Freund 感到担忧。

他也写道,“从几周来的活动来看,提交者要么直接参与其中,要么他们的系统受到了相当严重的破坏。不幸的是,后者看起来不太可能,因为他们在各种列表上交流了上述‘修复’。”

隐藏于开源项目的维护者,蓄谋“投毒”近 3 年

一石激起千层浪,这句话再引风波。根据 Freund 的推断,漏洞的根源源于项目的提交者,这还了得?

通过进一步深挖,众人发现这段恶意代码来自一位名为 Jia Tan 的用户(JiaT75)之手,他通过多次代码变更的方式,将恶意代码植入到了 xz 项目中。当然这都是后面发现的:

  • 首次是在 2 月 23 日的一次更新中,这次更新添加了混淆代码。

  • 次日的更新包含了一个恶意安装脚本,该脚本将自身注入到 sshd(使 SSH 正常工作的二进制文件)使用的函数中。恶意代码只存在于上游发布的存档版本(称为压缩包)中。软件源中的所谓 GIT 代码不会受到影响,尽管它们确实包含第二阶段的工件,允许在构建过程中注入。如果存在 2 月 23 日推出的混淆代码,GIT 版本中的工件就会允许后门运行。

这段恶意代码极其复杂,还不容易被发现。事后,来自 Namefi_io CEO Victor Zhou 在 X 平台上举例说明道:

“例子一:攻击数据是伪装成测试数据并且直接源代码编译的时候还不会调用,只有在打包编译上才会调用。

例子二:攻击者在一个很隐秘的地方加了一个看似不小心遗落的句号(真的就是一个句号!!!就把一个重要的安全防范措施绕过了

一个句号绕过的安全措施,就好像用一根树枝开锁一样。这真是‘飞花落叶皆可伤人’的黑客版。

那么这位 Jia Tan 究竟是何许人也?

打开 Jia Tan(JiaT75)的 GitHub 主页,并没有过多公开信息可供查询。但是能看到他是在 2021 年注册了 GitHub 账户,并立即投入到 xz 开源软件背后的  Tukaani 项目计划中。除了一个 gmail 地址外,该账户没有任何身份信息。

安全专家 Michal Zalewski 指出,Jia Tan 很可能是一个化名。

在专门负责运营 XZ Utils 项目的 Tukkaani 组织中,也可以看到该项目只有两名维护人员:一个就是 Jia Tan,另一个是 Lasse Collin。

Lasse Collin (Larhzu)自从 2009 年 XZ Utils 项目一开始就加入了。

不过,在维护这个项目过程中,Lasse Collin 也遭遇不少挫折。彼时,有用户斥责 Lasse Collin ,声称他对项目维护不积极,要求他从 xz 管理员的职位上退下来,也希望他能尽快合并个补丁。

Lasse Collin 随即回复,“我没有失去对维护项目的兴趣,但自己的照顾能力已经相当有限,主要是由于长期的心理健康问题,也由于其他一些事情困扰。”

在这件事之后,Lasse Collin 也将从起初就对 XZ 项目充满激情的 Jia Tan 设置为项目维护者。

自此,Lasse Collin 通常会在发布的 xz 压缩包(由多个文件组成的捆绑包)上签名。不过,他让 Tan 来处理最后几个版本。

Collin 对 Tan 的了解有多少并不清楚。就在这场混乱发生之前,Collin 曾一度退网,没有出现在大众视野中,主要就是 Jia Tan 在更新维护。

除了种种迹象剑指 Jia Tan 外,多家公司的一线工程师透露,此前有声称是 Jia Tan 的人一直在鼓动他们使用带后面的 XZ 版本。

其中,红帽公司工程师 Richard WM Jones 在 Hacker News 上透露称,他曾与后门的作者有过明显的接触。

「非常恼人的是,这个后门的作者与我沟通了几周,试图将 xz 5.6.x 添加到 Fedora 40 和 41 中,说它有 “很棒的新功能”。我们甚至和他一起修复了 valgrind 问题(现在看来,这个问题是由他添加的后门引起的)。如今这个项目在违反了规定后,我们不得不在昨晚争分夺秒地修复了问题。

他加入 xz 项目已有两年时间,添加了各种二进制测试文件,老实说,以他的复杂程度,在没有得到证实之前,我甚至会怀疑 xz 的旧版本。」

另外,还有人以 Jia Tan 的名义访问 Ubuntu 开发者网站,要求将后门版本 XZ 5.6.1 合并到生产版本中,因为这一版本修复了导致 Valgrind 工具出现故障的错误。

“这可能会破坏构建脚本和测试管道,因为这些脚本和管道需要 Valgrind 的特定输出才能通过”,Jia Tan 这个账号在发布下面 Bug 描述时说道。 

有网友 Zaleski 怀疑,「鉴于 JiaT75 的作品质量普遍较高,它并非业余爱好者的作品。所有迹象都表明,这是一次专业的、有偿的行动。」

后门带来的影响

毋庸置疑,这是一次蓄谋已久的“投毒”事件,倘若没有被偶然间发现,后果将不堪设想,甚至是灾难级别的。

如果你运行 Linux 或 macOS 系统,很可能拥有某些版本的 xz 和 liblzma 依赖项,并这些版本来解压缩软件包以进行安装和更新。

有研究人员称,这些恶意版本故意干扰 SSH 执行的身份验证,SSH 是一种用于远程连接系统的常用协议。SSH 提供了强大的加密功能,确保只有授权方才能连接到远程系统。该后门的设计目的是让恶意行为者破解身份验证,并在未经授权的情况下访问整个系统。该后门通过在登录过程的关键阶段注入代码来发挥作用。

对于其严重程度,开放源代码维护者 Filippo Valsorda 在 BlueSky 上写道:“这可能是我们在公开场合看到的执行得最好的供应链攻击,它是一个噩梦般的场景:在一个广泛使用的库中存在恶意的、有能力的、授权的上游。”

就目前而言,XZ 首席维护者 Lasse Collin 在博客上进行了初步简短的回应:

此页面目前很短,但随着我了解有关该事件的更多信息,它会进行更新。最有可能发生在 2024 年 4 月的第一周。

XZ 项目的 Git 仓库位于 git.tukaani.org。

xz.tukaani.org DNS 名称 (CNAME) 已被删除。XZ 项目目前没有主页。这将在几天内修复。

事实

  • CVE-2024-3094

  • XZ Utils 5.6.0 和 5.6.1 发行版压缩包包含后门。这些压缩包由 Jia Tan 创建并签名。

  • 由 Jia Tan 创建的压缩包由他签名。任何由我签名的压缩包均由我创建。

  • 我(Larhzu)和 Jia Tan 的 GitHub 账户均已暂停。

  • xz.tukaani.org(DNS CNAME)托管在 GitHub 页面上,因此也已关闭。在不久的将来,它可能会移回 tukaani.org 主域。

  • 只有我能访问 tukaani.org 主网站、git.tukaani.org 资源库和相关文件。Jia Tan 只能访问托管在 GitHub 上的东西,包括 xz.tukaani.org 子域(也只能访问该子域)。

Jia Tan 为何要这么做,也需要静待时间与其内部的进一步调查。

当前值得庆幸的是,引入 XZ Utils 5.6.0 和 5.6.1 的主要是滚动发布和快速更新的发行版,例如 Fedora Linux 40 和 Fedora Rawhide 以及 Debian 高级发行版,尚未引起严重后果。

截至目前:

  • 红帽公司已确认,Fedora Rawhide(Fedora Linux 的当前开发版本)和 Fedora Linux 40 测试版包含受影响的 xz 库版本(5.6.0、5.6.1),而红帽企业 Linux (RHEL) 的任何版本均未受到影响。

  • OpenSUSE 维护者称,在 3 月 7 日至 3 月 28 日期间,openSUSE Tumbleweed 和 openSUSE MicroOS 包含了受影响的 xz 版本,并就这些版本的用户应采取的措施提供了建议。

  • Debian 维护者宣布,目前尚未发现任何 Debian 稳定版本受到影响,但受影响的软件包是 Debian 测试版、不稳定版和实验版的一部分,“敦促这些版本的用户更新 xz-utils 软件包”。

  • OffSec 证实,在 3 月 26 日至 3 月 29 日期间更新过安装包的 Kali Linux 用户也受到了影响。

  • 一些 Arch Linux 虚拟机和容器镜像以及一种安装介质包含受影响的 XZ 版本。

  • Ubuntu 表示,没有发布的 Ubuntu 版本受此问题影响。

  • 国内的统信软件官方宣布,已对旗下所有产品完成了排查,确认包括统信 UOS 桌面操作系统与服务器操作系统各版本均不受其影响,用户可以放心使用。

Xz Utils 适用于大多数(如果不是全部)Linux 发行版,但并非所有发行版都默认包含它。任何使用 Linux 的人都应该自查一下,以确定系统是否受到影响,防范于未然。

参考:

https://arstechnica.com/security/2024/03/backdoor-found-in-widely-used-linux-utility-breaks-encrypted-ssh-connections/

https://thenewstack.io/linux-xz-backdoor-damage-could-be-greater-than-feared/

https://news.ycombinator.com/item?id=39865810

本文文字及图片出自 CSDN

余下全文(1/3)
分享这篇文章:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注