Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-31431-Copy-Fail---Vulnerability-Detection-Script — Script de détection pour CVE-2026-31431 (Copy Fail) qui vérifie la version du noyau, la présence de correctifs, les configurations du noyau, la disponibilité des sockets AF_ALG, les binaires setuid et les mesures d'atténuation afin de déterminer le statut de vulnérabilité sur les systèmes Linux. | Kitploit
Outils/GitHubGitHub/liamromanis101/cve-2026-31431-copy-fail---vulnerability-detection-script
Sécurité de l'Infrastructure CloudScanners de VulnérabilitésSécurité des ConteneursAnalyse des VulnérabilitésAudit de ConfigurationDevSecOpsDétection d'IntrusionRéponse aux Incidents
GitHub
liamromanis101/cve-2026-31431-copy-fail---vulnerability-detection-script

CVE-2026-31431-Copy-Fail---Vulnerability-Detection-Script

Voir le dépôt
2528il y a 4 moisVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →

À propos

Script de détection pour CVE-2026-31431 (Copy Fail) qui vérifie la version du noyau, la présence de correctifs, les configurations du noyau, la disponibilité des sockets AF_ALG, les binaires setuid et les mesures d'atténuation afin de déterminer le statut de vulnérabilité sur les systèmes Linux.

Partager

CVE-2026-31431 — Copy Fail — Script de détection de vulnérabilité

Détection uniquement. Un PoC fonctionnel existe déjà sur copy.fail/#exploit. Ce script est destiné aux administrateurs système et aux équipes de sécurité pour déterminer où ils sont vulnérables — ou encore vulnérables après l'application des correctifs.


De quoi s'agit-il ?

Le 29 avril 2026, une vulnérabilité appelée Copy Fail (CVE-2026-31431) a été divulguée publiquement par l'équipe Xint Code Research. Il s'agit d'un bug logique présent discrètement dans le noyau Linux depuis environ 2017 — près d'une décennie — qui permet à tout utilisateur local non privilégié d'obtenir les droits root.

Pas « obtenir root dans des conditions spécifiques avec un peu de chance et un bon vent arrière ». Juste... obtenir root. De manière fiable. Sur pratiquement toutes les principales distributions Linux.

Elle affecte Ubuntu, Amazon Linux, RHEL, SUSE, et tout autre système exécutant un noyau grand public des ~8 dernières années. Même script, pas de recompilation, pas d'ajustements par distribution nécessaires.

Oui, c'est aussi grave que ça en a l'air.

La version courte de son fonctionnement

Le noyau Linux dispose d'un sous-système cryptographique accessible aux utilisateurs non privilégiés via les sockets AF_ALG. Il existe un mécanisme appelé splice() qui peut alimenter directement ce sous-système avec des données de fichiers sans les copier — ce qui signifie que la copie en cache mémoire du noyau d'un fichier (le « page cache ») se retrouve à l'intérieur d'une opération cryptographique.

Un algorithme spécifique — authencesn, utilisé pour les numéros de séquence étendus IPsec — présente une particularité : il utilise le tampon de sortie comme espace de travail et écrit 4 octets légèrement au-delà de l'endroit prévu. Normalement inoffensif. Mais lorsque des pages du page cache d'un binaire setuid comme /usr/bin/su se retrouvent chaînées dans ce tampon de sortie (grâce à une « optimisation » de 2017 dans algif_aead.c), ces 4 octets atterrissent directement dans la copie en cache du noyau du binaire.

L'opération échoue avec une erreur. Le noyau ne marque jamais cette page comme sale. Le fichier sur disque est intact. Les outils d'intégrité des fichiers qui vérifient les sommes de contrôle sur disque ne voient rien d'anormal.

Mais c'est le page cache qui est exécuté. Et su est setuid root.

L'analyse technique complète est disponible sur xint.io et vaut vraiment la peine d'être lue.


Ce que vérifient les scripts

Script Python — 13 vérifications

Sept issues de la version originale plus six nouvelles vérifications ajoutées pour combler les lacunes de détection :

#VérificationCe qu'elle recherche
1Version du noyauCe noyau est-il dans la plage affectée (4.10–6.14) ?
2Présence du correctifLe commit de correction est-il réellement dans votre noyau en cours d'exécution ?
3Module algif_aeadLe module vulnérable est-il chargé ou chargeable ?
4CONFIG_CRYPTO_AUTHENC (nouveau)CONFIG_CRYPTO_AUTHENC est-il intégré (=y) ou en module (=m) ? Cette seule option compile à la fois authenc et authencesn. Intégré signifie que la mitigation par blacklist modprobe ne fait rien.
5CONFIG_CRYPTO_USER_API_AEAD (nouveau)L'interface utilisateur AEAD AF_ALG est-elle même compilée ? Si non, tout le chemin d'exploitation est fermé à la compilation.
6Socket AF_ALGUn utilisateur non privilégié peut-il en ouvrir un maintenant ?
7os.splice PythonLe chemin d'exploitation en Python pur est-il disponible ?
8Binaires setuidListe étendue des cibles setuid-root lisibles présentes sur le système.
9MitigationsAppArmor, SELinux, seccomp — qu'est-ce qui est en place ?
10Espaces de noms utilisateur (nouveau)Les espaces de noms utilisateur non privilégiés sont-ils activés ? (Ne bloque pas Copy Fail directement, mais affecte la surface d'élévation de privilèges locale plus large.)
11Transparent hugepages (nouveau)Statut THP — peut affecter l'alignement du page cache et la fiabilité de l'exploitation.
12Détection d'environnement (nouveau)Contexte Docker/conteneur/VM — les conteneurs partagent le noyau hôte ; c'est l'hôte qui doit être corrigé.
13Avertissement utilisateur root (nouveau)Avertit si exécuté en tant que root, car plusieurs vérifications donnent des faux positifs pour root indépendamment des restrictions non privilégiées.

Script shell — 10 vérifications

Le script Bash couvre la même logique de détection principale mais omet trois éléments spécifiques à Python :

#VérificationNotes
1Version du noyau
2Présence du correctif
3Module algif_aead
4Socket AF_ALGUtilise Python comme assistant si disponible ; sinon, déduction à partir de la configuration du noyau
5Binaires setuidListe étendue, identique à la version Python
6MitigationsAppArmor, SELinux, seccomp
7CONFIG_CRYPTO_AUTHENC
8Espaces de noms utilisateur
9Transparent hugepages
10Détection d'environnement

Absents du script shell (par rapport à Python) :

Vérification manquanteRaison
CONFIG_CRYPTO_USER_API_AEADPas encore implémenté — prévu
Disponibilité de os.splice PythonNon applicable à un script shell
Avertissement utilisateur rootPas encore implémenté — prévu

Aucun des deux scripts ne corrigera ni n'exploitera quoi que ce soit. Ils vous disent la vérité sur votre système afin que vous puissiez agir en conséquence.


Prérequis

  • Python 3.6+
  • Aucune dépendance externe — bibliothèque standard uniquement
  • Aucun accès root requis (intentionnellement — nous vérifions ce qu'un attaquant non privilégié peut voir)
  • Recommandé : exécuter en tant qu'utilisateur non root — certaines vérifications (socket AF_ALG, stat setuid) réussissent toujours pour root et signaleront des faux positifs

Utilisation

root@kitploit:~
# Clonez ou téléchargez le script, puis :
python3 cve-2026-31431-detect.py

C'est tout. Rapport codé par couleurs avec un résumé à la fin.

Codes de sortie

Le script se termine avec un code non nul en cas de résultats vulnérables, ce qui le rend adapté à une utilisation en pipeline :

CodeSignification
0Aucune condition vulnérable trouvée
1Une ou plusieurs conditions vulnérables trouvées
root@kitploit:~
# Exemple : faire échouer une étape CI si l'hôte est vulnérable
python3 cve-2026-31431-detect.py
rc=$?
if [ $rc -eq 1 ]; then
  echo "VULNÉRABLE — bloquer le déploiement"
elif [ $rc -ne 0 ]; then
  echo "ERREUR — le script n'a pas pu se terminer (code de sortie $rc)"
fi

Exemple de sortie

root@kitploit:~
CVE-2026-31431 'Copy Fail' — Détection de vulnérabilité
Corruption du page cache authencesn / élévation de privilèges locale
Exécution avec uid=1001, euid=1001

=== Version du noyau ===
  [VULNÉRABLE] Version du noyau
          Raison : Le noyau est dans la plage vulnérable (4.10 – 6.14)
          Détail : Version : 6.12.0-124.45.1.el10_1 — le statut du correctif doit être confirmé

=== CONFIG_CRYPTO_AUTHENC (Configuration du noyau) ===
  [VULNÉRABLE] CONFIG_CRYPTO_AUTHENC
          Raison : Compilé en module (=m) : chargement automatique sur bind() AF_ALG ; la blacklist modprobe est la mitigation correcte

=== CONFIG_CRYPTO_USER_API_AEAD (Configuration du noyau) ===
  [VULNÉRABLE] CONFIG_CRYPTO_USER_API_AEAD
          Raison : L'interface AEAD AF_ALG est un module chargeable — les utilisateurs non privilégiés peuvent accéder au sous-système cryptographique via les sockets AF_ALG

...

  LE SYSTÈME EST PROBABLEMENT VULNÉRABLE À CVE-2026-31431

  Actions recommandées :
    1. Appliquez la mise à jour du noyau de votre distribution pour CVE-2026-31431
    2. En attendant le correctif, mettez le module en blacklist :
         echo 'install algif_aead /bin/false' > /etc/modprobe.d/disable-algif-aead.conf
         rmmod algif_aead 2>/dev/null
       REMARQUE : cela n'est efficace que lorsque CONFIG_CRYPTO_AUTHENC=m (module).
       Si CONFIG_CRYPTO_AUTHENC=y (intégré), le correctif est la seule solution.

Version shell (pour les pipelines DevSecOps)

Un script Bash compagnon (cve-2026-31431-detect.sh) est disponible pour les environnements où Python n'est pas présent ou où les outils natifs shell sont préférés. Il effectue 10 des 13 vérifications — voir le tableau de comparaison des vérifications ci-dessus pour les détails des différences.

root@kitploit:~
# Exécution de base
bash cve-2026-31431-detect.sh

# Sortie JSON — adaptée à l'ingestion SIEM, aux faits Ansible, à l'agrégation de journaux
bash cve-2026-31431-detect.sh --json > scan-results.json

# Mode silencieux — n'affiche que le résumé (utile dans les journaux CI)
bash cve-2026-31431-detect.sh --quiet

# Désactiver la couleur ANSI (pour les fichiers journaux)
bash cve-2026-31431-detect.sh --no-colour

Le script shell utilise les mêmes codes de sortie (0 = OK, 1 = vulnérable) et produit une sortie JSON équivalente pour la consommation en pipeline. Lorsque Python 3 est disponible sur le système, le script shell l'utilise pour effectuer le test de socket AF_ALG en direct ; sinon, il se rabat sur la déduction à partir de la configuration du noyau.


Correction

La vraie solution est de corriger votre noyau. Consultez les avis de sécurité de votre distribution.

DistributionOù chercher
Ubuntuubuntu.com/security/CVE-2026-31431
RHEL / Amazon Linuxdnf update kernel
SUSEzypper update kernel-default
Debianapt update && apt upgrade

Mitigation temporaire (compilations en module uniquement)

Si la vérification CONFIG_CRYPTO_AUTHENC indique =m (compilé en module, pas intégré), vous pouvez le mettre en blacklist :

root@kitploit:~
echo 'install algif_aead /bin/false' > /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead 2>/dev/null

Important : cette mitigation n'a aucun effet si CONFIG_CRYPTO_AUTHENC=y (intégré). Dans ce cas, corriger le noyau est la seule solution. La vérification CONFIG_CRYPTO_AUTHENC dans le script vous indique dans quelle situation vous vous trouvez. Notez que CONFIG_CRYPTO_AUTHENC est la bonne clé de configuration du noyau — elle compile à la fois les modules authenc et authencesn à partir d'une seule option.

Cela peut affecter IPsec si vous l'utilisez — vérifiez avant de déployer à grande échelle.

Le correctif en amont

Le correctif en amont est ce commit — il annule l'optimisation AEAD en place de 2017 dans algif_aead.c, séparant les scatterlists source et destination afin que les pages du page cache ne puissent plus se retrouver dans la destination inscriptible.


Conteneurs et machines virtuelles

Si vous exécutez ce script dans un conteneur Docker, un pod Kubernetes ou tout autre environnement conteneurisé, le script vous avertira : les conteneurs partagent le noyau hôte. La vulnérabilité réside dans le noyau, pas dans l'image du conteneur. Vous devez évaluer et corriger l'hôte.


Exemples d'intégration DevSecOps

root@kitploit:~
# GitHub Actions
# L'étape échouera naturellement et bloquera le pipeline lorsque le script se terminera avec le code 1.
# Aucune configuration supplémentaire nécessaire — les codes de sortie non nuls font échouer les étapes par défaut.
- name: Vérifier CVE-2026-31431
  run: |
    python3 cve-2026-31431-detect.py
    rc=$?
    if [ $rc -eq 1 ]; then
      echo "VULNÉRABLE — pipeline bloqué"
      exit 1
    elif [ $rc -ne 0 ]; then
      echo "ERREUR — le script de détection n'a pas pu se terminer (code de sortie $rc)"
      exit $rc
    fi
root@kitploit:~
# Ansible
# Utilise playbook_dir pour garantir que le chemin du script se résout correctement.
# failed_when vérifie tout code de sortie non nul (vulnérabilité OU erreur de script).
- name: Vérifier CVE-2026-31431
  script: "{{ playbook_dir }}/cve-2026-31431-detect.py"
  register: cve_check
  failed_when: cve_check.rc != 0
root@kitploit:~
# Vérification Nagios / supervision (script shell — prend en charge les codes de sortie nativement)
bash cve-2026-31431-detect.sh --quiet
# code de sortie 0 = OK, code de sortie 1 = CRITIQUE (vulnérable)
root@kitploit:~
# Sortie JSON pour SIEM / agrégation de journaux (script shell)
bash cve-2026-31431-detect.sh --json --quiet > /var/log/cve-2026-31431-$(hostname)-$(date +%Y%m%d).json

Chronologie de divulgation

DateÉvénement
2026-03-23Signalé à l'équipe de sécurité du noyau Linux
2026-03-24Accusé de réception
2026-03-25Correctifs proposés et examinés
2026-04-01Correctif validé dans le noyau principal
2026-04-22CVE-2026-31431 attribuée
2026-04-29Divulgation publique

Crédit à Taeyang Lee chez Theori pour l'idée de recherche originale, et à l'équipe Xint Code Research pour l'analyse complète de divulgation.


Contribution

Vous avez trouvé un faux positif ? Une distribution manquée ? Une configuration du noyau qui devrait être vérifiée ? Les PR sont les bienvenues. L'objectif est un signal précis, pas seulement du texte rouge effrayant.

Avertissement

Cet outil est fourni tel quel à des fins de sécurité défensive. Pointez-le sur des systèmes que vous êtes autorisé à évaluer. Ne faites pas n'importe quoi.

Télécharger l’outil