XZ Utilѕ⼯具库恶意后⻔植⼊漏洞(CVE-2024-3094)排查处理

news2024/11/26 17:30:59

一、漏洞描述

近⽇,互联⽹安全监测发现XZ Utilѕ ⼯具库恶意后⻔植⼊漏洞(CVE-2024-3094),3⽉29⽇有开发⼈员发帖称发现了涉及XZ包中的供应链攻击,进⼀步溯源发现SSH使⽤的上游liblzma库被植⼊了后⻔代码,主要存在于 5.6.0 到5.6.1版本之间;从 5.6.0 版开始,发现该恶意代码修改了liblzma代码中的函数,通过一系列复杂的混淆处理,liblzma 编译过程从源代码中存在的伪装测试文件中提取了一个预编译对象文件,然后用来修改 liblzma 代码中的特定函数。这样就产生了一个经过修改的 liblzma 库,任何与该库链接的软件都可以使用它,拦截并修改与该库交互的数据。攻击者可能利用这一漏洞在受影响的系统上绕过SSH的认证获得未授权访问权限,执行任意代码,进行后门远程未经授权访问整个系统。

在这里插入图片描述

XZ是⼀种⾼压缩⽐的数据压缩格式,它帮助将⼤⽂件格式压缩为更⼩、更易管理的⼤⼩,以便通过⽂件传输进⾏共享。liblzma是⼀个⽤于处理XZ压缩格式的开源软件库。xz由Tukaani项⽬开发,⼏乎存在于每个Linux发⾏版中,⽆论是社区项⽬还是商业产品发⾏版,此漏洞影响范围较⼤,目前的调查表明,这些呗恶意代码修改的包只存在于Red Hat社区生态系统中的Fedora 40和Fedora Rawhide中。因该恶意代码是在编译过程引入的,目前该恶意代码还不存在于XZ的Git发行版中,相关项目已经紧急下线,目前仅存在于完整的下载包中。
在这里插入图片描述

影响范围:xz == 5.6.0、xz == 5.6.1、liblzma == 5.6.0、liblzma == 5.6.1及使⽤了受影响版本XZ的操作系统或软件如openSUSE、Fedora 41、Liblzma、Debian⾮稳定的测试版(SID) 5.5.1alpha-0.1 到 5.6.1-1;更多参考影响列表

处理:请立即停止使用 Fedora 41 或 Fedora Rawhide ,以及Debian相关测试版,使用了受影响版本的XZ Util需降级到5.4.6(XZ Utils 5.4.6稳定版)及以下,可参考:OS对应默认版本,其中5.2.5涉及CVE-2020-22916漏洞;

在这里插入图片描述
在这里插入图片描述

二、排查处理

1、⽐对影响范围中的组件类型及版本,看是否涉及以上版本;如果存在⼿动安装xz项⽬的情况,可通过如下命
令查看系统本地是否安装了受影响的XZ,如果输出为 5.6.0 或 5.6.1 ,说明您的系统可能已被
植⼊后⻔: xz --version

2、如果确实正中受影响版本,利用以下脚本查看是否漏洞被利用:

#! /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

另外一个来自 Baroni Fabio写的检查脚本,如下所示,执行前请先试读了解脚本执行过程:


#!/bin/bash
# CVE-2024-3094-checker.sh
# Quick and dirty PoC for checking whether a vulnerable version of xz-utils is installed
# https://nvd.nist.gov/vuln/detail/CVE-2024-3094
# Author Baroni Fabio

# This shell script is provided as-is and without warranty of any kind, express or implied.
# By executing this script, you acknowledge that you do so at your own risk.
# The author(s) of this script shall not be liable for any damages or issues that may arise from its use, including but not limited to data loss, system instability, or any other unintended consequences. 
# It is recommended to review the script and understand its functionality before running it, and to ensure that appropriate backups are in place.
# Use of this script implies your acceptance of these terms.


# Detect package manager
if command -v apt-get &>/dev/null; then
    PKG_MANAGER="apt-get"
elif command -v yum &>/dev/null; then
    PKG_MANAGER="yum"
elif command -v zypper &>/dev/null; then
    PKG_MANAGER="zypper"
else
    echo "Unsupported package manager. Exiting."
    exit 1
fi

if [ "$PKG_MANAGER" = "zypper" ]; then

    version=$(rpm -q xz)
    if [[ $version =~ (5\.6\.(0|1)) && ! $version =~ revertto ]]; then
        echo "It seems you have a vulnerable version of the xz package installed on your system"
        echo "OpenSuse has released a patched version that avoids this CVE, running zypper to update the xz package..."
        sudo zypper refresh
        sudo zypper update xz
        if [ $? -eq 0 ]; then
            echo "xz package updated successfully. Now it is advisable to reboot"
        else
            echo "xz package update failed"
        fi
        
        if lsb_release -d | grep -q "Tumbleweed"; then
            echo "OpenSuse recommends openSUSE Tumbleweed users where SSH is exposed to the internet to make a fresh installation of the system and change credentials, as it’s unknown if the backdoor has been exploited."
            echo "Due to the sophisticated nature of the backdoor an on-system detection of a breach is likely not possible."
            echo "Also rotation of any credentials that could have been fetched from the system is highly recommended."
        fi
    else
        echo "Your OpenSuse installation is probably safe."
    fi
elif [ "$PKG_MANAGER" = "apt-get" ]; then
    version=$(dpkg -l | grep "xz-utils" | awk '{print $3}')
    if [[ "$version" == *"5.6.0"* || "$version" == *"5.6.1"* ]]; then
        echo "Vulnerable version of xz-utils found: $version"
        read -p "Do you want to attempt installing the stable uncompromised xz-utils 5.4.6 version from source? (y/n): " choice
        if [[ "$choice" == "y" || "$choice" == "Y" ]]; then
            echo "Downloading xz-utils 5.4.6 from source..."
            wget https://github.com/tukaani-project/xz/releases/download/v5.4.6/xz-5.4.6.tar.gz
            tar -zxvf xz-5.4.6.tar.gz
            cd xz-5.4.6
            echo "Configuring xz-utils..."
            ./configure
            echo "Compiling xz-utils..."
            make
            echo "Installing xz-utils..."
            sudo make install
            echo "xz-utils 5.4.6 installed successfully."
        else
            echo "You chose not to install the package automatically. Install manually if needed. Exiting."
        fi
    else
        echo "You appear to be safe."
    fi
fi

脚本示例3:

#检查系统安装了哪个版本的XZ
for xz_p in $(type -a xz | awk '{print $NF}' | uniq); 
do 
  strings "$xz_p" | grep "xz (XZ utils)" || echo "No match found for $xz_p"; 
done

3、处置建议

⽬前 GitHub 已经关停了整个xz项⽬。xz项⽬⽬前官⽅尚⽆最新版本,需对软件版本进⾏降级⾄5.4.6,但有人在社区爆料,攻击者可能已补发5.4.6的恶意版本,故可选5.4更低的版本,完成后进行漏洞扫描检测;Fedora Linux 40 ⽤户需 xz 回退到 5.4.x 版本可参考Fedora Linux 40 Beta、openSUSE:Factory / xz、perl-Compress-Raw-Lzma

软件下载:https://jaist.dl.sourceforge.net/project/lzmautils/xz-5.4.6.tar.gz
SHA1:a8262cf6e4ecf878955e236cea09ad5dc80c3fb8
MD5:08a6d92f44bf3a28fd5c61695101dd22

yum list installed|grep xz
yum info xz*|grep 5.*
yumdownloader xz-5.2.4
rpm -ivh xz-utils-5.2.4-1.el7.x86_64.rpm
rpm -q xz
#或,对于具有依赖关系的包,YUM降级困难,YUM降级不会自动解决依赖关系,因此必须手动完成
yum downgrade xz-5.2.4-2.el7_9.x86_64
yum downgrade xz xz-libs xz-devel xz-compat-libs xz-lzma-compat

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1561113.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 环境安装 Elasticsearch 8.X

安装前说明 首先确定操作系统,在Linux发行版上执行uname -a查看具体系统。我是Ubuntu系统,可以用直接用apt-get安装,也可以下载tar.gz包手动安装。使用apt-get安装更方便快速,但不同的文件会被安装到不同的目录,不方便…

金额转换.java

题目: 奖金额转换成大写的七位数 分析:获取每一位数字,将数字转为大写的,数字前面添零,补成七位数,最后依次拼接单位 package text; import java.util.Scanner; public class MoneySwitch {public static v…

Qt实现Kermit协议(一)

1 概述 Kermit文件运输协议提供了一条从大型计算机下载文件到微机的途径。它已被用于进行公用数据传输。 其特性如下: Kermit文件运输协议是一个半双工的通信协议。它支持7位ASCII字符。数据以可多达96字节长度的可变长度的分组形式传输。对每个被传送分组需要一个确认。Kerm…

排序——选择排序(直接选择排序和堆排)

本专栏和大家分享关于排序的算法,其中有插入排(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排)、交换排序(冒泡排序和快速排序)、归并排序以及其他非基于比较的排序 本文与大家分享选择排序 目录 …

多微信聚合聊天神器,让你的社交更高效!

对于那些拥有多个微信号的用户来说,频繁地在不同微信号和设备之间切换既麻烦又容易搞混。这时候,一款多微信聚合聊天神器——微信管理系统应运而生,为我们带来了极大的便利与高效。 下面一起来看看它都有哪些功能吧! 1、多微信同…

webpack项目打包console git分支、打包时间等信息 exec

相关链接 MDN toLocaleString child_process Node.js strftime 格式 代码 buildinfo.js const { execSync, exec } require("child_process"); // exec: 在 Windows 执行 bat 和 cmd 脚本// execSync 同步 // exec 异步// exec 使用方法 // exec(git show -s,…

什么是递归与示例

什么是递归: 递归是将大问题拆成相同的若干小问题,利用自己调用自己的方式解决问题。 递归的重点就是如何将问题拆解,并在什么样的条件跳出自我循环,这是递归的难点。 如何理解递归: 示例:已知有五个人…

Lazarus 4 Android 环境搭建

一、下载相关文件 最关键的就是这两个文件,其他的JDK、NDK、Java环境另说。 这里要注意,gradle版本必须小于7,不然无法使用。 二、IDE内部设置 安装完成laz4A之后 可能会报错,无需理会,启动IDE即可。 安装卸载软件…

首个基于SSM-Transformer混合架构,开源商业大模型Jamba

3月29日,知名AI研究实验室AI21在官网开源了,首个基于SSM-Transformer混合架构的商业大模型——Jamba。 目前,ChatGPT、Stable Difusion 、Lyria等产品使用的皆是Transformer架构,虽然在捕捉序列内长距离依赖关系、泛化能力、特征…

NineAi3.5 –支持GPT绘图,语音播报,联网访问,上下文关联,语音模式

NineAi3.5 –支持GPT绘图,语音播报,联网访问,上下文关联,语音模式 基于ChatGPT开发的一个人工智能技术驱动的自然语言处理工具,它能够通过学习和理解人类的语言来进行对话, 还能根据聊天的上下文进行互动&…

5.6 物联网RK3399项目开发实录-Android开发之U-Boot 编译及使用(wulianjishu666)

物联网入门到项目实干案例下载: https://pan.baidu.com/s/1fHRxXBqRKTPvXKFOQsP80Q?pwdh5ug --------------------------------------------------------------------------------------------------------------------------------- U-Boot 使用 前言 RK U-B…

多系统使用ffmpeg读取麦克风数据

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、命令行1.Ubuntu1.alsa2.pulseaudio 2.Windows1.dshow 二、代码总结 前言 最近在搞一个项目需要用到麦克风读取数据并分析,我的开发环境是Ubunt…

[Windows]服务注册工具(nssm)

文章目录 官网下载地址百度云下载地址NSSM常用命令 使用场景:例如现在我们想开启自动启动一个Java服务,nginx,node等。 官网下载地址 https://nssm.cc/download 百度云下载地址 链接:https://pan.baidu.com/s/111fkBWIS7CTlWIj80Kc8Sg?pwdanan 提取码…

解码视频流在opengl中的贴图投影计算

解码视频流在opengl中的贴图投影计算 修改顶点着色器cpp 文件放大缩小 我们把视频当成纹理,首先要确定贴入的坐标,原始坐标如下所示 static float vertices[] {// ---- 位置 ---- ---- 颜色 ---- - 纹理坐标 -1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f…

js计算点到直线的距离并使用canvas可视化

使用方程计算 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Distance to Line Visualization</…

题目:小明的背包2(蓝桥OJ 1175)

问题描述&#xff1a; 解题思路&#xff1a; 本题是完全背包模板题&#xff0c;与01背包的不同处在于状态是由小到大转移。 代码&#xff1a; #include <bits/stdc.h> using namespace std; const int N 1e3 9;int dp[N]; // N表示体积int main() {int n, m;cin >…

健身运动蓝牙耳机什么牌子好?五大业内顶级优品推荐

在当下这个健身热潮席卷的时代&#xff0c;越来越多的人开始注重运动与健康&#xff0c;而音乐作为运动时的最佳伴侣&#xff0c;无疑为锻炼过程增添了不少乐趣。为了在运动时享受音乐&#xff0c;一款优质的健身运动蓝牙耳机显得尤为重要&#xff0c;市场上各大品牌纷纷推出自…

每日面经分享(SpringBoot part4:Controller层)

SpringBoot Controller层的作用 a. 请求映射&#xff1a;Controller层使用注解&#xff08;如RequestMapping、GetMapping、PostMapping等&#xff09;将HTTP请求映射到相应的方法上。这些方法根据URL路径、请求方法、请求参数等来决定要执行的操作。 b. 参数解析&#xff1a;C…

KUKA机器人更改时间和HMI最小化设置

在使用 KUKA 机器人时&#xff0c;示教器上左边有个“表”的图标&#xff0c;点一下就会显示时间。但一般不准&#xff0c;想要更改时间可以通过HMI最小化后进行更改设置。更改时间需要将示教器界面最小化&#xff0c;也就是进入Windows 界面。通过以下步骤可以进行设置&#x…

ES学习日记(二)-------集群设置

上一节写了elasticsearch单节点安装和配置,现在说集群,简单地说就是在多台服务器上搭建单节点,在配置文件里面增加多个ip地址即可,过程同单节点部署,主要说集群配置 注意:不建议在之前单节点es上修改配置为集群,据说运行之后会生成很多文件,在单点基础上修改容易出现未知问题,…