
Exploit de preuve de concept pour CVE-2026-31431 (Copy Fail), une LPE du noyau Linux via la corruption du cache de pages algif_aead, avec détection, laboratoire et conseils d'atténuation.
██████╗ ██████╗ ██████╗ ██╗ ██╗ ███████╗ █████╗ ██╗██╗
██╔════╝██╔═══██╗██╔══██╗╚██╗ ██╔╝ ██╔════╝██╔══██╗██║██║
██║ ██║ ██║██████╔╝ ╚████╔╝ █████╗ ███████║██║██║
██║ ██║ ██║██╔═══╝ ╚██╔╝ ██╔══╝ ██╔══██║██║██║
╚██████╗╚██████╔╝██║ ██║ ██║ ██║ ██║██║███████╗
╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝╚══════╝
algif_aead⚠️ UTILISATION AUTORISÉE UNIQUEMENT — Ce dépôt est strictement destiné aux testeurs d'intrusion, chercheurs en sécurité et défenseurs agissant sous autorisation légale. Toute utilisation abusive constitue une infraction pénale.
Copy Fail est une vulnérabilité d'escalade de privilèges locale (LPE) divulguée le 29 avril 2026, affectant pratiquement toutes les distributions Linux majeures exécutant des noyaux depuis 2017.
Utilisateur non privilégié ──► AF_ALG + splice() ──► Écriture de 4 octets dans le cache de pages ──► ROOT
La vulnérabilité provient d'une optimisation in-place défectueuse introduite en 2017 (commit 72548b093ee3) dans le module algif_aead de l'API crypto espace utilisateur du noyau Linux (AF_ALG).
AF_ALG (API crypto espace utilisateur)
└── module algif_aead
└── template authencesn ◄── VULNÉRABLE
└── optimisation in-place (2017)
└── req->src == req->dst ◄── pages de splice() chaînées dans le scatterlist dst inscriptible
Étape 1 : Ouvrir une socket AF_ALG AEAD
socket(AF_ALG, SOCK_SEQPACKET, 0)
Étape 2 : Envoyer des pages splice() référençant le fichier cible
(pages du cache de pages d'un binaire privilégié, par exemple /usr/bin/sudo)
Étape 3 : Déclencher l'écriture scratch authencesn
authencesn utilise le tampon dst comme zone de travail →
écrit 4 octets contrôlés au-delà de la zone de sortie légitime
Étape 4 : L'entrée du cache de pages pour le fichier cible est maintenant corrompue
(fichier disque intact — seule la copie en mémoire est modifiée)
Étape 5 : Exécuter le binaire modifié → ROOT
Le cache de pages du noyau Linux stocke les copies en mémoire des fichiers. Lorsqu'un fichier est lu, ses pages sont mises en cache. L'appel système splice() peut référencer directement ces pages mises en cache. En insérant des pages du cache de pages dans le scatterlist AF_ALG AEAD, l'écriture scratch authencesn atterrit à l'intérieur de ces pages mises en cache, patchant ainsi efficacement la copie en mémoire de tout fichier lisible — y compris les binaires privilégiés comme sudo, pkexec ou passwd.
Le correctif en amont annule l'optimisation défectueuse de 2017 :
# Corrigé dans le commit : a664bf3d603d
git show a664bf3d603d
CVE-2026-31431-CopyFail/
│
├── 📄 README.md ← Vous êtes ici
├── 📄 LICENSE ← Licence recherche/éducation
├── 📄 DISCLAIMER.md ← Politique d'utilisation légale et éthique
├── 📄 CHANGELOG.md ← Historique des versions
│
├── 📂 docs/
│ ├── vulnerability-analysis.md ← Analyse approfondie : cause racine et mécanismes
│ ├── exploitation-walkthrough.md ← Méthodologie pas à pas
│ ├── affected-kernels.md ← Matrice complète des versions noyau/distributions
│ ├── detection.md ← Couverture défenseur, Tenable, Wazuh
│ └── references.md ← Tous les CVE, blogs, avis
│
├── 📂 exploit/
│ ├── README.md ← Utilisation, prérequis, distributions testées
│ ├── copyfail.py ← PoC de référence (éducatif)
│ ├── trigger.c ← Déclencheur C pour AF_ALG + splice()
│ └── variants/
│ ├── ubuntu.py ← Variante spécifique Ubuntu
│ ├── rhel.py ← Variante RHEL/CentOS
│ └── amazon_linux.py ← Variante Amazon Linux
│
├── 📂 detection/
│ ├── yara/
│ │ └── copyfail.yar ← Règle YARA pour artefacts d'exploit
│ ├── sigma/
│ │ └── copyfail_lpe.yml ← Règle Sigma pour SIEM/SOC
│ └── scripts/
│ ├── check_vulnerable.sh ← Vérification rapide de la vulnérabilité du noyau
│ └── detect_algif_aead.sh ← Vérifie si le module est chargé/actif
│
├── 📂 mitigation/
│ ├── README.md ← Aperçu des mesures d'atténuation
│ ├── disable_algif_aead.sh ← Désactive le module noyau affecté
│ ├── patch-notes.md ← Détails du correctif en amont
│ └── kubernetes-hardening.md ← Durcissement K8s / conteneurs
│
├── 📂 lab/
│ ├── Vagrantfile ← VM vulnérable reproductible
│ ├── setup.sh ← Script d'amorçage du laboratoire
│ └── docker/
│ └── Dockerfile ← Conteneur Ubuntu vulnérable
│
├── 📂 reports/
│ ├── pentest-report-template.md ← Modèle de rapport prêt pour le client
│ └── sample-finding.md ← Exemple de rédaction de constatation
│
└── 📂 assets/
├── demo.gif ← (Optionnel) démo terminal
└── diagrams/
└── page-cache-write.png ← Schéma du flux d'attaque
Testez toujours dans un environnement isolé et autorisé. N'exécutez jamais d'exploits sur des systèmes de production.
# Cloner le dépôt
git clone https://github.com/0xFuffM3/CVE-2026-31431-CopyFail.git
cd CVE-2026-31431-CopyFail
# Démarrer la VM vulnérable du laboratoire
cd lab/
vagrant up
# Se connecter en SSH au laboratoire
vagrant ssh
# Vérifier la version du noyau (devrait être vulnérable)
uname -r
cd lab/docker/
# Construire l'image du conteneur vulnérable
docker build -t copyfail-lab .
# Exécuter avec les privilèges nécessaires pour l'interaction avec le noyau
docker run --rm -it --privileged copyfail-lab /bin/bash
# Exécuter le script de vérification rapide
chmod +x detection/scripts/check_vulnerable.sh
./detection/scripts/check_vulnerable.sh
Sortie attendue sur un système vulnérable :
[!] Version du noyau : 5.15.0-91-generic
[!] Module algif_aead : CHARGÉ
[✗] Le système semble VULNÉRABLE à CVE-2026-31431 (Copy Fail)
[*] Action recommandée : Appliquer la mise à jour du noyau ou désactiver algif_aead
Sortie attendue sur un système corrigé :
[✓] Version du noyau : 6.1.132
[✓] Le système semble CORRIGÉ contre CVE-2026-31431 (Copy Fail)
Nécessite : Accès local en tant qu'utilisateur non privilégié sur un système vulnérable.
# Python 3.6+
python3 --version
# Modules noyau requis présents
lsmod | grep algif_aead
# Vérifier que le binaire cible est lisible
ls -la /usr/bin/sudo
cd exploit/
# Vérifier le niveau de privilège actuel
id
# uid=1000(user) gid=1000(user) groups=1000(user)
# Exécuter le PoC Copy Fail
python3 copyfail.py
# Vérifier l'escalade de privilèges
id
# uid=0(root) gid=0(root) groups=0(root)
1. Énumérer la version du noyau
└─► uname -r / cat /proc/version
2. Vérifier si algif_aead est chargé
└─► lsmod | grep algif_aead
3. Confirmer le point d'accès à faible privilège
└─► id / whoami
4. Exécuter le PoC Copy Fail
└─► python3 exploit/copyfail.py
5. Vérifier l'accès root
└─► id && cat /etc/shadow
6. Documenter les preuves
└─► Capture d'écran + enregistrer version du noyau, distribution, hash de l'exploit
7. Appliquer les mesures d'atténuation (après test)
└─► sudo bash mitigation/disable_algif_aead.sh
8. Inclure dans le rapport de test d'intrusion
└─► Utiliser reports/pentest-report-template.md
// detection/yara/copyfail.yar
rule CopyFail_CVE_2026_31431 {
meta:
description = "Détecte les artefacts de l'exploit Copy Fail (CVE-2026-31431)"
author = "0xFuffM3"
date = "2026-04-30"
reference = "https://copy.fail"
strings:
$py1 = "algif_aead" ascii
$py2 = "AF_ALG" ascii
$py3 = "splice" ascii
$py4 = "page_cache" ascii
$py5 = "authencesn" ascii
condition:
3 of them
}
Lancer le scan YARA :
yara detection/yara/copyfail.yar /tmp/ -r
# detection/sigma/copyfail_lpe.yml
title: Exécution de l'exploit LPE Copy Fail (CVE-2026-31431)
status: stable
logsource:
category: process_creation
product: linux
detection:
selection:
CommandLine|contains:
- 'AF_ALG'
- 'algif_aead'
- 'authencesn'
condition: selection
falsepositives:
- Tests légitimes d'API crypto
level: high
chmod +x detection/scripts/detect_algif_aead.sh
./detection/scripts/detect_algif_aead.sh
# Ubuntu / Debian
sudo apt-get update && sudo apt-get upgrade linux-image-generic
# RHEL / CentOS
sudo yum update kernel
# Amazon Linux
sudo yum update kernel
# Après la mise à jour, redémarrer
sudo reboot
algif_aead (Intérimaire)# Exécuter le script d'atténuation
chmod +x mitigation/disable_algif_aead.sh
sudo bash mitigation/disable_algif_aead.sh
Ce que fait le script :
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf
rmmod algif_aead 2>/dev/null || echo "[*] Module actuellement non chargé"
echo "[✓] algif_aead désactivé. Redémarrer pour confirmer la persistance."
Voir mitigation/kubernetes-hardening.md pour :
AF_ALG dans les politiques de sécurité des podssocket(AF_ALG, ...)Un modèle de rapport client prêt à l'emploi se trouve dans reports/pentest-report-template.md.
Constatation : Escalade de privilèges locale via Copy Fail (CVE-2026-31431)
Gravité : ÉLEVÉE (CVSS 7.8)
Hôte : 10.10.10.55 (ubuntu-prod-01)
Noyau : 5.15.0-91-generic
Preuves :
- Shell non privilégié (uid=1000) élevé à root (uid=0)
- Module noyau algif_aead confirmé chargé
- Aucun artefact disque — seulement le cache de pages
Recommandation :
1. Appliquer immédiatement le correctif du noyau du fournisseur
2. Transition : désactiver le module algif_aead
3. Examiner les nœuds Kubernetes et les exécuteurs CI/CD
Lisez ceci avant d'utiliser quoi que ce soit dans ce dépôt.
Ce dépôt est publié uniquement à des fins de recherche en sécurité légitime, de tests d'intrusion autorisés et de sécurité défensive.
L'utilisation non autorisée de ce matériel peut violer le Computer Fraud and Abuse Act (CFAA), la Directive UE 2013/40/UE, la Loi indienne sur les technologies de l'information de 2000, et les lois équivalentes dans votre juridiction.
Les auteurs déclinent toute responsabilité en cas d'utilisation abusive. Voir DISCLAIMER.md pour l'avis juridique complet.
Les chercheurs en sécurité sont invités à contribuer :
git checkout -b feat/votre-contributiongit commit -m "Ajout : règle de détection pour X"Veuillez respecter les normes de divulgation responsable. N'incluez pas de code d'exploit armé et prêt pour la production ciblant des systèmes corrigés.
| # | Section | Description |
|---|
| 1 | Qu'est-ce que Copy Fail ? | Résumé de la vulnérabilité |
| 2 | Analyse technique approfondie | Analyse de la cause racine |
| 3 | Systèmes affectés | Matrice distributions et noyaux |
| 4 | Structure du dépôt | Organisation des fichiers |
| 5 | Configuration du laboratoire | Reproduction sécurisée |
| 6 | Utilisation de l'exploit | Flux de travail pour test d'intrusion |
| 7 | Détection | YARA, Sigma, scripts |
| 8 | Atténuation | Correctif et durcissement |
| 9 | Rapport de test d'intrusion | Modèles de rapport |
| 10 | Aspects juridiques et éthiques | Avertissement |
| 11 | Références | CVE, avis, blogs |
| Propriété | Détail |
|---|
| ID CVE | CVE-2026-31431 |
| Surnom | Copy Fail |
| CVSS v3.1 | 7.8 (ÉLEVÉ) |
| Vecteur d'attaque | Local |
| Privilèges requis | Faible (tout utilisateur non privilégié) |
| Interaction utilisateur | Aucune |
| Découvreur | Xint Code (Theori) |
| Divulgué | 29 avril 2026 |
| Taille de l'exploit | 732 octets (PoC Python) |
| État du correctif | ✅ Disponible — revenir au commit a664bf3d603d |
| Branche du noyau | Affecté ? | Version corrigée |
|---|
| 4.9.x (LTS) | ✅ Oui | 4.9.340+ |
| 5.4.x (LTS) | ✅ Oui | 5.4.295+ |
| 5.10.x (LTS) | ✅ Oui | 5.10.239+ |
| 5.15.x (LTS) | ✅ Oui | 5.15.185+ |
| 6.1.x (LTS) | ✅ Oui | 6.1.132+ |
| 6.6.x (LTS) | ✅ Oui | 6.6.83+ |
| 6.12.x (LTS) | ✅ Oui | 6.12.19+ |
| < 4.9 (avant 2017) | ❌ Non | N/A — optimisation absente |
| Distribution | Versions affectées | Corrigé ? | Avis |
|---|
| Ubuntu | < 26.04 (toutes versions) | ✅ Corrigé | USN |
| Ubuntu 26.04 (Resolute) | ❌ Non affecté | — | — |
| RHEL / CentOS | 7, 8, 9 | ✅ Corrigé | RHSA-2026 |
| Amazon Linux | 2, 2023 | ✅ Corrigé | ALAS |
| SUSE / openSUSE | Tous affectés | ✅ Corrigé | SUSE-SU |
| Debian | Bullseye, Bookworm | ✅ Corrigé | DSA |
| CloudLinux | 8, 9 | ✅ Corrigé | Avis |
| Outil | Support de détection |
|---|
| Microsoft Defender (MDVM) | ✅ Oui |
| Tenable Nessus | ✅ Oui |
| Qualys | ✅ Oui |
| Wazuh | ✅ Via règle Sigma personnalisée |
| Palo Alto Cortex XDR | ✅ Oui |
| CrowdStrike Falcon | ✅ Oui |
| Source | Lien |
|---|
| Divulgation originale (Xint/Theori) | copy.fail |
| Analyse technique de Xint Code | xint.io/blog/copy-fail |
| Entrée NVD | nvd.nist.gov |
| Blog sécurité Microsoft | microsoft.com/security/blog |
| Avis Ubuntu | ubuntu.com/blog |
| Avis CERT-EU | cert.europa.eu |
| FAQ Tenable | tenable.com/blog |
| Palo Alto Unit 42 | unit42.paloaltonetworks.com |
| Avis CloudLinux | blog.cloudlinux.com |
| Analyse Bugcrowd | bugcrowd.com/blog |
| Correctif du noyau Linux | kernel.org — commit a664bf3d603d |