Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
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é.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-31431_CopyFail_LinuxKernel_LPE — # Réécriture pédagogique du PoC Copy Fail (CVE-2026-31431) — Élévation de privilèges locale (LPE) du noyau Linux via crypto en place algif_aead + écriture du cache de pages splice() | Kitploit
Outils/GitHubGitHub/xn0kkx/cve-2026-31431_copyfail_linuxkernel_lpe
Escalade de PrivilègesFrameworks d'ExploitationAnalyse des VulnérabilitésExploitationApprentissage et ÉducationExploitation de Binaires
GitHubxn0kkx/cve-2026-31431_copyfail_linuxkernel_lpe

CVE-2026-31431_CopyFail_LinuxKernel_LPE

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 →
Partager

# Réécriture pédagogique du PoC Copy Fail (CVE-2026-31431) — Élévation de privilèges locale (LPE) du noyau Linux via crypto en place algif_aead + écriture du cache de pages splice()

Voir le dépôt
223il y a 5 moisPas encore vérifié

CVE-2026-31431 — Copy Fail (LPE du noyau Linux)

Réécriture pédagogique de la preuve de concept de Theori/Xint pour CVE-2026-31431, une vulnérabilité d'élévation de privilèges locale dans l'interface de socket crypto algif_aead du noyau Linux. Affecte tous les noyaux mainline de 4.14 (juillet 2017) jusqu'à 6.18.21, ainsi que la branche stable 6.19 jusqu'à 6.19.11.


Avertissement

Uniquement à des fins pédagogiques et de recherche en sécurité autorisée. Ne pas exécuter sur des systèmes dont vous n'êtes pas propriétaire ou pour lesquels vous ne disposez pas d'une autorisation écrite explicite de test. L'exécution sur un hôte vulnérable donne à tout utilisateur local non privilégié un accès root immédiat. Les auteurs déclinent toute responsabilité en cas d'utilisation abusive.


Résumé de la vulnérabilité

Le noyau Linux expose une API de cryptographie interne à l'espace utilisateur depuis le noyau 3.2 via la famille de sockets AF_ALG (<linux/if_alg.h>). L'espace utilisateur ouvre une socket SOCK_SEQPACKET, la lie à un modèle d'algorithme (par exemple "aead" / "authencesn(hmac(sha256),cbc(aes))"), et envoie des données pour chiffrement ou déchiffrement.

En 2017, une optimisation de performance a été fusionnée qui permet aux algorithmes AEAD de chiffrer ou déchiffrer les données en place lorsque le noyau détecte que la source et la destination partagent les mêmes pages sous-jacentes. Cela évite une copie mémoire redondante à chaque opération.

Le modèle authencesn (qui ajoute la prise en charge des numéros de séquence étendus au chiffrement authentifié) contient une écriture temporaire lors du déchiffrement : il écrit les octets ESN dans un décalage spécifique du tampon de données de l'opération avant que la vérification d'authentification ne s'exécute. Lorsque les pages sources de l'opération ont été obtenues depuis le cache de pages d'un fichier régulier via splice(), et que l'optimisation en place est active, cette écriture temporaire retourne directement dans ces pages mises en cache.

Étant donné que le cache de pages du noyau est un mappage partagé — tout processus qui ouvre le même fichier voit les mêmes pages physiques — un utilisateur non privilégié peut :

  1. Ouvrir n'importe quel fichier lisible (par exemple /usr/bin/su) avec O_RDONLY.
  2. Insérer ses pages dans une socket d'opération AF_ALG via splice().
  3. Déclencher un déchiffrement authencesn ; l'écriture temporaire ESN corrompt la page à un décalage contrôlé avec des octets contrôlés par l'attaquant.
  4. Le disque n'est jamais modifié ; seul le cache de pages en mémoire est modifié.

Les scanners d'intégrité hors hôte (AIDE, Tripwire, IMA/EVM) qui comparent les sommes de contrôle des fichiers sur disque sont totalement aveugles à cette attaque. L'écriture disparaît après une éviction du cache de pages ou un redémarrage, ne laissant aucune trace forensique sur le disque.

En ciblant /usr/bin/su (un binaire setuid root) et en écrasant une branche qui protège la vérification d'authentification PAM, l'attaquant obtient un shell root sans mot de passe.


Noyaux affectés

BranchePremière version vulnérableDernière version vulnérableCorrigé dans
mainline4.146.18.216.18.22
6.19 stable6.19.06.19.116.19.12
7.0-rc7.0-rc17.0-rc67.0-rc7

Le commit d'optimisation qui a introduit le bug est arrivé dans le cycle de développement 4.14 (juillet 2017). Tout noyau compilé avec CONFIG_CRYPTO_USER_API_AEAD=y et CONFIG_CRYPTO_AUTHENC=y (tous deux des valeurs par défaut courantes) dans les plages ci-dessus est vulnérable.


Distributions affectées (liste non exhaustive)

DistributionNoyau fourni (approx.)Corrigé ?
Debian 12 (Bookworm)6.1.xOui (rétroportage)
Debian 13 (Trixie)6.12.x / 6.14.xOui (rétroportage)
Ubuntu 24.04 LTS6.8.xOui (USN-7xxx)
Ubuntu 24.106.11.xOui
RHEL 9.x5.14.x (rebasé)Oui (RHSA)
Alpine 3.206.6.xOui (rétroportage)
Arch Linuxroulant (≥ 6.18.22 maintenant)Oui
Kali Linux 2026.16.18.12Vulnérable
Kali Linux 2026.2+6.18.22+Corrigé
Linux Mint 226.8.x (base Ubuntu)Oui (USN Ubuntu)

Consultez le suivi de sécurité de votre distribution pour le statut exact de l'avis.


Prérequis

  • Noyau Linux dans une plage vulnérable (voir le tableau ci-dessus)
  • Python 3.10+ (os.splice a été ajouté dans Python 3.10)
  • Accès en lecture au binaire cible (par défaut : /usr/bin/su, lisible par tous car il est setuid)
  • Aucun privilège spécial requis — il s'agit d'une élévation de privilèges locale

Utilisation

# Afficher ce qui serait écrit sans toucher au noyau (sûr) :
python3 copy_fail_exploit.py --dry-run

# Modifier le cache de pages de /usr/bin/su (noyau vulnérable requis) :
# ATTENTION : noyau vulnérable requis — utiliser uniquement sur des systèmes dont vous êtes propriétaire
python3 copy_fail_exploit.py

# Modifier et passer immédiatement à root :
python3 copy_fail_exploit.py --spawn-shell

# Utiliser un binaire cible et une charge utile personnalisés :
python3 copy_fail_exploit.py --target /usr/bin/sudo --payload-file ./custom_patch.bin

# Sortie verbeuse (afficher chaque écriture de 4 octets) :
python3 copy_fail_exploit.py --verbose --dry-run

Par défaut, --spawn-shell est désactivé. Après la modification, le script affiche :

[+] Patch appliqué au cache de pages de '/usr/bin/su' (disque inchangé).
    Exécutez `su` pour élever les privilèges, ou relancez avec --spawn-shell.
    Pour restaurer : echo 3 | sudo tee /proc/sys/vm/drop_caches

Vous devez accepter explicitement le lancement du shell avec --spawn-shell. C'est intentionnel : cela vous oblige à comprendre ce que l'exploit a fait avant d'exécuter le résultat.


Comment cela fonctionne

Mise en place de la primitive. L'exploit ouvre une socket AF_ALG et la lie au modèle authencesn(hmac(sha256),cbc(aes)) avec une clé factice entièrement à zéro. Il configure ensuite la taille de la balise d'authentification à 4 octets via ALG_SET_AEAD_AUTHSIZE. accept() sur la socket de contrôle produit une socket d'opération qui peut soumettre des requêtes de déchiffrement individuelles.

Déclenchement de l'écriture dans le cache de pages. Pour chaque bloc de 4 octets de la charge utile du patch, l'exploit appelle sendmsg() sur la socket d'opération avec l'indicateur MSG_MORE défini, en passant 8 octets de données associées (AAD) : 4 octets de remplissage suivis des 4 octets de la charge utile. MSG_MORE indique au noyau de retenir l'opération jusqu'à ce que d'autres données arrivent. Il crée ensuite un tube et émet deux appels splice() — file_fd → pipe → op_sock — faisant don des pages du cache de pages du fichier lui-même comme entrée de l'opération de déchiffrement. Lorsque recv() est finalement appelé, le noyau exécute le déchiffrement authencesn. L'optimisation en place se déclenche (la source et la destination sont les mêmes pages), et l'écriture temporaire ESN copie nos octets de charge utile dans la page du cache au décalage cible. recv() renvoie EBADMSG car la balise d'authentification ne peut pas être vérifiée — c'est attendu et sans danger. L'écriture a déjà eu lieu.

Télécharger l’outil