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é.

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

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-31694-POC — Noyau Linux : écriture hors limites du cache readdir de FUSE (CVE-2026-31694) : un serveur FUSE malveillant déborde une page du cache de pages de 24 octets. PoC ainsi qu'un exploit local non privilégié menant à root via la corruption du cache de pages de /etc/passwd. À exécuter uniquement dans une machine virtuelle. | Kitploit
Outils/GitHubGitHub/0xcyberstan/cve-2026-31694-poc
Escalade de PrivilègesAnalyse des VulnérabilitésExploitationApprentissage et ÉducationExploitation de BinairesLabs et Pratique
GitHub0xcyberstan/cve-2026-31694-poc

CVE-2026-31694-POC

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

Noyau Linux : écriture hors limites du cache readdir de FUSE (CVE-2026-31694) : un serveur FUSE malveillant déborde une page du cache de pages de 24 octets. PoC ainsi qu'un exploit local non privilégié menant à root via la corruption du cache de pages de /etc/passwd. À exécuter uniquement dans une machine virtuelle.

Voir le dépôt
16211il y a 16 joursPas encore vérifié
Partager

CVE-2026-31694: Écriture hors limites dans le cache readdir de FUSE

Un contrôle de limites manquant dans fs/fuse/readdir.c:fuse_add_dirent_to_cache(). Un serveur FUSE renvoie un dirent avec namelen = 4095, qui se sérialise en un enregistrement de 4120 octets. Le noyau le copie dans une seule page de cache de pages de 4096 octets et déborde de 24 octets contrôlés par le serveur dans la page physique suivante.

Ce dépôt contient un PoC marqueur pour la primitive d'écriture et une escalade de privilèges locaux qui prépare le débordement sur la copie dans le cache de pages de /etc/passwd et transforme root en un compte sans mot de passe.

  • Affecté : Linux 6.15+ (l'augmentation de FUSE_NAME_MAX à PATH_MAX - 1 a rendu le chemin readdir accessible)
  • Corrigé par : 51a8de6c50bf9 "fuse: rejeter les dirents surdimensionnés dans le cache de pages" (un des cinq backports stables)
  • CVE-2026-31694

Avertissement : VM uniquement, jamais sur du métal nu

Le débordement est une écriture noyau dans la page physique qui se trouve directement après la page de cache de FUSE. La préparation vise cette écriture sur une page choisie, mais elle est probabiliste. En cas d'échec, les 24 octets peuvent toucher une page non liée :

  • les pages mises en cache d'un autre fichier, y compris les pages sales qui sont réécrites sur le disque, ce qui corrompt des fichiers réels,
  • les données du noyau, ce qui peut planter la machine ou provoquer une corruption silencieuse.

Exécutez-le uniquement dans une VM jetable. Les scripts ici exécutent toujours l'exploit dans QEMU/KVM, jamais sur l'hôte.

Layout

exploit.c                 le PoC et l'élévation de privilèges (fichier unique, compilation statique)
Makefile                  construit ./exploit (statique)
vm/config.sh              tous les chemins et paramètres (éditer KERNEL_TREE)
vm/make_rootfs.sh         construire l'image invitée Ubuntu 24.04 (en tant que root)
vm/build_vuln_kernel.sh   construire un bzImage vulnérable à partir de votre arbre noyau
vm/run_vm.sh              démarrer l'invité sans interface
vm/provision_guest.sh     configuration dans l'invité (s'exécute via ssh)
vm/run_in_vm.sh           une commande : démarrer, configurer, exécuter, vérifier

Requirements

Hôte : Linux avec KVM (/dev/kvm présent, votre utilisateur dans le groupe kvm), et :

  • qemu-system-x86_64, sshpass, gcc, make
  • pour make_rootfs.sh : debootstrap (et root)

Vous avez également besoin d'une arborescence source du noyau Linux pour construire un noyau vulnérable.

Setup

  1. Modifiez vm/config.sh. La seule valeur que vous devez définir est KERNEL_TREE : le chemin vers une copie source de Linux. Utilisez une révision antérieure au correctif 51a8de6c50bf9 (toute copie 6.15..7.0 contient le bogue). Si l'arbre a déjà le correctif, build_vuln_kernel.sh supprime la protection pour la construction et restaure le fichier après. Tout le reste (mémoire, cœurs, port ssh, chemins d'images) a une valeur par défaut que vous pouvez laisser. Toute valeur peut également être définie depuis l'environnement, par exemple KERNEL_TREE=/path/to/linux vm/run_in_vm.sh.

  2. Construisez l'image invitée (Ubuntu 24.04, nécessite root pour debootstrap) :

    sudo vm/make_rootfs.sh
    

    Cela crée un utilisateur sudo test:test, une console série, une authentification par mot de passe ssh, et fuse3.

  3. Construisez le noyau vulnérable :

    vm/build_vuln_kernel.sh
    

Run

De bout en bout (démarrage, configuration, PoC marqueur, LPE, vérification uid 0) :

vm/run_in_vm.sh

Manuel :

vm/run_vm.sh &                 # démarrage sans interface ; console dans vm/serial.log
make                           # construire l'exploit statique
# copiez ./exploit dans l'invité, puis en tant qu'utilisateur test :
./exploit --poc -n 20          # test marqueur
./exploit                      # échauffement, puis LPE

Arrêter la VM :

pkill -f bzImage-fuse-vuln

exploit options

--poc      mode marqueur uniquement, aucune modification de /etc/passwd
-n N       nombre de tours
(no args)  5 tours d'échauffement, puis jusqu'à 200 tentatives LPE ; en cas de succès, il écrit une
           ligne root sans mot de passe dans /etc/passwd et vide les caches

Expected output

Le mode marqueur affiche les succès par tour et un total, par exemple 20/20 (100.0%).

Le mode LPE affiche Warmup: 5/5, puis une ligne LPE n/200 ... HIT!, modifie la première ligne de /etc/passwd de root:x:0:0:root:/root:/bin/bash à root::0:0:root:/root:/bin/sh, et un su -s /bin/sh root suivant avec un mot de passe vide renvoie uid 0.

How it works

Le chemin du cache readdir copie chaque dirent dans une page du cache de pages. La vérification de taille demande seulement si le dirent tient dans l'espace restant de la page actuelle ; elle ne demande jamais si le dirent tient dans une page du tout. Avec namelen = 4095, l'enregistrement fait 4120 octets, donc la copie dépasse de 24 octets la fin d'une page vierge.

L'exploit vide les listes libres par CPU (PCP) pour que l'allocateur fournisse des pages physiquement adjacentes à partir de divisions buddy, puis organise la page du cache readdir et une page victime pour qu'elles soient voisines. Pour l'élévation de privilèges, la victime est la copie dans le cache de pages de /etc/passwd : le débordement de 24 octets réécrit la ligne de root pour que son champ mot de passe soit vide, et avec PAM nullok (par défaut Ubuntu), su root réussit alors avec un mot de passe vide.

Full writeup: https://cyberstan.co.uk/fuse-readdir-oob/

Disclosure

Signalé en amont par Qi Tang et Zijun Hu ; le correctif a été rédigé par Samuel Page. J'ai découvert et signalé cela indépendamment. Le crédit amont et CVE-2026-31694 leur sont attribués. Le bogue est corrigé dans la version principale et dans les arbres stables.

License

MIT, voir LICENSE. Pour l'éducation et les tests autorisés uniquement.

Télécharger l’outil