
Atténuation Linux rapide et vérifiable pour CVE-2026-31431 Copy Fail : blocage algif_aead, vérification et durcissement seccomp AF_ALG.
______ ______ _ __ ______ __
/ ____/___ ____ __ _/ ____/___ _(_) / / ____/_ ______ __________/ /
/ / / __ \/ __ \/ / / / /_ / __ `/ / / / / __/ / / / __ `/ ___/ __ /
/___/ /_/ / /_/ / /_/ / / __/ / /_/ / / / / /_/ / /_/ / /_/ / / / /_/ /
\____/\____/ .___/\__, /_/ \__,_/_/_/ \____/\__,_/\__,_/_/ \__,_/
/_/ /____/
Évaluation et atténuation rapides et audivables de l’exposition Linux pour CVE‑2026‑31431 « Copy Fail » pendant que les noyaux sont corrigés.
CopyFail Guard est un outil d’opérations défensives pour les administrateurs Linux, les ingénieurs DevSecOps, les équipes plateformes et les répondants aux incidents. Il aide à réduire l’exposition au problème Linux algif_aead / AF_ALG en :
algif_aead est disponible, chargé, intégré ou déjà bloquémodprobe.d et déchargeant le module lorsque c’est sûrCorrectif final : installez le noyau corrigé de votre fournisseur et redémarrez.
Cet outil couvre l’écart opérationnel entre la divulgation et le correctif complet de la flotte.
splice, changements setuid, escalade de privilèges ou sondes destructrices./etc/modprobe.d/99-copyfail-guard.conf, et la restauration ne supprime que ce fichier.seccomp-patch ajoute un refus AF_ALG à un profil seccomp Docker/Podman/Kubernetes existant au lieu de remplacer votre durcissement d’exécution.assess --json et codes de sortie documentés prennent en charge les scans de flotte, la capture SIEM et les preuves de gestion des changements.Si vous êtes sur un hôte Linux et avez besoin d’une réponse rapide :
git clone --depth 1 https://github.com/juliosuas/copyfail-guard.git
cd copyfail-guard
sudo ./bin/copyfail-guard.sh doctor
sudo ./bin/copyfail-guard.sh assess
Si le verdict est exposé et que algif_aead est modulaire :
sudo ./bin/copyfail-guard.sh mitigate --yes
sudo ./bin/copyfail-guard.sh verify
Pour des installations reproductibles, fixez une étiquette de version :
git clone --branch v0.3.0 --depth 1 https://github.com/juliosuas/copyfail-guard.git
Remplacez v0.3.0 par la dernière version publiée lorsque des versions plus récentes sont disponibles.
Exécutez d’abord la vérification sécurisée de l’exposition :
sudo ./bin/copyfail-guard.sh assess
Comment lire le résultat :
Si vous exécutez des conteneurs non fiables, des jobs CI, des sandbox ou des charges de travail multi‑utilisateurs, testez également si la création de socket AF_ALG est bloquée dans cet environnement d’exécution :
python3 tools/afalg-socket-test.py
PERMITTED ne prouve pas une exploitation réussie, mais prouve que l’API crypto espace utilisateur concernée est accessible. Pour les opérations défensives, c’est une raison suffisante pour appliquer l’atténuation pendant que vous confirmez le déploiement du noyau corrigé.
Aucune preuve de concept destructive n’est incluse. C’est une fonctionnalité, pas une lacune.
Une véritable preuve d’exploitation Copy Fail devrait valider l’impact sur la mémoire du noyau / le cache de pages ou l’escalade de privilèges. Inclure cela dans un référentiel d’atténuation public rendrait le projet moins sûr et moins déployable en production.
CopyFail Guard prouve les choses sur lesquelles les opérateurs peuvent agir en toute sécurité :
Pour le statut final de la vulnérabilité, combinez cet outil avec l’inventaire des avis/correctifs du fournisseur et les preuves de redémarrage.
CopyFail Guard est une atténuation, pas un remède. Il réduit l’exposition et vérifie les contrôles provisoires. Le correctif durable reste le noyau corrigé par le fournisseur plus le redémarrage.
L’outil est intentionnellement conçu pour être cloné et exécuté en réponse aux incidents : aucun compilateur, en‑têtes noyau, code d’exploitation ou gestionnaire de paquets tiers n’est nécessaire pour le flux hôte de base. python3 est nécessaire pour la sortie --json, seccomp-patch et le test non‑exploit de socket AF_ALG.
Clonez et exécutez :
git clone https://github.com/juliosuas/copyfail-guard.git
cd copyfail-guard
chmod +x bin/copyfail-guard.sh
sudo ./bin/copyfail-guard.sh doctor
sudo ./bin/copyfail-guard.sh assess
sudo ./bin/copyfail-guard.sh mitigate --yes
sudo ./bin/copyfail-guard.sh verify
Installation système optionnelle :
git clone https://github.com/juliosuas/copyfail-guard.git
cd copyfail-guard
sudo ./scripts/install.sh
sudo copyfail-guard status
L’installateur permet de fixer la source et la destination pour des déploiements contrôlés :
sudo env COPYFAIL_GUARD_REF=v0.3.0 ./scripts/install.sh
Utilisez la dernière version publiée pour COPYFAIL_GUARD_REF lorsque des versions plus récentes sont disponibles.
Durcissement des conteneurs / CI :
./bin/copyfail-guard.sh seccomp-patch docker-default.json copyfail-seccomp.json
docker run --security-opt seccomp=./copyfail-seccomp.json IMAGE
Validez qu’AF_ALG est bloqué à l’intérieur d’un conteneur protégé :
docker run --rm \
--security-opt seccomp=./copyfail-seccomp.json \
-v "$PWD/tools:/tools:ro" \
python:3.12-alpine \
python /tools/afalg-socket-test.py
Résultat attendu en mode protégé :
BLOCKED: socket(AF_ALG) denied by policy (...)
Voir Exemples de sorties pour les verdicts attendus, la forme JSON et les résultats de validation conteneur.
Copy Fail est une escalade de privilèges locale Linux dans le composant algif_aead de l’API crypto espace utilisateur AF_ALG. Les avis publics décrivent une primitive d’écriture dans le cache de pages accessible par des utilisateurs locaux non privilégiés, particulièrement dangereuse sur les systèmes à noyau partagé : nœuds Kubernetes, exécuteurs CI/CD, hôtes multi‑locataires, sandbox d’agents et postes de développeurs.
Le correctif approprié est une mise à jour du noyau du fournisseur contenant le revert/correctif en amont et un redémarrage sur le noyau corrigé. CopyFail Guard est un assistant d’opérations défensives pour la fenêtre avant que ce redémarrage ne soit terminé sur toute la flotte.
Commandes hôte de base :
bashmodinfo, modprobe, lsmod, rmmod si disponiblesgrep, awk, mktemp, installOutils de visibilité optionnels :
lsof ou ss pour les vérifications des consommateurs AF_ALGPatchage de profil seccomp :
python3 est requis pour --json, seccomp-patch et tools/afalg-socket-test.pyAucun code d’exploitation, compilateur, en‑têtes noyau ou paquets tiers n’est requis.
CopyFail Guard n’inclut pas de preuve de concept d’exploitation. C’est intentionnel. Voir Cela prouve-t-il la vulnérabilité ?.
À la place, assess effectue une vérification opérationnelle sécurisée :
algif_aead semble disponible, chargé, intégré ou bloquéJSON d’automatisation :
sudo ./bin/copyfail-guard.sh assess --json
./bin/copyfail-guard.sh doctor --json
Codes de sortie :
mitigate écrit :
/etc/modprobe.d/99-copyfail-guard.conf
avec :
# Managed by CopyFail Guard for CVE-2026-31431
install algif_aead /bin/false
blacklist algif_aead
Puis il tente :
sudo rmmod algif_aead
Si le module est actuellement utilisé, rmmod peut échouer. Dans ce cas, le bloc persistant reste installé ; arrêtez les consommateurs AF_ALG ou redémarrez après avoir appliqué l’atténuation.
Le script refuse d’écraser un lien symbolique à son chemin modprobe géré et écrit le fichier de manière atomique avec des permissions sûres.
Pour les charges de travail non fiables, bloquez la création de socket AF_ALG avec seccomp même pendant que vous corrigez les hôtes.
Chemin recommandé : patchez votre baseline seccomp d’exécution existante au lieu de la remplacer :
./bin/copyfail-guard.sh seccomp-patch docker-default.json copyfail-seccomp.json
Utilisation avec Docker :
docker run --security-opt seccomp=./copyfail-seccomp.json IMAGE
Utilisation avec Podman :
podman run --security-opt seccomp=./copyfail-seccomp.json IMAGE
Chemin d’urgence uniquement si vous n’avez pas de profil de base :
./bin/copyfail-guard.sh seccomp-docker ./copyfail-afalg-seccomp.json
Le profil d’urgence généré bloque AF_ALG mais autorise par ailleurs les appels système. Traitez-le comme un palliatif ciblé, pas comme un remplacement du durcissement seccomp normal par défaut de Docker.
Pour Kubernetes, placez le profil sous la racine seccomp du kubelet, généralement :
/var/lib/kubelet/seccomp/profiles/copyfail-seccomp.json
Référencez-le ensuite avec :
securityContext:
seccompProfile:
type: Localhost
localhostProfile: profiles/copyfail-seccomp.json
Voir examples/kubernetes-seccomp-pod.yaml.
Ce projet inclut un test non‑exploit d’accessibilité AF_ALG :
python3 tools/afalg-socket-test.py
Il tente uniquement de créer et fermer une socket AF_ALG. Il n’attache pas d’opérations crypto, n’appelle pas splice, ne touche pas aux binaires setuid, ne corrompt pas le cache de pages et ne tente pas d’escalade de privilèges.
Résultats :
BLOCKED signifie que la politique a refusé AF_ALG pour ce processus.PERMITTED signifie que la création de socket AF_ALG est encore autorisée pour ce processus.UNSUPPORTED signifie qu’AF_ALG n’est pas disponible dans cet environnement d’exécution.CopyFail Guard a besoin de rapports de compatibilité réels provenant d’hôtes Linux, d’environnements d’exécution de conteneurs, d’exécuteurs CI et de nœuds Kubernetes. Si vous pouvez le tester en toute sécurité, ouvrez un problème Rapport de compatibilité avec les sorties nettoyées de doctor, assess --json, verify ou du test de socket AF_ALG.
Les rapports utiles aident à répondre :
algif_aead est intégré et nécessite correctif/redémarrage uniquementVoir Guide de validation communautaire.
copyfail-guard assess Évaluation sécurisée de l’exposition, aucune tentative d’exploit
copyfail-guard status Inspecter les indicateurs d’exposition hôte
copyfail-guard doctor Vérifier les dépendances et la disponibilité d’exécution
copyfail-guard mitigate Désactiver algif_aead de manière persistante et le décharger
copyfail-guard verify Vérifier que l’atténuation hôte est active
copyfail-guard rollback Supprimer l’atténuation modprobe de CopyFail Guard
copyfail-guard seccomp-docker [FILE] Générer un profil d’urgence de refus AF_ALG
copyfail-guard seccomp-patch BASE OUT Patcher un profil seccomp existant en toute sécurité
copyfail-guard k8s-example Afficher un exemple seccomp Kubernetes
Les options peuvent être placées avant ou après la commande :
--dry-run Afficher les changements prévus sans écrire de fichiers ni décharger de modules
--yes Confirmation non‑interactive
--no-logo Désactiver la bannière ASCII
--json Émettre du JSON pour les commandes prises en charge : assess, doctor
Dans les configurations typiques, désactiver algif_aead ne devrait pas affecter :
Cela peut affecter les applications explicitement configurées pour utiliser le moteur AF_ALG ou les applications qui créent directement des sockets AF_ALG. Vérifiez d’abord :
sudo lsof | grep AF_ALG || true
ss -xa | grep -i alg || true
algif_aead modulaire, durcissement seccomp pour charges de travail non fiables et restauration.CopyFail Guard ne :
L’atténuation hôte par module fonctionne pour algif_aead modulaire. Si algif_aead est intégré à votre noyau, modprobe.d et rmmod ne peuvent pas le désactiver ; un correctif/redémarrage est obligatoire et seccomp doit être utilisé pour les charges de travail non fiables pendant le correctif.
Seccomp protège uniquement les charges de travail lancées avec le profil. Les conteneurs ou pods en cours d’exécution doivent être redémarrés avec le profil durci.
sudo ./bin/copyfail-guard.sh rollback --yes
La restauration supprime uniquement le fichier géré par cet outil. Elle ne recharge pas le module. Redémarrez ou exécutez manuellement modprobe algif_aead seulement si vous en avez explicitement besoin et avez accepté le risque ou corrigé le noyau.
Non. Le correctif et le redémarrage restent le correctif final.
Non. Le projet évite intentionnellement le comportement d’exploitation. tools/afalg-socket-test.py vérifie uniquement si la création de socket AF_ALG est accessible.
Défense en profondeur. Les conteneurs et les charges de travail CI sont des endroits courants où du code non fiable s’exécute sur un noyau partagé. Seccomp rend la première étape de cette classe d’attaque inaccessible pour cette charge de travail.
Parce que les profils d’exécution par défaut contiennent de nombreuses décisions de durcissement. Les remplacer par un profil d’urgence minimal peut supprimer accidentellement des protections. seccomp-patch conserve votre baseline et ajoute le refus AF_ALG.
Oui. Commencez par doctor et assess --json, déployez l’atténuation sur un petit échantillon Linux, puis déployez séparément l’atténuation hôte et les modifications de profil seccomp. Voir Guide de déploiement flotte.
crypto: algif_aead - Revert to operating out-of-placeConstruit par Julio César Suástegui Calderón.
Ingénierie sécurité, systèmes Linux et automatisation défensive pratique.
MIT
| Famille de verdict | Ce que cela signifie | Que faire |
|---|
EXPOSED_* | algif_aead / AF_ALG semble accessible ou chargeable | Atténuez maintenant, puis corrigez et redémarrez |
PARTIALLY_MITIGATED_* | Un bloc existe mais le module chargé ou l’état de redémarrage importe encore | Redémarrez ou déchargez en toute sécurité, puis vérifiez |
INTERIM_MITIGATED_* | L’atténuation locale est active | Gardez-la, mais corrigez et redémarrez quand même |
LOW_OBVIOUS_EXPOSURE_* | Les vérifications locales n’ont pas trouvé d’exposition évidente à algif_aead | Confirmez quand même l’état du correctif du fournisseur |
| Domaine | Commande | Objectif |
|---|
| Évaluation sécurisée | assess | Donner un verdict d’exposition non‑exploit, actions suivantes et code de sortie adapté à l’automatisation |
| Vérification des dépendances | doctor | Vérifier les outils requis/optionnels et expliquer les limitations d’exécution |
| Inspection hôte | status | Afficher OS/noyau, disponibilité du module, état chargé, avertissement intégré, bloc modprobe et consommateurs AF_ALG évidents |
| Atténuation hôte | mitigate | Écrire /etc/modprobe.d/99-copyfail-guard.conf et tenter de décharger algif_aead |
| Vérification | verify | Échouer clairement si le module est chargé, intégré ou non bloqué |
| Restauration | rollback | Supprimer uniquement le fichier modprobe géré par CopyFail Guard |
| Conteneurs | seccomp-patch | Patcher un profil seccomp existant pour refuser socket(AF_ALG, ...) tout en préservant l’utilisation normale des sockets |
| Profil d’urgence | seccomp-docker | Générer un profil ciblé de refus AF_ALG pour usage d’urgence |
| Kubernetes | k8s-example | Afficher un exemple de pod seccomp Localhost |
| Code | Signification |
|---|
0 | Exposition faible évidente d’après les vérifications locales |
1 | Atténuation provisoire active, correctif/redémarrage toujours requis |
10 | Exposé / atténuation disponible |
11 | Partiellement atténué ; redémarrage ou déchargement nécessaire |
12 | Chemin module intégré ; correctif/redémarrage requis |
20 | État d’évaluation inconnu |