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 — Exploit POC for CVE_2026_31431 | Kitploit
Outils/GitHubGitHub/rootsecdev/cve_2026_31431
Privilege EscalationVulnerability AnalysisExploitationPenetration TestingLearning & EducationRed TeamingBinary Exploitation
GitHubrootsecdev/cve_2026_31431

cve_2026_31431

Exploit POC for CVE_2026_31431

Voir le dépôt
567112il y a 3 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 →
Partager

CVE-2026-31431 (« Copy Fail ») Kit

Détecteur et preuve de concept d'élévation de privilèges (LPE) pour le bogue d'écriture de scratch dans le cache de pages Linux algif_aead / authencesn divulgué le 29/04/2026.

Article de divulgation : https://xint.io/blog/copy-fail-linux-distributions

Autorisation

Utilisez uniquement sur des machines dont vous êtes propriétaire ou pour lesquelles vous avez été explicitement mandaté pour effectuer une évaluation. Le LPE modifie l'état en mémoire (cache de pages), mais la technique est une véritable escalade de privilèges — l'exécuter sur des systèmes sans autorisation est illégal dans la plupart des juridictions.

Résumé de la vulnérabilité

algif_aead exécute les opérations AEAD en place (req->src == req->dst). Lorsque les données source sont fournies via splice() depuis un fichier normal, la liste de dispersion de destination contient des références aux pages du cache de pages du fichier — c'est-à-dire que le noyau écrit dans ces pages. L'algorithme authencesn(hmac(sha256), cbc(aes)) effectue ensuite une écriture de scratch de 4 octets du champ seqno_lo de l'AAD (octets 4 à 7 de l'AAD fourni par sendmsg) dans cette destination, corrompant la copie du fichier dans le cache de pages.

Étant donné que le fichier sur disque n'est jamais modifié, il n'y a pas de signature sur disque ; la corruption n'est observée que par les lecteurs qui partagent le cache de pages. /etc/passwd et /usr/bin/su sont tous deux lisibles par tous, donc un utilisateur local non privilégié peut corrompre la vue du noyau en cours sur l'un ou l'autre.

Affectés : noyaux portant le commit 72548b093ee3 (AEAD en place, 2017) sans le revert en amont. La divulgation a confirmé Ubuntu 24.04 LTS, Amazon Linux 2023, RHEL 14.3 et SUSE 16, mais la primitive sous-jacente est antérieure à cette fourchette.

Fichiers

FichierObjectif
test_cve_2026_31431.pyDétecteur non destructif. Fonctionne sur un fichier sentinelle dans un répertoire temporaire ; ne touche jamais aux binaires système.
exploit_cve_2026_31431.pyLPE. Remplace l'UID de l'utilisateur courant par 0 dans le cache de pages de /etc/passwd, puis invoque su pour un shell root.

Les deux scripts sont du Python 3.10+ pur, bibliothèque standard uniquement.

Démarrage rapide

root@kitploit:~
# 1. Detect
python3 test_cve_2026_31431.py
#   exit 0 = not vulnerable, 2 = vulnerable, 1 = test error

# 2. Exploit (interactive — su will prompt for your own password)
python3 exploit_cve_2026_31431.py --shell

Utilisation du détecteur

root@kitploit:~
python3 test_cve_2026_31431.py

Ce qu'il fait :

  1. Vérifie que AF_ALG et l'algorithme authencesn(hmac(sha256),cbc(aes)) sont accessibles depuis un processus non privilégié.
  2. Crée un fichier sentinelle de 4 Kio dans un répertoire temporaire, peuple le cache de pages.
  3. Envoie 8 octets d'AAD en ligne via sendmsg+cmsg avec seqno_lo défini sur le marqueur PWND, puis utilise os.splice() pour splice 32 octets de la page du cache de pages de la sentinelle dans la socket d'opération AF_ALG.
  4. Appelle recv() pour déclencher le déchiffrement. La vérification d'authentification échoue avec EBADMSG ; l'écriture de scratch a lieu quoi qu'il arrive.
  5. Relit le fichier (cache de pages, pas le disque) et cherche le marqueur.

Classes de sortie :

  • Precondition not met — AF_ALG ou authencesn indisponible. Code de sortie 0.
  • VULNERABLE to CVE-2026-31431 — le marqueur PWND a atterri dans la page splicée. Code de sortie 2.
  • Page cache MODIFIED via in-place AEAD splice path — la page a été écrite mais le marqueur n'a pas atterri à la position attendue. À traiter comme vulnérable. Code de sortie 2.
  • Page cache intact — corrigé. Code de sortie 0.

Le détecteur ne touche jamais à /usr/bin/su, /etc/passwd ni à aucun autre fichier en dehors du répertoire temporaire qu'il crée, et ce fichier est supprimé à la sortie.

Utilisation du LPE

root@kitploit:~
python3 exploit_cve_2026_31431.py            # patch only, print next steps
python3 exploit_cve_2026_31431.py --shell    # patch and exec `su <user>`

Ce qu'il fait :

  1. Recherche la ligne UID de l'utilisateur courant dans /etc/passwd et trouve le décalage en octets du champ UID à 4 caractères.
  2. Émet une write4 à ce décalage, remplaçant l'UID par 0000.
  3. Appelle pwd.getpwnam(user) pour confirmer que libc rapporte désormais l'UID 0.
  4. Avec --shell, exécute execvp("su", ["su", user]). Saisissez votre propre mot de passe. PAM valide via /etc/shadow (non modifié), puis setuid(getpwnam(user).pw_uid) atterrit à 0.

Prérequis

  • L'utilisateur courant possède un UID à 4 chiffres (1000–9999). Les UID à 1 à 3 chiffres nécessitent des écritures multiples — étendez write4 en conséquence.
  • Aucun démon de cache NSS (nscd, sssd, systemd-userdbd) ne masque les lectures de /etc/passwd. Si getpwnam renvoie encore le véritable UID après le patch, redémarrez ou contournez le cache, ou choisissez un autre utilisateur.
  • La page de /etc/passwd doit rester dans le cache entre l'application du patch et l'exécution de su. En pratique, cela est fiable sur tout système soumis à une pression mémoire normale.

Annulation

Le fichier /etc/passwd sur disque est inchangé.

Essai (exploit_cve_2026_31431.py sans --shell) : la page corrompue est automatiquement éjectée à la sortie via POSIX_FADV_DONTNEED, donc les correspondances UID→nom redeviennent normales immédiatement.

Après --shell, la page reste corrompue jusqu'à ce que vous la nettoyiez. Pendant qu'elle est corrompue, toute résolution de l'UID 1000 en nom (par exemple ls, gestionnaires de fichiers, vérifications de propriété scp/sftp) échouera ou affichera des ID numériques. Pour nettoyer :

root@kitploit:~
# unprivileged - request page-cache eviction for /etc/passwd:
python3 -c "import os; fd=os.open('/etc/passwd', os.O_RDONLY); \
            os.posix_fadvise(fd, 0, 0, os.POSIX_FADV_DONTNEED); os.close(fd)"

# from the root shell:
echo 3 > /proc/sys/vm/drop_caches

Un redémarrage nettoie également.

Comment fonctionne write4

root@kitploit:~
sendmsg([8-byte AAD], cmsg=[ALG_SET_OP=DECRYPT, ALG_SET_IV, ALG_SET_AEAD_ASSOCLEN=8],
        flags=MSG_MORE)
splice(target_fd, pipe_w, 32, offset_src=file_offset)
splice(pipe_r, op_fd, 32)
recv(op_fd)   # EBADMSG; scratch write has already landed

Les 4 octets des positions 4 à 7 de l'AAD (seqno_lo) sont écrits par authencesn dans la liste de dispersion de destination, qui sur ce chemin de code est la page du cache de pages que nous avons splicée depuis target_fd. Le décalage d'atterrissage dans la page correspond au offset_src passé à splice().

Atténuation

En attendant que le noyau corrigé arrive sur votre distribution :

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

Après application, test_cve_2026_31431.py devrait rapporter Precondition not met et sortir avec le code 0.

Le correctif en amont restaure les opérations AEAD en place en opérations hors place, empêchant les pages du cache de pages de se retrouver dans des listes de dispersion inscriptibles.

Références

  • Article de divulgation Xint : https://xint.io/blog/copy-fail-linux-distributions
  • CVE-2026-31431
Télécharger l’outil