
CVE-2026-43284 et CVE-2026-43500 Dirty Frag PoC et exploit
Démonstrateur N4C lisible pour CVE-2026-43284 (XFRM/ESP) et CVE-2026-43500 (RxRPC/RXKAD).
Le PoC répond à une seule question : un processus non privilégié peut-il modifier le cache de pages
d'un fichier en lecture seule appartenant à root via un fragment sk_buff partagé ?
Il n'écrase pas /usr/bin/su ni /etc/passwd, n'installe pas de payload, n'invoque pas
PAM/NSS, et ne lance pas de shell. L'exploit public complet reste sur la branche
exploit.
dirtyfrag-poc.c — les deux primitives de cache de pages et une petite CLI.prepare-lab.sh — crée deux fixtures inoffensives appartenant à root.run_as_1000.c / run-as-1000 — abaisse le shell root de la VM à uid/gid 1000.Makefile — build statique reproductible.--esp)fixture en lecture seule
-> splice(fichier -> pipe -> socket UDP)
-> frag paginée skb
-> STORE sur place ESP authencesn
-> les quatre premiers octets en cache deviennent "N4C!"
Une seule SA XFRM et une seule écriture de quatre octets sont utilisées. L'ELF du shell root et sa boucle d'assemblage à 48 déclencheurs de l'exploit public ont été supprimés.
--rxrpc)fixture en lecture seule
-> splice(fichier -> paquet DATA RxRPC forgé)
-> déchiffrement sur place RXKAD pcbc(fcrypt)
-> une écriture de 8 octets sélectionnée par clé
-> les octets en cache diffèrent de la fixture d'origine
Le PoC ne recherche pas de texte clair en forme de mot de passe, car tout bloc modifié de huit
octets prouve déjà la primitive. La force brute fcrypt hors ligne, le planificateur d'écritures
chevauchantes, PAM, getent, su sans mot de passe, la gestion PTY et le code du shell ont été
supprimés.
À utiliser uniquement dans une VM Linux jetable et autorisée contenant les fonctionnalités noyau requises.
make
# Exécuter une fois en tant que root de la VM pour recréer les octets connus des fixtures.
./prepare-lab.sh
# L'assistant exécute ensuite le PoC en tant que uid/gid 1000.
./run-as-1000 ./dirtyfrag-poc --esp --verbose
./prepare-lab.sh
./run-as-1000 ./dirtyfrag-poc --rxrpc --verbose
Code de sortie :
0 — le marqueur est apparu dans le cache de pages ; primitive observée.1 — le marqueur n'est pas apparu ; l'écriture du fragment partagé a été rejetée.2 — fixture invalide, environnement non pris en charge ou échec de configuration.3 — le déclencheur RxRPC a échoué avant la vérification.Recréez les fixtures, ou redémarrez la VM jetable, entre les exécutions.
main() sélectionne une primitive et refuse de s'exécuter en tant que uid 0.esp_poc() montre le cas XFRM/ESP à quatre octets.rxrpc_poc() montre un déclencheur et une comparaison directe avant/après.La construction du protocole est dérivée du code source du noyau Linux et de l'implémentation
de référence publique V4bel/dirtyfrag
au commit aab16fcada27142dd8ce8704906cf6736cf213b8. N4C a réécrit le flux d'exécution
dans ce démonstrateur à fixtures uniquement et a supprimé le payload d'élévation de privilèges
et les étapes de consommation.