
Exploit di escalation di privilegi locale armato per CVE-2026-7867 in udisks2, che utilizza lo spoofing di mount as-user per bypassare PolicyKit e ottenere una shell root.
as-user Spoofing → Authorization Bypass → Root-context Mount → LPECVE-2026-7867 è una vulnerabilità di escalation dei privilegi locali in udisks2 che coinvolge il metodo D-Bus Filesystem.Mount, l'opzione as-user, i flussi di mount gestiti da fstab e una gestione delle autorizzazioni imperfetta.
Questo repository privato contiene le note tecniche di ricerca e gli script PoC utilizzati per convalidare il problema in un ambiente di laboratorio controllato.
La vulnerabilità è stata scoperta e segnalata da:
| Azizcan Daştan | azqzazq1 |
| Özlem Ozan | oz7oz7 |
Il problema è stato assegnato:
CVE-2026-7867
La vulnerabilità è causata da una relazione di fiducia imperfetta tra il UID reale del chiamante D-Bus e l'**UID calcolato/effettivo prodotto dall'opzione di mount as-user.
Nei flussi vulnerabili, un utente locale non privilegiato può influenzare il percorso di esecuzione del mount in modo che un mount del filesystem venga eseguito in un contesto privilegiato/root senza il comportamento di autorizzazione PolicyKit previsto.
Il bug principale non è semplicemente "opzioni di mount controllate dall'utente".
Il vero problema è:
udisks2non riesce a distinguere in modo coerente l'identità del chiamante originale dall'identitàas-usercalcolata durante l'autorizzazione e l'esecuzione del mount fstab.
La logica vulnerabile è associata al percorso di gestione del mount fstab all'interno di udisks2, specialmente quando la richiesta di mount coinvolge:
Filesystem.Mount
as-user
x-udisks-auth
user
users
Le aree sensibili alla sicurezza rilevanti sono:
Identità del chiamante D-Bus
↓
Gestione opzione as-user
↓
Logica di autorizzazione fstab
↓
Flusso decisionale PolicyKit
↓
Esecuzione mount in contesto root
┌─────────────────────────────┐
│ Utente Locale Non Privilegiato│
└──────────────┬──────────────┘
│
│ Filesystem.Mount
│ con influenza as-user
▼
┌─────────────────────────────┐
│ udisks2 / udisksd │
│ demone di sistema privilegiato│
└──────────────┬──────────────┘
│
│ La logica fstab valuta
│ opzioni utente/auth
▼
┌─────────────────────────────┐
│ Gap di Autorizzazione │
│ mount_other_user non │
│ applicato nel percorso │
│ saltato │
└──────────────┬──────────────┘
│
│ Ramo in contesto root raggiunto
▼
┌─────────────────────────────┐
│ Filesystem Montato │
│ senza il flusso di auth │
│ previsto │
└──────────────┬──────────────┘
│
│ l'impatto dipende dai flag di mount
▼
┌─────────────────────────────┐
│ Escalation Privilegi Locali │
│ convalida in laboratorio │
│ controllato │
└─────────────────────────────┘
Il comportamento vulnerabile deriva da un bug di confusione di identità.
Il sistema ha molteplici concetti di identità:
UID reale del chiamante D-Bus
UID calcolato as-user
UID effettivo del mount
Contesto di privilegio del demone udisksd
Il flusso vulnerabile non applica queste identità in modo coerente.
In particolare:
mount_other_user può diventare true perché viene usato as-userx-udisks-auth, user o users possono influenzare il percorso di autorizzazionemount_other_user non è applicato in modo affidabile al di fuori di quel bloccoIl risultato è un bypass del confine dei privilegi locali.
x-udisks-authL'opzione x-udisks-auth dovrebbe forzare un flusso di autorizzazione PolicyKit amministrativo.
Comportamento atteso:
richiesta mount
↓
tentativo mount come chiamante
↓
permesso/auth fallito
↓
Controllo PolicyKit filesystem-fstab
↓
approvazione admin
↓
mount come azione privilegiata autorizzata
Comportamento vulnerabile:
richiesta mount con influenza as-user
↓
identità calcolata influisce sull'esecuzione
↓
mount ha successo troppo presto
↓
Percorso auth PolicyKit non raggiunto come previsto
↓
stato mount privilegiato ottenuto
Ciò rende il modello di sicurezza attorno a x-udisks-auth inaffidabile nel percorso vulnerabile.
Modello atteso:
Utente non privilegiato
↓
Richiesta mount D-Bus
↓
Autorizzazione PolicyKit / fstab
↓
comportamento di mount limitato
Modello violato:
Utente non privilegiato
↓
Richiesta mount D-Bus con spoofing as-user
↓
disallineamento logica autorizzazione
↓
esecuzione mount in contesto root
Il bug è particolarmente grave perché il servizio interessato opera con privilegi elevati.
Uno sfruttamento riuscito può consentire a un utente locale non privilegiato di montare un filesystem tramite udisks2 in un percorso di esecuzione in contesto root senza il prompt di autorizzazione previsto.
A seconda del filesystem e dei flag di mount, l'impatto può includere:
Questa è una vulnerabilità locale.
Le condizioni rilevanti includono:
.
├── README.md
├── disk2root.sh ← exploit principale (LPE autonomo)
└── poc/
├── setup_lpe_env.sh ← configurazione ambiente di laboratorio
├── f2_mount_as_user_bypass.sh
├── f2_check_nosuid.sh
├── f2_suid_test.sh
├── f2_final.sh
└── cleanup_lpe_env.sh
disk2root.shExploit autonomo armato. Costruisce il proprio payload SUID root, crea un'immagine disco preparata, la monta tramite il bypass polkit as-user=root e apre una shell root.
Opzione 1 — Eseguire come root (funziona ovunque, incluso SSH):
./disk2root.sh
Lo script automaticamente:
uid=0 mode=4755 tramite debugfsx-udisks-authsuFilesystem.Mount con as-user=root (bypass polkit)Per specificare da quale utente escalare:
./disk2root.sh testuser
Se non viene specificato alcun utente, lo script sceglie il primo utente regolare sul sistema o ne crea uno temporaneo.
Opzione 2 — Eseguire come utente non privilegiato (desktop / sessione attiva):
./disk2root.sh
Su sistemi con una sessione polkit attiva (login desktop, GNOME/KDE), lo script è completamente autonomo — crea il proprio dispositivo loop tramite udisksctl o D-Bus LoopSetup, monta tramite as-user=root e scala senza alcuna configurazione preliminare.
Opzione 3 — Eseguire come utente non privilegiato (SSH, dopo la configurazione):
Se l'ambiente è già stato preparato (ad esempio eseguendo poc/setup_lpe_env.sh come root, o da una precedente esecuzione di ./disk2root.sh come root), qualsiasi utente non privilegiato può rieseguire l'exploit:
./disk2root.sh
Lo script rileva automaticamente le voci fstab vulnerabili e le utilizza.
./disk2root.sh --cleanup
Rimuove tutti gli artefatti: voce fstab, dispositivo loop, punto di mount, utente temporaneo.
Quando eseguito come non privilegiato, lo script prova più percorsi in ordine:
[A] Autonomo
costruisci payload → crea immagine ext4 → debugfs inietta binario SUID
→ loop-setup (python3 GIO / udisksctl) → mount as-user=root
✓ funziona su sessioni desktop
[B] Fallback Fstab
scansiona /etc/fstab per voci x-udisks-auth / user / users
→ mount as-user=root → trova binario SUID su fs montato
✓ funziona su SSH quando l'ambiente è preparato
╔═════════════════════════════════════════════════════╗
║ CVE-2026-7867 — disk2root ║
║ bypass polkit as-user di udisks2 → shell root LPE ║
╚═════════════════════════════════════════════════════════╝
[*] uid=1002 (testuser) — exploiting...
fstab: /dev/loop5 → /mnt/disk2root (x-udisks-auth)
mounted: /mnt/disk2root
nosuid: non impostato
suid: pwn (4755 root:root)
╔═════════════════════════════════════════════════════╗
║ apertura shell root — digita 'exit' per tornare ║
╚═════════════════════════════════════════════════════════╝
[+] root shell — uid=0 euid=0
root@target:/tmp#
poc/)Script di convalida individuali utilizzati durante la ricerca. Questi sono gli elementi costitutivi che hanno portato a disk2root.sh.
1. Esegui poc/setup_lpe_env.sh come root
2. su - testuser
3. Esegui poc/f2_mount_as_user_bypass.sh
4. Esegui poc/f2_final.sh per convalida completa
5. Esegui poc/cleanup_lpe_env.sh come root
Oppure usa semplicemente disk2root.sh che combina tutto quanto sopra.
La primitiva dimostrata da questa ricerca è:
Spoofing dell'opzione as-user all'interno dell'orchestrazione del mount privilegiato
La transizione critica è:
Chiamante D-Bus non privilegiato
↓
Identità di mount spoofata/calcolata
↓
Confusione nel percorso di autorizzazione
↓
Esecuzione mount in contesto root
Questo è il motivo per cui il problema costituisce una vulnerabilità di escalation dei privilegi locali.
udisks2 è comunemente considerato un demone di gestione dello storage privilegiato.
Un bug a questo livello è ad alto impatto perché si trova tra:
Utenti desktop/sessione
Chiamate a metodi D-Bus
Autorizzazione PolicyKit
Operazioni di mount di filesystem
Privilegi del demone root
Un difetto nella gestione dell'identità qui può influenzare direttamente i confini dei privilegi locali.
I difensori possono monitorare attività sospette di mount di udisks2 che coinvolgono as-user.
Fonti di telemetria utili:
Log di udisksd
Chiamate a metodi D-Bus
Log di PolicyKit
Modifiche alla tabella dei mount
/proc/mounts
/etc/fstab
journalctl
Comandi utili:
findmnt
mount
cat /proc/mounts
journalctl -u udisks2
journalctl | grep -i udisks
journalctl | grep -i polkit
Pattern sospetti:
Utente non root che attiva Filesystem.Mount
Uso di as-user=root
Mount inaspettato senza prompt PolicyKit
Mount privi di nosuid/noexec/nodev
Esecuzione setuid da filesystem montati di recente
Mount inaspettati di dispositivi loop
udisks2Applicare la correzione fornita dal vendor una volta disponibile.
Versione prevista per il fix:
udisks 2.11.2
Controllare le voci che utilizzano:
x-udisks-auth
user
users
In particolare, rivedere i filesystem che possono contenere contenuti eseguibili o setuid.
Poiché si tratta di una vulnerabilità locale, ridurre l'accesso locale non fidato diminuisce l'esposizione.
Monitorare operazioni di mount inaspettate attraverso:
udisksd
specialmente quando attivate da utenti non root.
Dove applicabile, utilizzare:
nosuid
noexec
nodev
Questi flag possono ridurre l'impatto post-mount.
Rivedere le regole PolicyKit relative alle azioni di mount di udisks.
Assicurarsi che gli utenti non privilegiati non possano attivare percorsi di mount sensibili senza autorizzazione esplicita.
Una correzione robusta dovrebbe garantire che:
as-user calcolato non sostituisca l'identità del chiamante per l'autorizzazionemount_other_user attivi sempre i controlli PolicyKit appropriatix-udisks-auth applichi coerentemente l'autenticazioneDopo il sollevamento dell'embargo, questo repository può essere convertito in un repository di ricerca pubblica con:
docs/
├── technical-analysis.md
├── root-cause.md
├── lab-setup.md
├── exploit-flow.md
├── detection.md
└── mitigation.md
Aggiunte pubbliche raccomandate:
Questo repository è destinato esclusivamente a ricerca di sicurezza autorizzata, coordinamento con il vendor e convalida difensiva.
Gli script PoC sono destinati ad ambienti di test isolati.
Non eseguire questi script su sistemi di cui non si è proprietari o per i quali non si ha esplicito permesso di test.
Gli autori non sono responsabili per l'uso improprio di questa ricerca.
CVE-2026-7867
Ricerca sull'Escalation dei Privilegi Locali in udisks2
| Campo | Valore |
|---|
| CVE | CVE-2026-7867 |
| Prodotto | udisks2 |
| Componente | Filesystem.Mount |
| Tipo di Attacco | Escalation dei Privilegi Locali |
| Primitiva | Spoofing di as-user |
| Confine di Sicurezza | Identità del chiamante D-Bus → esecuzione mount privilegiato |
| Livello di Autorizzazione | PolicyKit / autorizzazione mount fstab |
| Vendor | Red Hat / upstream udisks |
| Stato | Patch in corso / divulgazione coordinata |
| Rilascio Fix Previsto | udisks 2.11.2 |
| Condizione | Richiesta |
|---|
| Accesso utente locale | Sì |
Versione udisks2 vulnerabile | Sì |
Funzionalità as-user presente | Sì |
| Destinazione di mount gestita da fstab adatta | Sì |
| Percorso di autorizzazione vulnerabile | Sì |
| Accesso remoto | No |
| Strumento | Scopo | Richiesto |
|---|
busctl | Chiamata mount D-Bus | Sì |
gcc | Compila payload SUID | Sì (fallback a copia bash) |
mke2fs | Crea immagine ext4 | Sì (modalità autonoma) |
debugfs | Inietta binario con uid=0 | Sì (modalità autonoma) |
python3-gi | D-Bus LoopSetup con passaggio fd | Opzionale (modalità desktop) |
udisksctl | Configurazione dispositivo loop | Opzionale (modalità desktop) |
| Script | Scopo |
|---|
setup_lpe_env.sh | Prepara ambiente di laboratorio (loop device, fstab, utente test) |
f2_mount_as_user_bypass.sh | Convalida bypass di Filesystem.Mount con as-user=root |
f2_check_nosuid.sh | Verifica flag nosuid/noexec/nodev sul mount bypassato |
f2_suid_test.sh | Testa esecuzione binario SUID su filesystem montato |
f2_final.sh | PoC end-to-end: setup → bypass → verifica euid=0 |
cleanup_lpe_env.sh | Ripristina ambiente di test |
| Data | Evento |
|---|
2026-04-21 | Rapporto inviato a Red Hat Product Security |
2026-04-21 | Red Hat ha confermato la ricezione |
2026-04-28 | Il vendor ha confermato la logica imperfetta |
2026-04-28 | Il vendor ha richiesto gli script PoC |
2026-04-30 | Il vendor ha richiesto l'assegnazione CVE |
2026-04-30 | Script PoC inviati al vendor |
2026-05-03 | Prima patch del vendor condivisa |
2026-05-05 | Patch aggiornata del vendor condivisa |
2026-05-05 | CVE-2026-7867 riservato |
2026-05-05 | Ticket segnato come risolto |
2026-05-07 | Il vendor ha indicato il fix previsto per udisks 2.11.2 |
| Ricercatore | GitHub | Ruolo |
|---|---|---|
| Azizcan Daştan | azqzazq1 | Scoperta, analisi, sviluppo PoC, coordinamento con il vendor |
| Özlem Ozan | oz7oz7 | Collaborazione alla ricerca e credito di divulgazione |