
Audite et durcit les systèmes Linux contre l'élévation de privilèges locale AF_ALG (CVE-2026-31431) en vérifiant l'exposition de l'API crypto du noyau, en restreignant les modules et en fournissant des scripts de restauration.
Cet outil implémente un blocage structurel pour atténuer la CVE-2026-31431 en renommant physiquement les modules du noyau et en les purgeant de la mémoire. Avant toute utilisation, veuillez prendre connaissance des risques architecturaux suivants :
/lib/modules/, rendant l'obstruction précédente caduque.AF_ALG (API Crypto du noyau) peut casser certaines applications ou services qui dépendent de l'accélération matérielle au niveau du noyau (par exemple, certains VPN spécialisés, utilitaires de chiffrement de disque ou outils de sécurité personnalisés).[cite: 3]Utilisation à vos risques et périls. Vérifiez toujours les fonctions critiques de votre système après avoir exécuté solution.sh.[cite: 3]
Une boîte à outils pour découvrir, diagnostiquer et contenir les vecteurs d'élévation de privilèges locaux (LPE) via l'API Crypto du noyau Linux (AF_ALG).
L'outil utilise un blocage structurel pour traiter la CVE-2026-31431 en renommant les modules du noyau et en les purgeant de la mémoire. Les principaux risques architecturaux sont les suivants :
/lib/modules/, rendant l'obstruction précédente caduque.Utilisation à vos risques et périls.
Ce dépôt fournit deux scripts qui forment un flux de travail diagnostiquer → contenir → vérifier contre les attaques d'élévation de privilèges via AF_ALG (socket(38, 5, 0)) :
check.sh — Audit de posture de sécurité multicouche (s'exécute sans privilèges)solution.sh — Expulse de force les modules AF_ALG de la mémoire + vérifie la présence des fichiers de modules physiques (root requis)restore.sh — Recharge les modules AF_ALG et restaure le système à son état antérieur à solution.sh (root requis)| Vérification | Ce qui est examiné | Sévérité |
|---|---|---|
| Contexte du processus | UID/GID actuel et capacités effectives | Faible |
| Socket Crypto AF_ALG | Accessibilité de l'API Crypto du noyau via socket(AF_ALG, ...) | Élevée |
| kptr_restrict | Visibilité des pointeurs du noyau vers l'espace utilisateur | Moyenne |
| dmesg_restrict | Restriction d'accès au tampon circulaire du noyau | Moyenne |
| SELinux | État Enforcing / Permissive / Disabled | Moyenne |
| /proc hidepid | Si /proc masque les informations des autres processus | Faible |
./check.sh
sudo ./solution.sh
sudo ./restore.sh
restore.sh annule les effets de solution.sh en rechargeant les modules du noyau AF_ALG (af_alg, algif_rng, algif_aead, algif_skcipher, algif_hash). Si le fichier de module physique (af_alg.ko.xz) a été renommé ou supprimé, le script vous avertira et vous demandera une restauration manuelle avant de tenter de charger les modules.
Exécuter solution.sh sur un système en production qui utilise activement AF_ALG (par exemple, un système avec IPsec, dm-crypt/LUKS, ou tout déchargement crypto matériel) cassera instantanément toutes les opérations crypto du noyau. Cela inclut :
algif_*Le script force le déchargement des modules du noyau AF_ALG. Les opérations crypto du noyau échoueront jusqu'au redémarrage. Ce script est destiné uniquement aux systèmes isolés (air-gapped), non destinés à la production, ou jetables à des fins de test et d'analyse. Ne l'exécutez pas sur une infrastructure de production ou critique.
check.sh ne nécessite aucune dépendance au-delà d'un shell POSIX et de /proc//syssolution.sh nécessite les privilèges rootrestore.sh nécessite les privilèges rootaf_alg_block.so nécessite les privilèges root pour être installé via /etc/ld.so.preloadCette POC a été testée sur WSL2. Veuillez noter ce qui suit :
wsl --shutdown). Cela inclut les changements d'état des modules du noyau effectués par solution.sh, les renommages de fichiers, les résultats de check.sh, et toute modification locale de fichiers dans ce dépôt..wslconfig, /etc/wsl.conf, ou un script de démarrage automatique (par exemple, /etc/rc.local) séparément.Pour fermer définitivement le vecteur d'attaque AF_ALG :
Mettre le module du noyau sur liste noire (le plus fiable) :
echo "blacklist af_alg" | sudo tee /etc/modprobe.d/af_alg-blacklist.conf
Ou renommer le fichier physique :
sudo mv /lib/modules/$(uname -r)/kernel/crypto/af_alg.ko.xz \
/lib/modules/$(uname -r)/kernel/crypto/af_alg.ko.xz.bak
Désactiver AF_ALG via sysctl :
sudo sysctl -w net.core.af_alg_disabled=1
Bloquer la création de socket AF_ALG via une politique SELinux / AppArmor
Désactiver les espaces de noms utilisateur non privilégiés (environnements conteneurisés) :
sudo sysctl -w kernel.unprivileged_userns_clone=0
Bloquer AF_ALG au niveau de l'appel système socket() via LD_PRELOAD (solution de contournement WSL2) :
# Installation à l'échelle du système (root requis)
echo /absolute/path/to/af_alg_block.so | sudo tee -a /etc/ld.so.preload
Une bibliothèque partagée précompilée (af_alg_block.so) est incluse dans le dépôt. Elle intercepte socket(2) et renvoie EAFNOSUPPORT lorsque le domaine est AF_ALG (38). Tous les autres appels socket sont transmis à l'implémentation réelle sans modification.
Cette approche est principalement destinée à WSL2, où la sémantique mono-utilisateur et le comportement de réinitialisation au redémarrage rendent le LD_PRELOAD à l'échelle du système pratique. Sur les systèmes Linux multi-utilisateurs traditionnels, préférez la méthode 1 (liste noire des modules) — l'injection via /etc/ld.so.preload affecte tous les processus du système et peut silencieusement casser les services dépendant d'AF_ALG.
Remarque : nécessite glibc (pas musl). /etc/ld.so.preload nécessite root pour être modifié. La suppression se fait en effaçant la ligne correspondante du fichier.
MIT