
Exploit local d'élévation de privilèges par use-after-free dans nf_tables du noyau Linux, fonctionnel pour CVE-2026-23111, avec contournement de KASLR, chaîne ROP et écrasement de modprobe_path.
Un exploit fonctionnel d'élévation de privilèges locaux pour CVE-2026-23111, un use-after-free dans le sous-système nf_tables du noyau Linux. Testé sur linux-6.12.69 (x86-64).
L'exploit suppose un noyau cible compilé avec :
| Option | Valeur | Pourquoi |
|---|---|---|
CONFIG_NF_TABLES | y | sous-système vulnérable |
CONFIG_USER_NS | y | piloter nf_tables sans privilèges (namespace user+net) |
CONFIG_RANDOMIZE_BASE | y | KASLR — contourné à l'exécution (Phase 1) |
CONFIG_MEMCG | y | les objets atterrissent dans les caches kmalloc-cg-* (supposé par le spray) |
CONFIG_STATIC_USERMODEHELPER | n | modprobe_path doit être accessible en écriture |
SLAB_FREELIST_RANDOM / HARDENED | n | la freelist LIFO rend la récupération fiable |
Les offsets dans offsets.h sont spécifiques à une compilation de noyau — régénérez-les pour tout autre noyau
Nécessite musl-gcc (sudo apt install musl-tools).
make # builds exp + rootme (static ELFs)
make clean # remove built binaries
Les deux binaires sont statiques afin de s'exécuter dans un initramfs busybox minimal sans bibliothèques partagées.
exp s'attend à trouver rootme à côté de lui dans /cve-2026-23111-poc/ sur la cible.
offsets.h est généré à partir d'une compilation spécifique. Pour un vmlinux différent :
make offsets SYSTEM_MAP=/path/to/System.map
gen_offsets.sh extrait les symboles (single_start, modprobe_path, init_ipc_ns, msleep,
memcpy, …) et les gadgets ROP, tous sous forme d'offsets depuis la base du noyau. Vous devrez également
re-vérifier les offsets de structures intégrés dans exp.c (disposition de nft_chain, nft_expr_ops.validate,
init_ipc_ns + 0x110, msg_queue.q_messages, xa_node.slots) avec pahole / désassemblage si
votre noyau diffère significativement de 6.12.x.
Ce code est publié à des fins de recherche en sécurité défensive et d'éducation. Il cible une VM de laboratoire exécutant un noyau connu comme vulnérable. Ne l'utilisez pas contre des systèmes que vous ne possédez pas ou que vous n'êtes pas autorisé à tester. L'auteur décline toute responsabilité en cas de mauvaise utilisation.
| Fichier | Rôle |
|---|
exp.c | L'exploit (Phases 1 → 4). |
rootme.c | Petit helper statique setuid(0); execl("/bin/sh") utilisé pour obtenir un shell root. |
netlink_min.h | Définitions Netlink minimales (compilées avec musl, sans en-têtes uapi du noyau). |
offsets.h | Offsets de symboles/gadgets relatifs à kbase pour le noyau cible. |
gen_offsets.sh | Régénère offsets.h à partir d'un System.map / vmlinux du noyau. |
Makefile | Compile exp et rootme en ELF statiques musl. |