
Exploit d'élévation de privilèges locale armé pour CVE-2026-7867 dans udisks2, utilisant une usurpation de montage en tant qu'utilisateur pour contourner PolicyKit et obtenir un shell root.
as-user Spoofing → Authorization Bypass → Root-context Mount → LPECVE-2026-7867 est une vulnérabilité d'élévation de privilèges locale dans udisks2 impliquant la méthode D-Bus Filesystem.Mount, l'option as-user, les flux de montage gérés par fstab, et une gestion d'autorisation défaillante.
Ce dépôt privé contient les notes de recherche techniques et les scripts PoC utilisés pour valider le problème dans un environnement de laboratoire contrôlé.
La vulnérabilité a été découverte et signalée par :
| Azizcan Daştan | azqzazq1 |
| Özlem Ozan | oz7oz7 |
Le problème a été attribué :
CVE-2026-7867
La vulnérabilité est causée par une relation de confiance défaillante entre l'UID réel de l'appelant D-Bus et l'UID calculé/effectif produit par l'option de montage as-user.
Dans les flux vulnérables, un utilisateur local non privilégié peut influencer le chemin d'exécution du montage de sorte qu'un montage de système de fichiers est effectué dans un contexte privilégié/root sans le comportement d'autorisation PolicyKit attendu.
Le bogue principal n'est pas simplement des « options de montage contrôlées par l'utilisateur ».
Le véritable problème est :
udisks2ne parvient pas à distinguer de manière cohérente l'identité de l'appelant original de l'identitéas-usercalculée lors de l'autorisation et de l'exécution du montage fstab.
La logique vulnérable est associée au chemin de gestion du montage fstab dans udisks2, en particulier lorsque la demande de montage implique :
Filesystem.Mount
as-user
x-udisks-auth
user
users
Les zones sensibles à la sécurité pertinentes sont :
D-Bus caller identity
↓
as-user option handling
↓
fstab authorization logic
↓
PolicyKit decision flow
↓
root-context mount execution
┌─────────────────────────────┐
│ Utilisateur local non │
│ privilégié │
└──────────────┬──────────────┘
│
│ Filesystem.Mount
│ avec influence as-user
▼
┌─────────────────────────────┐
│ udisks2 / udisksd │
│ démon système privilégié │
└──────────────┬──────────────┘
│
│ La logique fstab évalue
│ les options utilisateur/auth
▼
┌─────────────────────────────┐
│ Faille d'autorisation │
│ mount_other_user non │
│ appliquée dans le chemin │
│ ignoré │
└──────────────┬──────────────┘
│
│ Branche de contexte root
│ atteinte
▼
┌─────────────────────────────┐
│ Système de fichiers monté │
│ sans le flux d'autorisation │
│ attendu │
└──────────────┬──────────────┘
│
│ l'impact dépend des
│ indicateurs de montage
▼
┌─────────────────────────────┐
│ Élévation de privilèges │
│ locale — validation en │
│ laboratoire contrôlé │
└─────────────────────────────┘
Le comportement vulnérable provient d'un bogue de confusion d'identité.
Le système a plusieurs concepts d'identité :
UID réel de l'appelant D-Bus
UID as-user calculé
UID effectif du montage
contexte de privilège du démon udisksd
Le flux vulnérable ne parvient pas à appliquer ces identités de manière cohérente.
En particulier :
mount_other_user peut devenir vrai car as-user est utiliséx-udisks-auth, user ou users peuvent affecter le chemin d'autorisationmount_other_user n'est pas appliquée de manière fiable en dehors de ce blocLe résultat est un contournement de la frontière de privilège locale.
x-udisks-authL'option x-udisks-auth est censée forcer un flux d'autorisation PolicyKit administratif.
Comportement attendu :
mount request
↓
tentative de montage en tant qu'appelant
↓
échec de permission/auth
↓
vérification PolicyKit filesystem-fstab
↓
approbation admin
↓
montage en tant qu'action privilégiée autorisée
Comportement vulnérable :
demande de montage avec influence as-user
↓
l'identité calculée affecte l'exécution
↓
le montage réussit trop tôt
↓
le chemin d'authentification PolicyKit n'est pas atteint comme prévu
↓
l'état de montage privilégié est atteint
Cela rend le modèle de sécurité autour de x-udisks-auth peu fiable dans le chemin vulnérable.
Modèle attendu :
Utilisateur non privilégié
↓
Demande de montage D-Bus
↓
Autorisation PolicyKit / fstab
↓
comportement de montage restreint
Modèle cassé :
Utilisateur non privilégié
↓
Demande de montage D-Bus avec usurpation as-user
↓
décalage de logique d'autorisation
↓
exécution de montage en contexte root
Le bogue est particulièrement grave car le service concerné s'exécute avec des privilèges élevés.
Une exploitation réussie peut permettre à un utilisateur local non privilégié de monter un système de fichiers via udisks2 dans un chemin d'exécution en contexte root sans l'invite d'autorisation attendue.
En fonction du système de fichiers et des indicateurs de montage, l'impact peut inclure :
Il s'agit d'une vulnérabilité locale.
Les conditions pertinentes incluent :
.
├── README.md
├── disk2root.sh ← main exploit (self-contained LPE)
└── poc/
├── setup_lpe_env.sh ← lab environment setup
├── f2_mount_as_user_bypass.sh
├── f2_check_nosuid.sh
├── f2_suid_test.sh
├── f2_final.sh
└── cleanup_lpe_env.sh
disk2root.shExploit autonome et armé. Construit son propre payload SUID root, crée une image disque préparée, la monte via le contournement polkit as-user=root, et ouvre un shell root.
Option 1 — Exécuter en tant que root (fonctionne partout, y compris SSH) :
./disk2root.sh
Le script automatiquement :
uid=0 mode=4755 via debugfsx-udisks-authsuFilesystem.Mount avec as-user=root (contournement polkit)Pour spécifier l'utilisateur à partir duquel escalader :
./disk2root.sh testuser
Si aucun utilisateur n'est spécifié, le script choisit le premier utilisateur normal du système ou en crée un temporaire.
Option 2 — Exécuter en tant qu'utilisateur non privilégié (bureau / session active) :
./disk2root.sh
Sur les systèmes avec une session polkit active (connexion bureau, GNOME/KDE), le script est totalement autonome — il crée son propre périphérique loop via udisksctl ou D-Bus LoopSetup, monte via as-user=root, et escalade sans aucune configuration préalable.
Option 3 — Exécuter en tant qu'utilisateur non privilégié (SSH, après configuration) :
Si l'environnement a déjà été préparé (par exemple en exécutant poc/setup_lpe_env.sh en tant que root, ou par une exécution précédente de ./disk2root.sh en tant que root), tout utilisateur non privilégié peut ré-exploiter :
./disk2root.sh
Le script détecte automatiquement les entrées fstab vulnérables et les utilise.
./disk2root.sh --cleanup
Supprime tous les artefacts : entrée fstab, périphérique loop, point de montage, utilisateur temporaire.
Lorsqu'il est exécuté en tant que non privilégié, le script essaie plusieurs chemins dans l'ordre :
[A] Autonome
construire payload → créer image ext4 → injecter binaire SUID avec debugfs
→ configuration loop (python3 GIO / udisksctl) → monter as-user=root
✓ fonctionne sur les sessions bureau
[B] Repli fstab
analyser /etc/fstab pour les entrées x-udisks-auth / user / users
→ monter as-user=root → trouver binaire SUID sur le FS monté
✓ fonctionne sur SSH lorsque l'environnement est préparé
╔═════════════════════════════════════════════════════╗
║ CVE-2026-7867 — disk2root ║
║ udisks2 as-user polkit bypass → LPE root shell ║
╚═════════════════════════════════════════════════════════╝
[*] uid=1002 (testuser) — exploiting...
fstab: /dev/loop5 → /mnt/disk2root (x-udisks-auth)
mounted: /mnt/disk2root
nosuid: not set
suid: pwn (4755 root:root)
╔═════════════════════════════════════════════════════╗
║ dropping into root shell — type 'exit' to return ║
╚═════════════════════════════════════════════════════════╝
[+] root shell — uid=0 euid=0
root@target:/tmp#
poc/)Scripts de validation individuels utilisés pendant la recherche. Ce sont les éléments de base qui ont conduit à disk2root.sh.
1. Run poc/setup_lpe_env.sh as root
2. su - testuser
3. Run poc/f2_mount_as_user_bypass.sh
4. Run poc/f2_final.sh for full validation
5. Run poc/cleanup_lpe_env.sh as root
Ou utilisez simplement disk2root.sh qui combine tout ce qui précède.
La primitive démontrée par cette recherche est :
Usurpation de l'option as-user dans l'orchestration de montage privilégié
La transition critique est :
appelant D-Bus non privilégié
↓
identité de montage usurpée/calculée
↓
confusion du chemin d'autorisation
↓
exécution de montage en contexte root
C'est pourquoi le problème est qualifié de vulnérabilité d'élévation de privilèges locale.
udisks2 est généralement considéré comme un démon de gestion de stockage privilégié.
Un bogue dans cette couche a un impact élevé car il se situe entre :
utilisateurs de bureau/session
appels de méthode D-Bus
autorisation PolicyKit
opérations de montage de système de fichiers
privilèges du démon root
Une faille dans la gestion des identités peut directement affecter les frontières de privilèges locales.
Les défenseurs peuvent surveiller les activités suspectes de montage udisks2 impliquant as-user.
Sources de télémétrie utiles :
journaux udisksd
appels de méthode D-Bus
journaux PolicyKit
changements de table de montage
/proc/mounts
/etc/fstab
journalctl
Commandes utiles :
findmnt
mount
cat /proc/mounts
journalctl -u udisks2
journalctl | grep -i udisks
journalctl | grep -i polkit
Modèles suspects :
utilisateur non root déclenchant Filesystem.Mount
utilisation de as-user=root
montage inattendu sans invite PolicyKit
montages sans nosuid/noexec/nodev
exécution setuid à partir de systèmes de fichiers récemment montés
montages inattendus de périphériques loop
udisks2Appliquer le correctif fourni par le vendeur dès qu'il sera disponible.
Version de correctif prévue :
udisks 2.11.2
Auditer les entrées utilisant :
x-udisks-auth
user
users
Examiner particulièrement les systèmes de fichiers pouvant contenir du contenu exécutable ou setuid.
Comme il s'agit d'une vulnérabilité locale, réduire l'accès local non fiable diminue l'exposition.
Surveiller les opérations de montage inattendues via :
udisksd
surtout lorsqu'elles sont déclenchées par des utilisateurs non root.
Lorsque applicable, utilisez :
nosuid
noexec
nodev
Ces indicateurs peuvent réduire l'impact post-montage.
Examiner les règles PolicyKit liées aux actions de montage udisks.
S'assurer que les utilisateurs non privilégiés ne peuvent pas déclencher des chemins de montage sensibles sans autorisation explicite.
Un correctif robuste devrait garantir que :
as-user calculé ne remplace pas l'identité de l'appelant pour l'autorisationmount_other_user déclenche toujours les vérifications PolicyKit appropriéesx-udisks-auth applique systématiquement l'authentificationAprès la levée de l'embargo, ce dépôt peut être converti en un dépôt de recherche public avec :
docs/
├── technical-analysis.md
├── root-cause.md
├── lab-setup.md
├── exploit-flow.md
├── detection.md
└── mitigation.md
Ajouts publics recommandés :
Ce dépôt est destiné uniquement à la recherche en sécurité autorisée, à la coordination avec les vendeurs et à la validation défensive.
Les scripts PoC sont destinés à des environnements de test isolés.
N'exécutez pas ces scripts sur des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas l'autorisation explicite de tester.
Les auteurs ne sont pas responsables d'une mauvaise utilisation de cette recherche.
CVE-2026-7867
udisks2 Local Privilege Escalation Research
| Champ | Valeur |
|---|
| CVE | CVE-2026-7867 |
| Produit | udisks2 |
| Composant | Filesystem.Mount |
| Type d'attaque | Élévation de privilèges locale |
| Primitive | Usurpation as-user |
| Frontière de sécurité | Identité de l'appelant D-Bus → exécution de montage privilégié |
| Couche d'autorisation | Autorisation de montage PolicyKit / fstab |
| Fournisseur | Red Hat / udisks upstream |
| Statut | Correctif en cours / divulgation coordonnée |
| Version de correctif prévue | udisks 2.11.2 |
| Condition | Requis |
|---|
| Accès utilisateur local | Oui |
Version vulnérable de udisks2 | Oui |
Fonctionnalité as-user présente | Oui |
| Cible de montage gérée par fstab appropriée | Oui |
| Chemin d'autorisation vulnérable | Oui |
| Accès distant | Non |
| Outil | Objectif | Requis |
|---|
busctl | Appel de montage D-Bus | Oui |
gcc | Compiler le payload SUID | Oui (utilise une copie bash en secours) |
mke2fs | Créer une image ext4 | Oui (mode autonome) |
debugfs | Injecter le binaire avec uid=0 | Oui (mode autonome) |
python3-gi | Configuration de boucle D-Bus avec passage de fd | Optionnel (mode bureau) |
udisksctl | Configuration du périphérique loop | Optionnel (mode bureau) |
| Script | Objectif |
|---|
setup_lpe_env.sh | Préparer l'environnement de laboratoire (périphérique loop, fstab, utilisateur test) |
f2_mount_as_user_bypass.sh | Valider le contournement de Filesystem.Mount avec as-user=root |
f2_check_nosuid.sh | Vérifier les indicateurs nosuid/noexec/nodev sur le montage contourné |
f2_suid_test.sh | Tester l'exécution du binaire SUID sur le système de fichiers monté |
f2_final.sh | PoC de bout en bout : configuration → contournement → vérifier euid=0 |
cleanup_lpe_env.sh | Restaurer l'environnement de test |
| Date | Événement |
|---|
2026-04-21 | Rapport soumis à la sécurité des produits Red Hat |
2026-04-21 | Red Hat a confirmé la réception |
2026-04-28 | Le vendeur a confirmé la logique défectueuse |
2026-04-28 | Le vendeur a demandé les scripts PoC |
2026-04-30 | Le vendeur a demandé l'allocation CVE |
2026-04-30 | Scripts PoC envoyés au vendeur |
2026-05-03 | Correctif initial du vendeur partagé |
2026-05-05 | Correctif mis à jour du vendeur partagé |
2026-05-05 | CVE-2026-7867 réservé |
2026-05-05 | Ticket marqué comme résolu |
2026-05-07 | Le vendeur a indiqué un correctif prévu pour udisks 2.11.2 |
| Chercheur | GitHub | Rôle |
|---|---|---|
| Azizcan Daştan | azqzazq1 | Découverte, analyse, développement PoC, coordination avec le vendeur |
| Özlem Ozan | oz7oz7 | Collaboration à la recherche et crédit de divulgation |