
# Playbook Ansible pour détecter et corriger CVE-2026-31431 (Copy Fail) - Vulnérabilité d'élévation de privilèges locale du noyau Linux
Copie Fail Détection et Remédiation
Une suite de rôles Ansible et de playbooks pour détecter et remédier à la CVE-2026-31431 (Copy Fail), une vulnérabilité critique d'élévation de privilèges locaux dans le module algif_aead du noyau Linux.
🔗 GitHub : https://github.com/parmstro/cfDr
Le nom cfDr est un jeu de mots sur « Copy Fail Doctor » - votre remède de confiance pour la CVE-2026-31431.
CVE-2026-31431 (CVSS 7.8) est un défaut logique dans l'interface socket AEAD du noyau Linux (AF_ALG) découvert en 2026. La vulnérabilité permet à tout utilisateur local non privilégié d'élever ses privilèges à root en quelques secondes.
algif_aead (interface crypto AF_ALG)Versions du noyau : noyau Linux >= 4.10 (publié en 2017)
Distributions affectées :
Remarque : toute distribution Linux avec un noyau 4.10 ou plus récent est potentiellement vulnérable.
Cette vulnérabilité est particulièrement dangereuse car :
Une fois qu'un attaquant dispose d'une forme quelconque d'accès local (SSH, shell web, évasion de conteneur, etc.), il peut :
En attendant les correctifs du noyau fournis par les éditeurs, plusieurs stratégies d'atténuation sont disponibles. cfDr les implémente toutes, avec des recommandations intelligentes basées sur la configuration de votre système.
Toutes les remédiations ne se valent pas. Voici ce que vous devez savoir :
| Méthode | Root peut-il contourner ? | Couverture | Prise en charge Enterprise Linux |
|---|---|---|---|
| Liste noire de modules | ✅ Oui (via insmod) | Empêche le chargement par modprobe | Toutes les versions |
| Politique SELinux | ❌ NON (couche LSM) | Domaines configurés uniquement | Toutes les versions (par défaut) |
| seccomp systemd | ❌ NON (filtre d'appels système) | Services configurés uniquement | Toutes les versions |
| eBPF LSM | ❌ NON (couche LSM) | À l'échelle du système (si configuré) | RHEL 9+, Fedora 34+ |
Recommandation par défaut de cfDr : Niveau 3 (liste noire de modules + SELinux)
Cela fournit deux couches de protection indépendantes :``` ┌─────────────────────────────────────────────────┐ │ Layer 1: Module Blacklist │ │ • Prevents modprobe algif_aead │ │ • Persists across reboots │ │ • CAN be bypassed by malicious root (insmod) │ ├─────────────────────────────────────────────────┤ │ Layer 2: SELinux Policy │ │ • Blocks AF_ALG socket() at syscall level │ │ • Works even if module is loaded │ │ • CANNOT be bypassed from userspace │ │ • Covers user_t, unconfined_t (majority cases) │ └─────────────────────────────────────────────────┘
Result: If either layer fails, the other still protects
### Pourquoi la liste noire de modules seule ne suffit pas
Un attaquant déterminé disposant d'un accès root peut contourner la liste noire de modules :```bash
# Module blacklist DOES NOT prevent:
insmod /lib/modules/$(uname -r)/kernel/crypto/algif_aead.ko.xz
Cependant, cela est acceptable car :
Pour une protection complète et non contournable, vous avez besoin de :
Liste noire de modules + au moins l'un des éléments suivants :
cfDr utilise des indicateurs binaires pour activer plusieurs atténuations :
| Valeur d'indicateur | Atténuations activées | Cas d'utilisation |
|---|---|---|
| 1 | Liste noire de modules uniquement | Protection minimale, systèmes sans SELinux |
| 2 | SELinux uniquement | Environnements SELinux uniquement |
| 3 | Liste noire de modules + SELinux | Défaut RECOMMANDÉ |
| 5 | Liste noire de modules + seccomp | Non-SELinux avec durcissement des services |
| 7 | Liste noire de modules + SELinux + seccomp | Protection renforcée |
| 15 | Toutes les atténuations | Protection maximale (RHEL 9+ uniquement) |
Calcul des indicateurs : 1 (liste noire) + 2 (SELinux) + 4 (seccomp) + 8 (eBPF) = somme
Protection SELinux :
user_t, unconfined_t, httpd_t, postgresql_t, mysqld_tuser_t et unconfined_t couvrent la grande majorité des scénarios d'attaqueProtection seccomp systemd :
httpd, nginx, postgresql, mariadb, redis, memcachedProtection eBPF LSM :
cfDr effectue une évaluation complète sur plusieurs dimensions :
uname -r
- Détermine si la version du noyau est >= 4.10 (plage vulnérable)
- Identifie la version du noyau et la distribution