
Exploit per CVE-2023-5178
L'exploit per
CVE-2023-5178: vulnerabilità NVMe-oF-TCP, che è un errore logico nel driver NVMe-oF-TCP durante la gestione di una Initialize Connection Request corrotta. Porta a un doppio free race condition in kmalloc-96, che può essere sfruttato per ottenere LPE (vedi demo sotto).
L'exploit è mirato a Ubuntu 23.10 con kernel 6.5.0-9-generic (l'ultima versione del kernel affetta).
v6 precedenti modificando i simboli del kernel e regolando la ropchain.v5 richiede piccole modifiche che discuterò nel writeup. Lo sfruttamento nel kernel v5 è più semplice (ne parlerò nel writeup) ed è più affidabile.Il bug è stato scoperto da Alon Zahavi. Ha pubblicato una buona descrizione della vulnerabilità in questo articolo su openwall.
Guarda il video qui.

nvmet, nvmet-tcp caricati nel kernel.libfuse3-dev (è installato di default su Ubuntu, ma comunque). Se non lo hai, l'idea migliore è scaricare e compilare la release da github.
Ho usato la versione 3.14.0, ma dovrebbe funzionare anche con altre versioni.SLUB, ma la race condition rende le cose un po' complicate. In ogni caso, descriverò nel writeup come può essere migliorato per gestire macchine multi-CPU.git clone https://github.com/rockrid3r/CVE-2023-5178
cd CVE-2023-5178
make
./build/xpl # esegui l'exploit
libfuse3-dev, dovresti collegare manualmente la libfuse compilata.
Vedi Makefile per come compilare. Sostituisci -lfuse3 con -l:percorso-della-libfuse.so. Non dimenticare di aggiungere il percorso degli header con -I /percorso/degli/header-libfuse/.
Esegui l'exploit con:LD_PRELOAD_PATH=/percorso/della/libfuse.so ./build/exploit
Per chi volesse testare se la vulnerabilità è presente sul proprio sistema, c'è il file src/poc.c che attiva semplicemente il bug.
Assume la configurazione standard di ip/porta per NVMe-oF-TCP sul tuo sistema.
Dovresti modificarli se i tuoi sono diversi da quelli predefiniti:
#define NVME_SERVER_IP "0.0.0.0" // ip dell'host vulnerabile nella LAN (localhost qui).
#define NVME_SERVER_PORT 4420 // porta su cui è configurato NVMe-oF-TCP sull'host vulnerabile
Compilalo ed eseguilo con
make build/poc
./build/poc
Dovresti semplicemente eseguirlo (forse più volte) e poi aspettare un po'. Se la vulnerabilità è presente, il sistema si bloccherà.
Vedi il writeup completo qui