Linux 圈「地震」:主流压缩工具 XZ 被曝安全漏洞,活跃维护者潜伏三年植入 SSH 后门
红帽发布了一份 “针对 Fedora Linux 40 和 Fedora Rawhide 用户的紧急安全警报” 指出,最新版本的 xz 5.6.0/5.6.1 工具和库中包含恶意代码,可能允许未经授权的远程系统访问。
xz 是一种通用数据压缩格式,几乎存在于每个 Linux 发行版中,包括社区项目和商业产品发行版。
从本质上讲,它有助于将大文件格式压缩(然后解压缩)为更小、更易于管理的大小,以便通过文件传输进行共享。
xz 和 liblzma 5.6.0~5.6.1 版本,可能包括的发行版 / 包管理系统有:
Fedora 41 / Fedora Rawhide Debian Sid Alpine Edge x64 架构的 homebrew 滚动更新的发行版,包括 Arch Linux / OpenSUSE Tumbleweed
如果你的系统使用 systemd 启动 OpenSSH 服务,你的 SSH 认证过程可能被攻击。非x86-64 架构的系统不受影响。
if ! (echo "$build" | grep -Eq "^x86_64" > /dev/null 2>&1) && (echo "$build" | grep -Eq "linux-gnu$" > /dev/null 2>&1);then
你可以在命令行输入 xz –version 来检查 xz 版本,如果输出为 5.6.0 或 5.6.1 ,说明你的 xz-utils 已被植入后门。
$ xz --version
xz (XZ Utils) 5.6.1
liblzma 5.6.1
目前迹象表明,后门作者有选择性的针对 linux 发行版下手。但这个 liblzma 可不只 Linux 上用。比如目前流行的 iOS 越狱环境,大部分 tweak 包还是以 .deb 格式发行,比较新的版本就用到了 lzma 作为压缩。除此之外,近期有在 macOS 上使用 brew 安装过 xz 这个包也受影响,暂时不能证明有恶意行为。
检测及解决方法
降级到 5.6.0以下版本 更新到官方最新版 5.6.4
检测脚本
#! /bin/bash
set -eu
# find path to liblzma used by sshd
path="$(ldd $(which sshd) | grep liblzma | grep -o '/[^ ]*')"
# does it even exist?
if [ "$path" == "" ]
then
echo probably not vulnerable
exit
fi
# check for function signature
if hexdump -ve '1/1 "%.2x"' "$path" | grep -q f30f1efa554889f54c89ce5389fb81e7000000804883ec28488954241848894c2410
then
echo probably vulnerable
else
echo probably not vulnerable
fi
由于违反了 GitHub 的服务条款,GitHub 工作人员已禁止访问该版本库。如果您是该版本库的所有者,可以联系 GitHub 支持部门了解详情。
据称向 xz 添加恶意代码的攻击者被认为处心积虑,潜伏长达三年时间。使用中文拼音的攻击者 JiaT75 (Jia Tan) 于 2021 年创建了 GitHub 账号,之后积极参与了 xz-utils 的开发,获取信任之后成为了该项目的维护者之一。
过去几个月,JiaT75 开始非常巧妙的悄悄加入恶意代码,“分阶段通过添加测试用例数据为掩盖放入了恶意代码,并在发布时在m4脚本的目录中添加了一些精妙的把恶意代码重新组装、解压缩的脚本,在库中添加了劫持某 OpenSSL 函数的功能,添加了一个 SSH 后门。
”创建后门版本之后 JiaT75 还积极联络主要 Linux 发行版维护者,以该版本包含“很棒新特性”为由督促他们使用后门版本。但后门代码存在 bug,会导致崩溃等,此人随后与 Linux 开发者们频繁联络通信,试图修复问题,并建议他们发现问题后不要公开。
目前 JiaT75 的账号以及 xz-utils 库都已被 GitHub 关闭。
xz 后门事件凸显了维护者在维护一个基本上不会得到多少外界帮助的开源项目时所面临的挑战,当别有用心的人热情提供帮助,你真的难以分辨对方是真心还是假意。
对于 xz 项目原唯一维护者 Lasse Collin 邮件列表交流的分析显示,这位维护者早就筋疲力尽了,他承认如果有 bug 会去修,但开发新功能基本上不可能了。
这种情况在 JiaT75(Jia Tan)积极提供帮助后发生了变化,Jia Tan 是少数或者可能是唯一一位愿意“帮助”而不是抱怨开发停滞的人。
Lasse Collin 表示考虑让 Jia Tan 扮演更重要的角色,甚至让其接手维护。对于不断抱怨和提出要求的用户,他强调这是一个无薪水的业余项目。在“用户”不断的要求之下,Jia Tan 成为了项目的共同维护者。