
Exploit pour CVE-2023-5178
L'exploit pour
CVE-2023-5178 : vulnérabilité NVMe-oF-TCP, qui est une erreur logique dans le pilote NVMe-oF-TCP lors du traitement d'une Initialize Connection Request corrompue. Elle conduit à un double-free racé dans kmalloc-96, qui peut être exploité pour obtenir une élévation de privilèges locale (LPE) (voir la démo ci-dessous).
L'exploit cible Ubuntu 23.10 avec le noyau 6.5.0-9-generic (la dernière version de noyau affectée).
v6 antérieurs en modifiant les symboles du noyau
et en ajustant la ropchain.v5 du noyau nécessite quelques modifications mineures dont je discuterai dans l'article. L'exploitation sur le noyau v5 est plus facile (j'en parlerai dans l'article) et plus fiable.Le bug a été découvert par Alon Zahavi. Il a publié une bonne description de la vulnérabilité dans cet article openwall.
Voir la vidéo ici.

nvmet, nvmet-tcp chargés dans le noyau.libfuse3-dev (c'est le cas par défaut sur Ubuntu, mais au cas où). Si vous ne l'avez pas, la meilleure idée est de télécharger et
compiler la release depuis github.
J'ai utilisé 3.14.0, mais cela devrait fonctionner avec d'autres versions aussi.SLUB, mais la condition de course rend les choses un peu délicates. Quoi qu'il en soit, je décrirai dans l'article comment l'améliorer pour gérer les machines multi-CPU.git clone https://github.com/rockrid3r/CVE-2023-5178
cd CVE-2023-5178
make
./build/xpl # run the exploit
libfuse3-dev, vous devez lier manuellement la libfuse compilée.
Voir le Makefile pour savoir comment compiler. Remplacez -lfuse3 par -l:path-to-libfuse.so. N'oubliez pas d'ajouter le chemin des en-têtes avec -I /path/to/libfuse-headers/.
Exécutez l'exploit avec :LD_PRELOAD_PATH=/path/to/libfuse.so ./build/exploit
Pour ceux qui veulent tester si la vulnérabilité est présente sur leurs systèmes, il y a le fichier src/poc.c qui déclenche simplement le bug.
Il suppose la configuration standard d'ip/port pour NVMe-oF-TCP sur votre système.
Vous devez les ajuster si les vôtres ne sont pas par défaut :
#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
Compilez et exécutez-le avec
make build/poc
./build/poc
Vous devriez simplement l'exécuter (peut-être plusieurs fois) puis attendre un peu. Si la vulnérabilité est présente, le système plantera.
Voir l'article complet ici