
Exploit para CVE-2023-5178
El exploit para la vulnerabilidad CVE-2023-5178: NVMe-oF-TCP, que es un error de lógica en el controlador NVMe-oF-TCP durante el manejo de una Initialize Connection Request corrupta. Conduce a un doble-free con condición de carrera en kmalloc-96, que puede explotarse para obtener LPE (ver la demo más abajo).
El exploit está dirigido a Ubuntu 23.10 con el kernel 6.5.0-9-generic (la última versión del kernel afectada).
v6 cambiando los símbolos del kernel
y ajustando la ropchain.v5 del kernel requiere algunas modificaciones menores que discutiré en el informe. La explotación en el kernel v5 es más fácil (lo discutiré en el informe) y es más fiable.El fallo fue descubierto por Alon Zahavi. Publicó una buena descripción de la vulnerabilidad en este artículo de openwall.
Mira el vídeo aquí.

nvmet, nvmet-tcp cargados en el kernel.libfuse3-dev (está por defecto en Ubuntu, pero de todos modos). Si no lo tienes, lo mejor es descargar y
compilar la versión desde github.
Yo usé 3.14.0, pero debería funcionar con otras versiones también.SLUB, pero la condición de carrera hace que las cosas sean un poco complicadas. De todos modos, describiré en el informe cómo se puede mejorar para manejar máquinas con múltiples CPUs.git clone https://github.com/rockrid3r/CVE-2023-5178
cd CVE-2023-5178
make
./build/xpl # run the exploit
libfuse3-dev, debes enlazar manualmente la libfuse compilada.
Consulta el Makefile para saber cómo compilar. Reemplaza -lfuse3 por -l:path-to-libfuse.so. No olvides añadir la ruta de las cabeceras con -I /path/to/libfuse-headers/.
Ejecuta el exploit con:LD_PRELOAD_PATH=/path/to/libfuse.so ./build/exploit
Para quienes quieran comprobar si la vulnerabilidad está presente en sus sistemas, hay un archivo src/poc.c que simplemente dispara el fallo.
Asume la configuración estándar de IP/puerto para NVMe-oF-TCP en tu sistema.
Debes ajustarlos si los tuyos no son los predeterminados:
#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
Compílalo y ejecútalo con
make build/poc
./build/poc
Solo tienes que ejecutarlo (quizás varias veces) y luego esperar un poco. Si la vulnerabilidad está presente, el sistema se bloqueará.
Consulta el informe completo aquí