CVE-2021-3560
Privilegienerhöhung durch Race Condition in polkit.
Beschreibung der Schwachstelle
CVE-2021-3560 ist eine Race Condition in polkit, die es einem nicht authentifizierten lokalen Benutzer ermöglicht, Root-Rechte zu erlangen. Die Schwachstelle besteht in der Art und Weise, wie polkit D-Bus-Fehler bei Verbindungsabbruch behandelt.
Bestimmung des Timings
Um das optimale Timing zu bestimmen, führen Sie folgenden Befehl aus:
time dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:testuser string:"Test User" int32:1
Im Code wird ein Bereich von der Hälfte der realen Zeit ± 0,003 verwendet.
Warum ist das Timing wichtig?
- Wenn der Prozess zu früh beendet wird – die Anfrage konnte nicht gesendet werden
- Wenn er zu spät beendet wird – polkit hat die Authentifizierung bereits überprüft und lehnt ab
- Man muss in das „goldene Fenster“ treffen, in dem polkit die Anfrage bereits erhalten, aber die Authentifizierung noch nicht überprüft hat
Wie funktioniert der Exploit?
- Es wird eine D-Bus-Anfrage zum Erstellen eines Benutzers mit dem Parameter int32:1 (Aufnahme in die Gruppe wheel) gesendet
- Die Anfrage wird in der Mitte abgebrochen (Race Condition)
- Polkit schafft es nicht, die Authentifizierungsprüfung abzuschließen
- D-Bus kann den Absender nicht finden
- Polkit behandelt den Fehler falsch und weist UID = 0 (root) zu
- Der Benutzer wird ohne Authentifizierung erstellt
- Es wird eine Anfrage zum Festlegen eines Passworts für den neuen Benutzer gesendet (mit demselben Timing)
Erfolgsstatistik
- Der Benutzer kann mit 1–2 Versuchen erstellt werden
- Für die Passwortvergabe sind mehr Versuche erforderlich
- 100 Iterationen bieten eine hohe Erfolgswahrscheinlichkeit
Falls der Exploit nicht funktioniert, versuchen Sie Folgendes:
- Erweitern Sie den TIMING_RANGE im Code
- Führen Sie das Skript mehrmals aus
- Stellen Sie sicher, dass Sie sich in einer SSH-Sitzung befinden (nicht in einer grafischen)