
Bewaffneter lokaler Privilegienausweitungs-Exploit für CVE-2026-7867 in udisks2. Demonstriert Benutzer-Mount-Spoofing, um PolicyKit zu umgehen und eine Root-Shell durch SUID-Payload-Injektion zu erlangen.
as-user Spoofing → Authorization Bypass → Root-context Mount → LPECVE-2026-7867 ist eine lokale Privilegienausweitungsschwachstelle in udisks2, die die D-Bus-Methode Filesystem.Mount, die Option as-user, fstab-gesteuerte Mount-Abläufe und eine fehlerhafte Autorisierungsbehandlung betrifft.
Dieses private Repository enthält die technischen Forschungsnotizen und Proof-of-Concept-Skripte, die zur Validierung des Problems in einer kontrollierten Laborumgebung verwendet wurden.
Die Schwachstelle wurde entdeckt und gemeldet von:
| Azizcan Daştan | azqzazq1 |
| Özlem Ozan | oz7oz7 |
Das Problem wurde zugewiesen:
CVE-2026-7867
Die Schwachstelle wird durch eine fehlerhafte Vertrauensbeziehung zwischen der tatsächlichen D-Bus-Aufrufer-UID und der berechneten/effektiven UID, die durch die Mount-Option as-user erzeugt wird, verursacht.
In anfälligen Abläufen kann ein unprivilegierter lokaler Benutzer den Mount-Ausführungspfad so beeinflussen, dass ein Dateisystem-Mount in einem privilegierten/Root-Kontext ohne das erwartete PolicyKit-Autorisierungsverhalten durchgeführt wird.
Der Kernfehler ist nicht einfach "benutzergesteuerte Mount-Optionen".
Das eigentliche Problem ist:
udisks2versäumt es, die ursprüngliche Aufruferidentität während der fstab-Mount-Autorisierung und -Ausführung konsistent von der berechnetenas-user-Identität zu unterscheiden.
Die anfällige Logik ist mit dem fstab-Mount-Abwicklungspfad innerhalb von udisks2 verbunden, insbesondere wenn die Mount-Anfrage beinhaltet:
Filesystem.Mount
as-user
x-udisks-auth
user
users
Die relevanten sicherheitssensitiven Bereiche sind:
D-Bus-Aufruferidentität
↓
as-user-Optionsbehandlung
↓
fstab-Autorisierungslogik
↓
PolicyKit-Entscheidungsablauf
↓
Root-Kontext-Mount-Ausführung
┌─────────────────────────────┐
│ Unprivilegierter lokaler │
│ Benutzer │
└──────────────┬──────────────┘
│
│ Filesystem.Mount
│ mit as-user-Einfluss
▼
┌─────────────────────────────┐
│ udisks2 / udisksd │
│ privilegierter Systemdienst │
└──────────────┬──────────────┘
│
│ fstab-Logik wertet
│ Benutzer-/Auth-Optionen aus
▼
┌─────────────────────────────┐
│ Autorisierungslücke │
│ mount_other_user wird │
│ im übersprungenen Pfad │
│ nicht erzwungen │
└──────────────┬──────────────┘
│
│ Root-Kontext-Zweig erreicht
▼
┌─────────────────────────────┐
│ Dateisystem gemountet │
│ ohne erwarteten Auth-Ablauf │
└──────────────┬──────────────┘
│
│ Auswirkung hängt von Mount-Flags ab
▼
┌─────────────────────────────┐
│ Lokale Privilegienausweitung│
│ kontrollierte Laborvalidierung│
└─────────────────────────────┘
Das anfällige Verhalten wird durch einen Identitätsverwirrungsfehler verursacht.
Das System hat mehrere Identitätskonzepte:
tatsächliche D-Bus-Aufrufer-UID
berechnete as-user-UID
effektive Mount-UID
udisksd-Daemon-Privilegienkontext
Der anfällige Ablauf setzt diese Identitäten nicht konsistent durch.
Insbesondere:
mount_other_user kann wahr werden, weil as-user verwendet wirdx-udisks-auth, user oder users können den Autorisierungspfad beeinflussenmount_other_user-Prüfung wird außerhalb dieses Blocks nicht zuverlässig erzwungenDas Ergebnis ist eine Umgehung der lokalen Privilegiengrenze.
x-udisks-auth-ProblemDie Option x-udisks-auth soll einen administrativen PolicyKit-Autorisierungsablauf erzwingen.
Erwartetes Verhalten:
Mount-Anfrage
↓
Versuch, Mount als Aufrufer durchzuführen
↓
Berechtigungs-/Auth-Fehler
↓
PolicyKit-Prüfung filesystem-fstab
↓
Admin-Genehmigung
↓
Mount als autorisierte privilegierte Aktion
Anfälliges Verhalten:
Mount-Anfrage mit as-user-Einfluss
↓
berechnete Identität beeinflusst Ausführung
↓
Mount gelingt zu früh
↓
PolicyKit-Auth-Pfad wird wie erwartet nicht erreicht
↓
privilegierter Mount-Zustand wird erreicht
Dies macht das Sicherheitsmodell um x-udisks-auth im anfälligen Pfad unzuverlässig.
Erwartetes Modell:
Unprivilegierter Benutzer
↓
D-Bus-Mount-Anfrage
↓
PolicyKit / fstab-Autorisierung
↓
eingeschränktes Mount-Verhalten
Gebrochenes Modell:
Unprivilegierter Benutzer
↓
D-Bus-Mount-Anfrage mit as-user-Spoofing
↓
Autorisierungslogik-Mismatch
↓
Root-Kontext-Mount-Ausführung
Der Fehler ist besonders schwerwiegend, weil der betroffene Dienst mit erhöhten Privilegien läuft.
Eine erfolgreiche Ausnutzung kann es einem lokalen unprivilegierten Benutzer ermöglichen, ein Dateisystem über udisks2 in einem Root-Kontext-Ausführungspfad zu mounten, ohne die erwartete Autorisierungsabfrage.
Je nach Dateisystem und Mount-Flags können die Auswirkungen umfassen:
Dies ist eine lokale Schwachstelle.
Relevante Bedingungen sind:
.
├── README.md
├── disk2root.sh ← Hauptexploit (eigenständiges LPE)
└── poc/
├── setup_lpe_env.sh ← Laboreinrichtung
├── f2_mount_as_user_bypass.sh
├── f2_check_nosuid.sh
├── f2_suid_test.sh
├── f2_final.sh
└── cleanup_lpe_env.sh
disk2root.shEigenständiger, nutzbarer Exploit. Erstellt sein eigenes SUID-Root-Payload, erstellt ein vorbereitetes Festplattenimage, mountet es über den as-user=root-Polkit-Bypass und öffnet eine Root-Shell.
Option 1 — Als Root ausführen (funktioniert überall, einschließlich SSH):
./disk2root.sh
Das Skript erledigt automatisch:
uid=0 mode=4755 via debugfsx-udisks-auth hinzusuFilesystem.Mount mit as-user=root auf (Polkit-Bypass)Um anzugeben, von welchem Benutzer aus eskaliert werden soll:
./disk2root.sh testuser
Wenn kein Benutzer angegeben wird, wählt das Skript den ersten regulären Benutzer im System oder erstellt einen temporären.
Option 2 — Als unprivilegierter Benutzer ausführen (Desktop / aktive Sitzung):
./disk2root.sh
Auf Systemen mit einer aktiven Polkit-Sitzung (Desktop-Login, GNOME/KDE) ist das Skript vollständig eigenständig – es erstellt sein eigenes Loop-Gerät via udisksctl oder D-Bus LoopSetup, mountet via as-user=root und eskaliert ohne vorherige Einrichtung.
Option 3 — Als unprivilegierter Benutzer ausführen (SSH, nach Einrichtung):
Wenn die Umgebung bereits vorbereitet wurde (z. B. durch Ausführen von poc/setup_lpe_env.sh als Root oder durch einen vorherigen ./disk2root.sh-Lauf als Root), kann jeder unprivilegierte Benutzer erneut ausnutzen:
./disk2root.sh
Das Skript erkennt automatisch anfällige fstab-Einträge und verwendet sie.
./disk2root.sh --cleanup
Entfernt alle Artefakte: fstab-Eintrag, Loop-Gerät, Mount-Punkt, temporären Benutzer.
Wenn als unprivilegiert ausgeführt, probiert das Skript mehrere Pfade in Reihenfolge:
[A] Eigenständig
Payload erstellen → ext4-Image erstellen → debugfs SUID-Binary injizieren
→ Loop-Setup (python3 GIO / udisksctl) → Mount as-user=root
✓ funktioniert auf Desktop-Sitzungen
[B] Fstab-Fallback
/etc/fstab auf x-udisks-auth / user / users-Einträge durchsuchen
→ Mount as-user=root → SUID-Binary auf gemountetem FS finden
✓ funktioniert auf SSH, wenn Umgebung vorbereitet ist
╔═════════════════════════════════════════════════════╗
║ CVE-2026-7867 — disk2root ║
║ udisks2 as-user polkit bypass → LPE root shell ║
╚═════════════════════════════════════════════════════════╝
[*] uid=1002 (testuser) — exploite...
fstab: /dev/loop5 → /mnt/disk2root (x-udisks-auth)
gemountet: /mnt/disk2root
nosuid: nicht gesetzt
suid: pwn (4755 root:root)
╔═════════════════════════════════════════════════════╗
║ Wechsel zu Root-Shell — 'exit' eingeben, um ║
║ zurückzukehren ║
╚═════════════════════════════════════════════════════════╝
[+] Root-Shell — uid=0 euid=0
root@target:/tmp#
poc/)Einzelne Validierungsskripte, die während der Forschung verwendet wurden. Dies sind die Bausteine, die zu disk2root.sh führten.
1. poc/setup_lpe_env.sh als Root ausführen
2. su - testuser
3. poc/f2_mount_as_user_bypass.sh ausführen
4. poc/f2_final.sh zur vollständigen Validierung ausführen
5. poc/cleanup_lpe_env.sh als Root ausführen
Oder einfach disk2root.sh verwenden, das alle oben genannten Schritte kombiniert.
Die durch diese Forschung demonstrierte Primitive ist:
as-user-Options-Spoofing innerhalb privilegierter Mount-Orchestrierung
Der kritische Übergang ist:
unprivilegierter D-Bus-Aufrufer
↓
gespoofte/berechnete Mount-Identität
↓
Autorisierungspfad-Verwirrung
↓
Root-Kontext-Mount-Ausführung
Deshalb qualifiziert sich das Problem als lokale Privilegienausweitungsschwachstelle.
udisks2 wird allgemein als privilegierter Speicherverwaltungsdienst vertraut.
Ein Fehler in dieser Ebene hat hohe Auswirkungen, da er zwischen folgendem sitzt:
Desktop-/Sitzungsbenutzern
D-Bus-Methodenaufrufen
PolicyKit-Autorisierung
Dateisystem-Mount-Operationen
Root-Daemon-Privilegien
Ein Fehler in der Identitätsbehandlung hier kann sich direkt auf lokale Privilegiengrenzen auswirken.
Verteidiger können verdächtige udisks2-Mount-Aktivitäten überwachen, die as-user betreffen.
Nützliche Telemetriequellen:
udisksd-Protokolle
D-Bus-Methodenaufrufe
PolicyKit-Protokolle
Mount-Tabellenänderungen
/proc/mounts
/etc/fstab
journalctl
Nützliche Befehle:
findmnt
mount
cat /proc/mounts
journalctl -u udisks2
journalctl | grep -i udisks
journalctl | grep -i polkit
Verdächtige Muster:
Nicht-Root-Benutzer löst Filesystem.Mount aus
as-user=root Verwendung
Unerwarteter Mount ohne PolicyKit-Abfrage
Mounts ohne nosuid/noexec/nodev
setuid-Ausführung von kürzlich gemounteten Dateisystemen
Unerwartete Loop-Gerät-Mounts
udisks2 aktualisierenWenden Sie den vom Anbieter bereitgestellten Fix an, sobald verfügbar.
Geplante Fix-Veröffentlichung:
udisks 2.11.2
Prüfen Sie Einträge mit:
x-udisks-auth
user
users
Überprüfen Sie insbesondere Dateisysteme, die ausführbare oder setuid-Inhalte enthalten können.
Da es sich um eine lokale Schwachstelle handelt, reduziert die Einschränkung des nicht vertrauenswürdigen lokalen Zugriffs die Gefährdung.
Überwachen Sie unerwartete Mount-Operationen durch:
udisksd
insbesondere, wenn sie von Nicht-Root-Benutzern ausgelöst werden.
Wo anwendbar, verwenden Sie:
nosuid
noexec
nodev
Diese Flags können die Auswirkungen nach dem Mount verringern.
Überprüfen Sie PolicyKit-Regeln im Zusammenhang mit udisks-Mount-Aktionen.
Stellen Sie sicher, dass unprivilegierte Benutzer ohne explizite Autorisierung keine sensiblen Mount-Pfade auslösen können.
Ein robuster Fix sollte sicherstellen, dass:
as-user-UID nicht die Aufruferidentität für die Autorisierung ersetztmount_other_user immer ordnungsgemäße PolicyKit-Prüfungen auslöstx-udisks-auth konsistent die Authentifizierung erzwingtNach Aufhebung der Embargofrist kann dieses Repository in ein öffentliches Forschungs-Repo umgewandelt werden mit:
docs/
├── technical-analysis.md
├── root-cause.md
├── lab-setup.md
├── exploit-flow.md
├── detection.md
└── mitigation.md
Empfohlene öffentliche Ergänzungen:
Dieses Repository ist nur für autorisierte Sicherheitsforschung, Anbieterkoordination und defensive Validierung bestimmt.
Die PoC-Skripte sind für isolierte Testumgebungen gedacht.
Führen Sie diese Skripte nicht auf Systemen aus, die Ihnen nicht gehören oder für die Sie keine ausdrückliche Erlaubnis zum Testen haben.
Die Autoren sind nicht verantwortlich für Missbrauch dieser Forschung.
CVE-2026-7867
udisks2 Lokale Privilegienausweitung – Forschung
| Feld | Wert |
|---|
| CVE | CVE-2026-7867 |
| Produkt | udisks2 |
| Komponente | Filesystem.Mount |
| Angriffsart | Lokale Privilegienausweitung |
| Primitive | as-user-Spoofing |
| Sicherheitsgrenze | D-Bus-Aufruferidentität → privilegierte Mount-Ausführung |
| Autorisierungsebene | PolicyKit / fstab-Mount-Autorisierung |
| Anbieter | Red Hat / udisks-Upstream |
| Status | Patch in Arbeit / koordinierte Offenlegung |
| Geplante Fix-Veröffentlichung | udisks 2.11.2 |
| Bedingung | Erforderlich |
|---|
| Lokaler Benutzerzugriff | Ja |
Anfällige udisks2-Version | Ja |
as-user-Funktionalität vorhanden | Ja |
| Geeignetes fstab-verwaltetes Mount-Ziel | Ja |
| Anfälliger Autorisierungspfad | Ja |
| Fernzugriff | Nein |
| Werkzeug | Zweck | Erforderlich |
|---|
busctl | D-Bus-Mount-Aufruf | Ja |
gcc | SUID-Payload kompilieren | Ja (Fallback zu Bash-Kopie) |
mke2fs | ext4-Image erstellen | Ja (Eigenständiger Modus) |
debugfs | Binary mit uid=0 injizieren | Ja (Eigenständiger Modus) |
python3-gi | D-Bus-LoopSetup mit fd-Übergabe | Optional (Desktop-Modus) |
udisksctl | Loop-Geräteeinrichtung | Optional (Desktop-Modus) |
| Skript | Zweck |
|---|
setup_lpe_env.sh | Laborumgebung vorbereiten (Loop-Gerät, fstab, Testbenutzer) |
f2_mount_as_user_bypass.sh | Filesystem.Mount-Bypass mit as-user=root validieren |
f2_check_nosuid.sh | nosuid/noexec/nodev-Flags beim Bypass-Mount überprüfen |
f2_suid_test.sh | SUID-Binary-Ausführung auf gemountetem Dateisystem testen |
f2_final.sh | End-to-End-PoC: Einrichtung → Bypass → euid=0 überprüfen |
cleanup_lpe_env.sh | Testumgebung wiederherstellen |
| Datum | Ereignis |
|---|
2026-04-21 | Bericht an Red Hat Product Security eingereicht |
2026-04-21 | Red Hat hat den Erhalt bestätigt |
2026-04-28 | Anbieter hat die fehlerhafte Logik bestätigt |
2026-04-28 | Anbieter hat PoC-Skripte angefordert |
2026-04-30 | Anbieter hat CVE-Zuweisung beantragt |
2026-04-30 | PoC-Skripte an Anbieter gesendet |
2026-05-03 | Erster Anbieter-Patch geteilt |
2026-05-05 | Aktualisierter Anbieter-Patch geteilt |
2026-05-05 | CVE-2026-7867 reserviert |
2026-05-05 | Ticket als gelöst markiert |
2026-05-07 | Anbieter gab Fix für udisks 2.11.2 an |
| Forscher | GitHub | Rolle |
|---|---|---|
| Azizcan Daştan | azqzazq1 | Entdeckung, Analyse, PoC-Entwicklung, Anbieterkoordination |
| Özlem Ozan | oz7oz7 | Forschungskooperation und Offenlegungs-Credit |