
Exploit para CVE-2023-5178
O exploit para
CVE-2023-5178: vulnerabilidade NVMe-oF-TCP, que é um erro de lógica no driver NVMe-oF-TCP durante o tratamento de Initialize Connection Request corrompido. Isso leva a double-free com condição de corrida em kmalloc-96, que pode ser explorado para obter LPE (veja a demonstração abaixo).
O exploit tem como alvo o Ubuntu 23.10 com o kernel 6.5.0-9-generic (a versão de kernel afetada mais recente).
v6, alterando os símbolos do kernel
e ajustando a ropchain.v5 do kernel requer algumas modificações menores que discutirei no writeup. A exploração no kernel v5 é mais fácil (discutirei no writeup) e mais confiável.O bug foi descoberto por Alon Zahavi. Ele publicou uma boa descrição da vulnerabilidade neste artigo do openwall.
Veja o vídeo aqui.

nvmet, nvmet-tcp carregados no kernel.libfuse3-dev (ele já vem por padrão no Ubuntu, mas mesmo assim). Se não tiver, a melhor ideia é baixar e
compilar o release do github.
Eu usei a 3.14.0, mas deve funcionar com outras versões também.SLUB funciona, mas a condição de corrida torna as coisas um pouco complicadas. De qualquer forma, descreverei no writeup como isso pode ser melhorado para lidar com máquinas multi-CPU.git clone https://github.com/rockrid3r/CVE-2023-5178
cd CVE-2023-5178
make
./build/xpl # run the exploit
libfuse3-dev, você deve manualmente linkar o libfuse compilado.
Veja o Makefile para saber como compilar. Substitua -lfuse3 por -l:path-to-libfuse.so. Não se esqueça de adicionar o caminho dos cabeçalhos com -I /path/to/libfuse-headers/.
Execute o exploit com:LD_PRELOAD_PATH=/path/to/libfuse.so ./build/exploit
Para aqueles que querem testar se a vulnerabilidade está presente em seus sistemas, existe o arquivo src/poc.c que simplesmente dispara o bug.
Ele assume a configuração padrão de ip/porta para NVMe-oF-TCP no seu sistema.
Você deve ajustá-los se os seus não forem os padrões:
#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
Compile e execute-o com
make build/poc
./build/poc
Você deve apenas executá-lo (talvez várias vezes) e então esperar um pouco. Se a vulnerabilidade estiver presente, o sistema irá travar.
Veja o writeup completo aqui.