Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2024-3094 — 复现XZ Utils后门(CVE-2024-3094)的教育实验室,带有自定义Ed448密钥对。包括修补后的liblzma、systemd服务和利用客户端,用于授权安全研究。 | Kitploit
工具/GitHubGitHub/h3raklez/cve-2024-3094
漏洞分析漏洞利用恶意软件分析密码学渗透测试供应链安全学习与教育实验室与实践
GitHubh3raklez/cve-2024-3094

CVE-2024-3094

复现XZ Utils后门(CVE-2024-3094)的教育实验室,带有自定义Ed448密钥对。包括修补后的liblzma、systemd服务和利用客户端,用于授权安全研究。

查看仓库
115个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2024-3094 — XZ Utils 后门

仅用于教育和授权的安全研究目的。

漏洞描述

CVE-2024-3094 是 XZ Utils (liblzma) 版本 5.6.0 和 5.6.1 中引入的一个后门,于 2024 年 3 月 29 日由安全研究员 Andres Freund 发现。其 CVSS 评分为 10.0(严重)。

这是一个供应链攻击,由名为 "Jia Tan" (JiaT75) 的威胁行为者历时两年多实施。该行为者通过在项目内建立信任,最终获得共同维护者身份,并直接将后门引入发行版 tarball 中。

技术机制

后门的运作方式如下:

  1. 恶意 liblzma.so 通过 glibc 的 IFUNC 机制 挂钩 OpenSSH 中的 RSA_public_decrypt() 函数,拦截 SSH 认证过程。
  2. 当客户端连接时,后门会评估所呈现的 SSH 证书中的特定字段。
  3. 如果该字段包含一个使用 ChaCha20 加密并使用特定 Ed448 私钥签名的 payload,后门会通过 system() 以 sshd 权限(root)执行嵌入的命令。
  4. 如果签名无效,sshd 会继续正常流程,没有异常。

利用条件

  • 系统使用了 glibc(支持 IFUNC)
  • 已安装 XZ Utils 5.6.0 或 5.6.1
  • 通过 systemd 启动 sshd(关键要求——如果从命令行手动启动 sshd,IFUNC 挂钩不会激活)
  • x86-64 系统

最初受影响的发行版

  • Fedora Linux 40 beta / Rawhide
  • Debian unstable, testing, experimental
  • Kali Linux
  • Arch Linux(2024-02-24 至 2024-03-28 期间的镜像)

实验环境

本实验使用自定义 Ed448 密钥(而非原始行为者的密钥,该密钥从未公开)来复现后门机制。

为什么使用 chroot

在实际受影响的系统中没有使用 chroot。后门直接操作系统的 sshd,该 sshd 像加载任何其他共享库一样加载了恶意的 liblzma.so——对系统及其管理员来说完全透明。

在本实验中,我们仅出于实际原因使用 chroot:我们需要运行一个加载特定版本 liblzma.so 的 sshd,同时不替换宿主系统的库。这是针对研究环境的设计决策,并非反映后门在生产环境中的运作方式。

组件

组件描述
env_fs/用作 chroot 的最小 Ubuntu 22.04 文件系统
env_fs/usr/lib/x86_64-linux-gnu/liblzma.so.5使用自定义 Ed448 密钥修补的 liblzma 5.6.1
/etc/systemd/system/xzback.service在端口 2024 上启动易受攻击的 sshd 的 systemd 服务
/xzbot/xzbot从源码编译的漏洞利用客户端

目标堆栈

  • Ubuntu 22.04.1 LTS AMD64
  • glibc 2.35
  • OpenSSH 8.9p1
  • systemd 249
  • liblzma 5.6.1(已修补)

为本目标所做的修改

原始后门需要非常特定的条件,这些条件在实验环境中不会自动存在。以下是必要的修改:

1. 替换 liblzma.so

MagpieRYL 原始仓库中包含的 liblzma.so.5 使用了一个未知的 Ed448 密钥,与附带的 xzbot 二进制文件不一致。原始且真实的 liblzma.so.5.6.1 从 Debian 快照下载(sha256 已验证),并使用 amlweems/xzbot 中的 patch.py(seed=0)进行修补:

原始 sha256:  605861f833fc181c7cdcabd5577ddb8989bea332648a8f498b4eef89b8f85ad4
修补后 sha256:  ea7206ab4b0c3479ff1b478c8803adc9e7aeba243254a9f601b626ef8aa80e3d
修补偏移量:   0x24470

原始行为者的 Ed448 公钥被替换为:

5b 3a fe 03 87 8a 49 b2 82 32 d4 f1 a4 42 ae bd
e1 09 f8 07 ac ef 7d fd 9a 7f 65 b9 62 fe 52 d6
54 73 12 ca ce cf f0 43 37 50 8f 9d 25 29 a8 f1
66 91 69 b2 1c 32 c4 80 00

2. systemd 服务中的 Type=simple

原始服务使用 Type=notify,这要求 sshd 向 systemd 发送启动通知。chroot 内部的 sshd 不会发送该通知,导致超时。已更改为 Type=simple。

3. 临时 chroot 目录

sshd 需要 /run/sshd 用于权限分离。该目录在 chroot 中不存在,并且每次重启后都会被清除,因为 run/ 是一个 tmpfs。通过一个 ExecStartPre 在每次服务启动前自动重新生成该目录来解决此问题。


使用方法

从同一台机器利用

./xzbot -addr 127.0.0.1:2024 -cmd 'echo pwned > /tmp/result'
cat /home/user/CVE-2024-3094-backdoor-env-container/env_fs/tmp/result

从另一台机器利用

./xzbot -addr <TARGET_IP>:2024 -cmd 'echo pwned > /tmp/result'

漏洞利用生成文件的位置

命令在 chroot 内执行,因此后门上下文中在 /tmp/ 下创建的任何文件都存储在:

/home/user/CVE-2024-3094-backdoor-env-container/env_fs/tmp/

也就是说,如果命令是 echo pwned > /tmp/result,文件将位于:

/home/user/CVE-2024-3094-backdoor-env-container/env_fs/tmp/result

要定位漏洞利用生成的任何文件:

find /home/user/CVE-2024-3094-backdoor-env-container/env_fs/tmp/ -type f

关于 handshake failed: EOF 的说明

ssh: handshake failed: EOF 消息是预期且正常的。后门执行命令后直接关闭连接,而不建立 SSH 会话。这并不表示失败。


重要说明

本实验使用自定义加密密钥对(seed=0)。修补后的 liblzma.so 仅接受使用相应私钥签名的 payload,此私钥即为本环境中编译的 xzbot 所使用的密钥。任何其他客户端都会收到 EOF 且命令不会执行。


参考资料

  • 原始 Openwall 披露
  • amlweems/xzbot
  • MagpieRYL/CVE-2024-3094-backdoor-env-container
  • Datadog 安全实验室分析
  • 维基百科 — XZ Utils 后门

免责声明

本工具仅供教育和授权的安全测试使用。未经授权对不属于您或未经您明确书面许可的系统进行测试是违法的。作者对任何滥用行为不承担任何责任。

下载工具