CVE-2023-5178:NVMe-oF-TCP 漏洞 的利用程序,该漏洞是 NVMe-oF-TCP 驱动程序在处理损坏的 Initialize Connection Request 时的一个逻辑错误。它导致 kmalloc-96 中的竞态双重释放,可以被利用来获得 LPE(参见下面的演示)。
该漏洞利用针对 Ubuntu 23.10 及 6.5.0-9-generic 内核(最新受影响的内核版本)。
v6 内核。v5 需要进行一些小的修改,我将在文章中进行讨论。在 v5 内核上进行利用更容易(我将在文章中讨论),并且更可靠。该漏洞由 Alon Zahavi 发现。他在这篇 openwall 文章 中发布了很好的漏洞描述。
视频见 此处。

nvmet、nvmet-tcp 模块加载到内核中。libfuse3-dev(Ubuntu 默认安装,但无论如何)。如果没有,最好从 github 下载并编译发布版本。我使用了 3.14.0,但其他版本应该也能工作。SLUB 的工作原理,但竞态条件使情况有些棘手。无论如何,我将在文章中描述如何改进以支持多CPU机器。git clone https://github.com/rockrid3r/CVE-2023-5178
cd CVE-2023-5178
make
./build/xpl # run the exploit
libfuse3-dev,你应该手动链接编译好的 libfuse。查看 Makefile 了解如何编译。将 -lfuse3 替换为 -l:path-to-libfuse.so。别忘了添加头文件路径 -I /path/to/libfuse-headers/。
使用以下命令运行利用:LD_PRELOAD_PATH=/path/to/libfuse.so ./build/exploit
对于想要测试系统是否存在漏洞的用户,有一个 src/poc.c 文件可以简单地触发该漏洞。它假设系统上 NVMe-oF-TCP 的 IP/端口为标准配置。如果你的配置不是默认的,应该进行调整:
#define NVME_SERVER_IP "0.0.0.0" // ip of vulnerable host in LAN (localhost here).
#define NVME_SERVER_PORT 4420 // port on which NVMe-oF-TCP is set up on vulnerable host
编译并使用以下命令运行:
make build/poc
./build/poc
只需运行它(可能需要多次),然后等待片刻。如果存在漏洞,系统将会崩溃。
完整文章见 此处