XZ是类Unix操作系统上的一种无损数据压缩格式,通常与gzibzip2 等其他常见数据压缩格式进行比较。 XZ Utils是一个命令行工具,包含XZ文件和liblzma的压缩和解压缩功能,liblzma是一种用于数据压缩的类似zlib的API,并且还支持旧版 .lzma 格式。
3月29日,有开发人员在安全邮件列表上发帖称,他在调查SSH性能问题时发现了涉及XZ包中的供应链攻击,进一步溯源发现SSH使用的上游liblzma库被植入了后门代码,恶意代码可能允许攻击者通过后门版本的SSH非授权获取系统的访问权限。恶意代码修改了liblzma代码中的函数,该代码是XZ Utils软件包的一部分,链接到 XZ 库的任何软件都可以使用此修改后的代码,并允许拦截和修改与该库一起使用的数据。
事件历程
2021年,一个名为 JiaT75(Jia Tan)的用户在 GitHub 上创建了账户,并向 libarchive 项目提交了一个看似无害但实际可疑的补丁。这个补丁被合并到了代码中。
2022年,Jia Tan 通过邮件列表提交了一个补丁,随后一个新的人物 Jigar Kumar 开始施压要求合并这个补丁。不久之后,Jigar Kumar 开始向 XZ 项目的维护者 Lasse Collin 施压,要求增加另一位维护者。在这一过程中,JiaT75 开始对 XZ 项目做出贡献。
2023年,JiaT75 在 1 月 7 日合并了他们的第一个提交,表明他们已经获得了足够的信任。3 月份,Google 的 oss-fuzz 项目的主要联系邮箱被更新为 Jia 的邮箱。
2024年,有人发现并报告了一个上游 XZ/liblzma 库中的后门,这个后门可能导致 SSH 服务器被攻陷。这个发现通过电子邮件发送给了 oss-security 邮件列表,并在文章中提供了详细的技术分析。
受影响版本
目前已知XZ Utils版本5.6.0和5.6.1受到影响,恶意代码还不存在于XZ的Git发行版中,仅存在于完整的下载包中。 已知的Linux发行版:
- XZ Utils == 5.6.0
- XZ Utils == 5.6.1
自查脚本
#! /bin/bash
set -eu
# 查找利用liblzma的sshd路径
path="$(ldd $(which sshd) | grep liblzma | grep -o '/[^ ]*')"
# 检验调用路径是否存在
if [ "$path" == "" ]
then
echo "XZ-CVE-2024-3094漏洞不存在"
exit
fi
# 检验函数签名
if hexdump -ve '1/1 "%.2x"' "$path" | grep -q f30f1efa554889f54c89ce5389fb81e7000000804883ec28488954241848894c2410
then
echo "XZ-CVE-2024-3094漏洞存在"
else
echo "XZ-CVE-2024-3094漏洞不存在"
fi
或手动运行 xz -V 或 xz -version检查xz版本。
解决方案
若使用了受影响版本xz/liblzma的操作系统(Fedora 41、Debian sid 测试版等)建议更新至安全版本。具体详情可在查询 https://repology.org/project/xz/versions