
Archivé, déplacé vers codesource/cve-check. Script shell pour détecter l'exposition et les mesures d'atténuation de CVE-2026-31431 (Copy Fail) sur les systèmes Linux : vérification du noyau, état des modules, paramètres de démarrage, accessibilité d'AF_ALG et état des correctifs de la distribution.
[!IMPORTANT] Ce dépôt est archivé. La vérification Copy Fail se trouve désormais dans cve-check, avec d'autres vérifications de vulnérabilités et un mode
--fixoptionnel qui applique la remédiation. Voir checks/CVE-2026-31431 pour cette vérification.curl -fsSL https://raw.githubusercontent.com/codesource/cve-check/main/cve-check.sh | sudo bash -s -- CVE-2026-31431Le script
check_copyfail.shci-dessous fonctionne toujours mais n'est plus mis à jour.
Scripts shell pour détecter les vulnérabilités du noyau Linux, vérifier l'état des mesures d'atténuation et guider la remédiation — conçus pour s'exécuter localement ou sur des parcs entiers via SSH, Ansible ou pssh.
Copy Fail est une vulnérabilité d'élévation de privilèges locale (LPE) de gravité élevée dans le module cryptographique algif_aead du noyau Linux. Une faille logique introduite en 2017 permet à tout utilisateur local non privilégié d'écrire 4 octets contrôlés dans le cache de pages de n'importe quel fichier lisible — suffisant pour écraser un binaire setuid et obtenir les droits root. Un proof-of-concept Python fonctionnel de 732 octets existe et est accessible publiquement.
| CVE | CVE-2026-31431 |
| CVSS | 7.8 (Élevée) |
| Divulguée | 29 avril 2026 |
| Affectés | Noyaux Linux 4.13 – 6.x (2017–2026) |
| Distributions | Ubuntu, RHEL, SUSE, Debian, Amazon Linux et la plupart des autres |
| Exploitable à distance | Non — accès local requis |
| Correctif disponible | Partiel — consultez les avis de votre distribution |
| Vérification | Nécessite root ? |
|---|---|
| Version du noyau — si vous êtes dans la plage affectée (≥ 4.13) | Non |
Module algif_aead — chargé, présent sur le disque ou sur liste noire | Non |
Paramètres de démarrage — présence de initcall_blacklist=algif_aead_init | Non |
| Accessibilité du socket AF_ALG — si le chemin d'exploitation est ouvert | Non |
| État de SELinux | Non |
| État d'AppArmor | Oui — sortie partielle uniquement sans root |
| État du correctif de la distribution — CVE listée dans le changelog du noyau | Non |
Root n'est pas requis pour exécuter le script — toutes les vérifications sauf l'état d'AppArmor fonctionnent en tant qu'utilisateur ordinaire. L'exécution avec
sudoest recommandée pour des résultats complets, et constitue le choix le plus sûr lors d'un pipe depuiscurl.
Le script est conçu pour fonctionner sur toutes les principales distributions Linux :
| Famille de distribution | Vérification du gestionnaire de paquets | Chemin des modules |
|---|---|---|
| Debian, Ubuntu | dpkg + changelog du noyau | /lib/modules/ |
| RHEL, CentOS, Amazon Linux | rpm (kernel, kernel-rt) | /lib/modules/ |
| SUSE, openSUSE | rpm (kernel-default) | /lib/modules/ |
| Arch Linux | pacman + lien vers l'avis | /usr/lib/modules/ |
| Fedora | rpm + repli sur /usr/lib/modules/ | /usr/lib/modules/ |
Nécessite
bash— le script utilise une syntaxe spécifique à bash et ne fonctionnera pas soussh,ashoudash. Sur Alpine Linux (qui utilise busybox ash par défaut), installez d'abord bash :apk add bash
Sans root — la plupart des vérifications fonctionnent :
curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh | bash
Avec root — résultats complets incluant le statut AppArmor :
curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh | sudo bash
Astuce : Épinglez un SHA de commit spécifique en production afin que le script ne puisse pas changer sous vos pieds :
curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/COMMIT_SHA/check_copyfail.sh | sudo bash
curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh -o check_copyfail.sh
less check_copyfail.sh
bash check_copyfail.sh # without root
sudo bash check_copyfail.sh # full results
Boucle SSH
for HOST in server1 server2 server3; do
echo "=== $HOST ==="
ssh "$HOST" "curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh | sudo bash"
done
Ansible
- name: Check Copy Fail vulnerability
hosts: all
tasks:
- name: Run check script
script: check_copyfail.sh
become: yes
SSH parallèle
pssh -h hosts.txt -i \
"curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh | sudo bash"
============================================================
Copy Fail CVE-2026-31431 – Vulnerability Check
============================================================
>>> Kernel Version
[INFO] Running kernel: 5.15.0-107-generic
[WARN] Kernel 5.15.0-107-generic is in the affected range (4.13 – 6.x).
>>> algif_aead Module Status
[WARN] algif_aead module is currently LOADED — system is exploitable.
[WARN] Module file found at: /lib/modules/5.15.0-107-generic/kernel/crypto/algif_aead.ko
[WARN] algif_aead is NOT blacklisted — it can be loaded on demand.
>>> Kernel Boot Parameter Mitigation
[WARN] initcall_blacklist=algif_aead_init is NOT set in boot parameters.
>>> AF_ALG Socket Reachability
[WARN] AF_ALG sockets are reachable by this user — exploit path is open.
>>> Mandatory Access Control (SELinux / AppArmor)
[WARN] Neither SELinux nor AppArmor tools detected — no MAC layer present.
>>> Distribution Patch Status
[WARN] Could not confirm CVE-2026-31431 is listed as fixed in running kernel's changelog.
============================================================
SUMMARY
============================================================
!! LIKELY VULNERABLE — No confirmed mitigation detected.
Recommended actions (in order of preference):
1. Apply your distro's kernel update as soon as available.
2. Add to /etc/modprobe.d/copyfail.conf:
blacklist algif_aead
install algif_aead /bin/true
Then run: sudo depmod -a && sudo update-initramfs -u
3. Add to kernel boot parameters (grub):
initcall_blacklist=algif_aead_init
4. Immediately unload the module if loaded:
sudo rmmod algif_aead
============================================================
Appliquez-les par ordre de préférence :
1. Corrigez votre noyau (meilleure solution)
# Debian / Ubuntu
sudo apt update && sudo apt upgrade linux-image-$(uname -r)
# RHEL / CentOS / Amazon Linux
sudo yum update kernel
# SUSE
sudo zypper update kernel-default
2. Mettre le module sur liste noire (immédiat, persistant)
sudo tee /etc/modprobe.d/copyfail.conf << 'EOF'
blacklist algif_aead
install algif_aead /bin/true
EOF
sudo depmod -a
# Debian/Ubuntu
sudo update-initramfs -u
# RHEL/Fedora
sudo dracut -f
3. Déchargez le module maintenant (immédiat, non persistant après redémarrage)
sudo rmmod algif_aead
4. Paramètre de démarrage du noyau (alternative à la liste de blocage)
Ajoutez initcall_blacklist=algif_aead_init à votre configuration GRUB et redémarrez.