
CVE-2025-6019: escalation dei privilegi TOCTOU in udisks2 XFS Resize
Questo repository contiene una Proof of Concept (PoC) per CVE-2025-6019, una vulnerabilità di race condition in udisks2 che consente l'escalation locale dei privilegi tramite il ridimensionamento del filesystem XFS.
Questo exploit è progettato per essere universale su qualsiasi sistema Linux che soddisfi i seguenti requisiti:
Servizio vulnerabile: udisks2 (con accesso D-Bus abilitato).
Strumento filesystem: xfsprogs installato (in particolare mkfs.xfs).
Architettura: agnostico (funziona su x86, x64, ARM, ecc.).
L'exploit è stato verificato sulla seguente configurazione:
weapon.py gestisce automaticamente la configurazione del PATH di ambiente per individuare mkfs.xfs, che di solito è limitato a sbin.Lo sfruttamento richiede un'immagine XFS appositamente costruita creata con un Protofile. Questo ci consente di definire una struttura del filesystem che include un binario SUID root (pwnbash) senza richiedere privilegi di root durante la fase di creazione dell'immagine. Il flag mkfs.xfs -p usa questo modello per incorporare il bit SUID direttamente nei metadati dell'immagine.
Gli utenti standard nelle sessioni remote (SSH, Docker) non possono utilizzare udisks2. Esegui questo script per simulare una sessione locale (seat0):
python3 bypass.py
Genera l'immagine SUID usando weapon.py. Questo script usa il protofile XFS per incorporare una shell con permessi 4755.
python3 weapon.py
Esegui trigger.sh per iniziare a inondare udisks2 con richieste di ridimensionamento D-Bus. Questo costringe il demone a creare punti di mount temporanei in /tmp/blockdev.XXXXXX.
chmod +x trigger.sh
./trigger.sh
Poiché gli script automatizzati possono essere instabili in ambienti con risorse limitate, si consiglia il metodo manuale: Monitora /tmp per i punti di mount temporanei:
watch -n 0.1 "ls -la /tmp"
Identifica il Target: cerca una directory con permessi leggibili da tutti (es., drwxr-xr-x) invece del default blindato drwx------.
Esegui il Payload: una volta identificata, entra nella directory ed esegui la shell:
cd /tmp/blockdev.Q797J3 # Example directory name
./pwnbash -p
Risultato: se l'esecuzione avviene nella finestra di race (prima che venga applicato il flag nosuid), ti verrà concessa una shell root.
bypass.py: script di configurazione per simulare una sessione locale (seat0) e bypassare le restrizioni di Polkit tramite ~/.pam_environment.
weapon.py: generatore di immagini SUID che utilizza il template Protofile XFS.
trigger.sh: trigger della race condition D-Bus per il ridimensionamento del filesystem udisks2.
Per un'analisi dettagliata: 👉 NetaCoding - https://netacoding.com/posts/udisks2-cve_lpe/
Questo progetto è destinato esclusivamente a scopi educativi e di test di sicurezza autorizzati. L'accesso non autorizzato ai sistemi informatici è illegale.