
Shell scanner for CVE-2026-31431 « Copy Fail » — une élévation de privilèges locale via la corruption du cache de pages du noyau Linux (algif_aead/AF_ALG). Vérifie la version du noyau, l'état du correctif, l'état du module, l'exposition setuid et les atténuations. Prend en charge Debian 11–13 et Ubuntu 20.04–25.10. Prêt pour CI/CD (codes de sortie + sortie JSON).
Scanner basé sur le shell pour CVE-2026-31431 "Copy Fail", une vulnérabilité d'élévation de privilèges locaux dans le sous-système cryptographique du noyau Linux (algif_aead / interface AF_ALG). Un utilisateur local non privilégié peut écrire 4 octets dans le cache de pages en mémoire d'un binaire setuid (par ex. /usr/bin/su) et obtenir un shell root — sans toucher au fichier sur disque.
a664bf3d603d| Distribution | Version | Version corrigée |
|---|---|---|
| Debian | 11 Bullseye | 5.10.251-3 |
| Debian | 12 Bookworm | 6.1.170-1 |
| Debian | 13 Trixie | 6.12.85-1 |
| Debian | Sid / Forky | 6.19.14-1 |
| Ubuntu | 20.04 LTS Focal (GA) | 5.4.0-220.240 |
| Ubuntu | 20.04 LTS Focal (HWE) | 5.15.0-135.145~20.04.1 |
| Ubuntu | 22.04 LTS Jammy (GA) | 5.15.0-135.145 |
| Ubuntu | 22.04 LTS Jammy (HWE) | 6.8.0-61.63~22.04.1 |
| Ubuntu | 24.04 LTS Noble | 6.8.0-61.63 |
| Ubuntu | 24.10 Oracular | 6.11.0-27.27 |
| Ubuntu | 25.04 Plucky | 6.14.0-15.15 |
| Ubuntu | 25.10 Questing | correctif mainline (≥ 6.15) |
| Générique | toute | vérification de plage mainline (4.14 – 6.14 vulnérable) |
Les dérivés Ubuntu basés sur les versions ci-dessus (Pop!_OS, Linux Mint, Elementary OS, etc.) sont également détectés via ID_LIKE dans /etc/os-release.
# Basic scan
bash cve-2026-31431-detect.sh
# No colour output (log files, CI)
bash cve-2026-31431-detect.sh --no-colour
# JSON output (machine-readable, for pipelines)
bash cve-2026-31431-detect.sh --json
# Quiet mode — only print the summary
bash cve-2026-31431-detect.sh --quiet
# Combine flags
bash cve-2026-31431-detect.sh --json --quiet
Aucun privilège root requis. Aucun paquet à installer en dehors d'un shell standard (bash ≥ 4.3) et éventuellement python3 pour le test réel de socket AF_ALG.
| Code | Signification |
|---|---|
0 | Aucune condition de vulnérabilité trouvée |
1 | Une ou plusieurs conditions de vulnérabilité trouvées |
2 | Erreur du script / impossible de terminer les vérifications |
Conçu pour être utilisé dans les pipelines DevSecOps — redirigez la sortie JSON vers votre SIEM, votre système de tickets ou votre tableau de bord de conformité.
Le script affiche les résultats dans deux langues :
Les deux sections sont imprimées sur stdout après les résultats de chaque vérification.
=== Kernel Version ===
[INFO] Distro flavour : ubuntu (id=ubuntu, codename=jammy, version=22.04)
[INFO] Kernel release : 5.15.0-135-generic
[OK] Kernel version
Reason : Ubuntu jammy: kernel 5.15.0-135.145 >= patched version 5.15.0-135.145
...
✅ PROTECTED — SYSTEM IS NOT VULNERABLE
❌ VULNERABLE — IMMEDIATE ACTION REQUIRED
✗ Kernel version
✗ Patch presence
✗ algif_aead module
✗ AF_ALG socket
✗ Setuid binaries
sudo apt update && sudo apt full-upgrade && sudo reboot
# After reboot: uname -v → must show >= 6.1.170-1 (Bookworm)
sudo apt update && sudo apt full-upgrade && sudo reboot
# After reboot: cat /proc/version_signature
N'est efficace que lorsque CONFIG_CRYPTO_USER_API_AEAD=m (compilé en tant que module). N'a aucun effet si l'option est compilée dans le noyau (=y).
echo 'install algif_aead /bin/false' | sudo tee /etc/modprobe.d/disable-algif-aead.conf
sudo rmmod algif_aead 2>/dev/null || true
Cela n'affecte pas SSH, dm-crypt/LUKS, OpenSSL, GnuTLS, NSS, les serveurs web ou le chiffrement de disque.
MIT
| # | Vérification | Méthode |
|---|
| 1 | Version du noyau | uname -r / uname -v / dpkg / /proc/version_signature |
| 2 | Présence du correctif | version de build Debian, version du paquet Ubuntu, préfixe de commit dans /proc/version |
| 3 | Module algif_aead | /proc/modules, liste noire modprobe.d, .ko sur le disque |
| 4 | Socket AF_ALG | Tentative réelle socket(AF_ALG, …) via Python 3 |
| 5 | Binaires setuid | Binaires setuid-root courants comme cibles d'écriture |
| 6 | Atténuations | Statut AppArmor, SELinux, seccomp |
| 7 | Configuration du noyau | CONFIG_CRYPTO_AUTHENC, CONFIG_CRYPTO_USER_API_AEAD |
| 8 | Espaces de noms utilisateur | unprivileged_userns_clone, max_user_namespaces |
| 9 | Transparent hugepages | Paramètre THP et effet sur l'exploitation |
| 10 | Environnement | Détection Docker / Kubernetes / WSL, avertissement root |