
CVE-2025-6019: udisks2 XFS Resize TOCTOU Privilege Escalation
CVE-2025-6019: udisks2 XFS Resize TOCTOU Privilege Escalation Ce dépôt contient une Preuve de Concept (PoC) pour CVE-2025-6019, une vulnérabilité de condition de course dans udisks2 qui permet une escalade locale de privilèges via le redimensionnement du système de fichiers XFS.
Cet exploit est conçu pour être universel sur tout système Linux répondant aux critères suivants :
Service vulnérable : udisks2 (avec accès D-Bus activé).
Outil de système de fichiers : xfsprogs installé (spécifiquement mkfs.xfs).
Architecture : Agnostic (Fonctionne sur x86, x64, ARM, etc.).
L'exploit a été vérifié sur la configuration suivante :
weapon.py gère automatiquement la configuration du PATH de l'environnement pour localiser mkfs.xfs, qui est généralement restreint à sbin.L'exploitation nécessite une image XFS spécialement conçue créée avec un fichier proto. Cela nous permet de définir une structure de système de fichiers qui inclut un binaire SUID root (pwnbash) sans nécessiter de privilèges root pendant la phase de création de l'image. L'option mkfs.xfs -p utilise ce modèle pour intégrer directement le bit SUID dans les métadonnées de l'image.
Les utilisateurs standard dans les sessions distantes (SSH, Docker) ne peuvent pas utiliser udisks2. Exécutez ce script pour simuler une session locale (seat0) :
python3 bypass.py
Générez l'image SUID à l'aide de weapon.py. Ce script utilise le fichier proto XFS pour intégrer un shell avec les permissions 4755. python3 weapon.py
Exécutez trigger.sh pour commencer à inonder udisks2 de requêtes de redimensionnement D-Bus. Cela force le démon à créer des points de montage temporaires dans /tmp/blockdev.XXXXXX. chmod +x trigger.sh ./trigger.sh
Étant donné que les scripts automatisés peuvent être instables dans des environnements à ressources limitées, la méthode manuelle est recommandée : Surveillez /tmp pour les points de montage temporaires : watch -n 0.1 "ls -la /tmp" Identifiez la cible : Recherchez un répertoire avec des permissions lisibles par tous (par exemple, drwxr-xr-x) au lieu du drwx------ durci par défaut.
Exécutez la charge utile : Une fois identifié, naviguez dans le répertoire et exécutez le shell :
cd /tmp/blockdev.Q797J3 # Example directory name ./pwnbash -p Résultat : Si l'exécution a lieu dans la fenêtre de course (avant que le drapeau nosuid ne soit appliqué), vous obtiendrez un shell root.
bypass.py : Script de configuration pour simuler une session locale (seat0) et contourner les restrictions Polkit via ~/.pam_environment.
weapon.py : Générateur d'image SUID utilisant le modèle de fichier proto XFS.
trigger.sh : Déclencheur de condition de course D-Bus pour le redimensionnement du système de fichiers udisks2.
Pour une analyse détaillée : 👉 NetaCoding - https://netacoding.com/posts/udisks2-cve_lpe/
Ce projet est destiné uniquement à des fins éducatives et de tests de sécurité autorisés. L'accès non autorisé aux systèmes informatiques est illégal.