
Exploit C pour CVE-2026-31431 (Copy Fail) ciblant la vulnérabilité de splice AF_ALG sous Linux. Comprend un test de détection et une escalade de privilèges via la manipulation du cache de page de /usr/bin/su pour obtenir un shell root.
PoC en C pour CVE-2026-31431 (Copy Fail), alignement logique de l'exploit Python original de theori-io/copy-fail-CVE-2026-31431.
Réservé à la recherche en sécurité et aux environnements expérimentaux autorisés. Interdiction d'utilisation sur des systèmes non autorisés.
Sous Linux, authencesn(hmac(sha256),cbc(aes)) dans le sous-système AF_ALG, via la combinaison splice + AEAD, peut écrire 4 octets de l'AAD dans le cache de pages du fichier cible (le contenu disque reste inchangé).
Le comportement de l'exploit de ce dépôt est identique à l'original :
/usr/bin/su, un mini ELF décompressé par zlib.su ; le cache de pages altéré charge un faux su, ce qui donne généralement un shell root sans mot de passe.copy-fail/
├── include/
│ ├── copy_fail.h
│ └── su_payload_zlib.h
├── src/
│ ├── alg.c # Primitives AF_ALG / splice
│ ├── util.c # Vérifications préalables
│ ├── test_main.c # Détection de vulnérabilité
│ └── exploit_main.c # Élévation de privilèges
├── Makefile
└── README.md
Ubuntu / Debian :
sudo apt install build-essential zlib1g-dev
cd copy-fail
make
Produit :
| Artefact | Description |
|---|---|
bin/copy-fail-test | Détection de vulnérabilité (fichier sentinel temporaire, ne modifie aucun fichier système) |
bin/copy-fail-exploit | Élévation de privilèges (modifie le cache de pages de /usr/bin/su puis exécute exec su) |
Après compilation sur un système récent, si apparaissent les erreurs GLIBC_2.34 / GLIBC_2.38 not found, exécutez sur la machine de compilation :
make static
Copiez bin/copy-fail-test et bin/copy-fail-exploit vers la machine cible. Vous pouvez aussi exécuter make directement sur la machine cible à partir des sources (liaison dynamique, taille plus réduite).
./bin/copy-fail-test
echo $?
| Code de sortie | Signification |
|---|---|
| 0 | Aucune caractéristique de vulnérabilité détectée / conditions préalables non remplies |
| 2 | Caractéristique de vulnérabilité présente |
| 1 | Erreur lors du test |
./bin/copy-fail-exploit
id
L'absence de sortie est normale par conception ; en cas de succès, vous obtenez un shell root. En cas d'échec, echo $? retourne généralement 1.
AF_ALGbind l'algorithme authencesn(hmac(sha256),cbc(aes))/usr/bin/susplice doit pouvoir écrire sur la socket AF_ALGSi le détecteur indique cannot be instantiated (No such file or directory) :
grep -r algif_aead /etc/modprobe.d/
sudo modprobe algif_aead
grep authencesn /proc/crypto
Certaines distributions désactivent algif_aead via modprobe (par exemple, l'atténuation Ubuntu USN). Vous devez d'abord la réactiver sur une machine de test avec droits root.
Après un test d'élévation de privilèges (depuis le shell root), vous pouvez vider la pollution du cache de pages :
echo 3 > /proc/sys/vm/drop_caches
ou redémarrer la machine virtuelle.