
Python-PoC, das den Local-Printer-Fehler in CUPS 2.4.16 reproduziert: Erfasst das Local-Auth-Token über einen bösartigen IPP-Endpunkt, erstellt einen file://-Drucker und nutzt ein Wettrennen bei einem Auftrag, um root-eigene Dateien zu schreiben.
Nur für autorisierte Tests / Forschungszwecke. Führen Sie diesen PoC nur gegen Systeme aus, die Ihnen gehören oder für die Sie ausdrücklich zur Durchführung von Tests autorisiert sind.
Dieses Repository enthält eine system-CUPS-orientierte Reproduktion der Local-Printer-Schwachstelle in CUPS 2.4.16.
Die Implementierung wurde auf Basis der veröffentlichten CUPS-Schwachstellenreproduktion entwickelt und so angepasst, dass sie gegen eine bereits laufende System-CUPS-Installation arbeitet, anstatt einen separat installierten CUPS-Build und eine als Root ausgeführte Reproduktionsumgebung zu erfordern.
Die Reproduktion folgt dieser allgemeinen Kette:
CUPS 2.4.16
│
▼
Local authentication challenge
│
▼
Attacker-controlled IPP endpoint
│
▼
Authorization: Local <token>
│
▼
Authenticated CUPS administration
│
▼
CUPS-Create-Local-Printer
│
▼
file:// device URI
│
▼
Printer/job race
│
▼
Root-owned target file
Der Exploit ist rennabhängig (race-dependent), daher ist eine erfolgreiche Ausführung nicht bei jedem Versuch garantiert.
Die veröffentlichte Reproduktion ist als kontrollierte Schwachstellen-Testumgebung konzipiert. Insbesondere setzt sie eine dedizierte CUPS-Installation voraus und führt Setup-/Reset-Operationen durch, die für eine Reproduktionsumgebung angemessen sind, aber nicht repräsentativ für eine bereits laufende Distributionsinstallation sind.
Diese Implementierung hingegen:
ipptool-Binärdatei.cups-create-local-printer.test, sofern verfügbar.Local-Autorisierungstoken.file://-Primitiv.Getestet im Labor des Autors mit:
ipptoolDie Testdefinition wird erwartet unter:
/usr/share/cups/ipptool/cups-create-local-printer.test
Überprüfen Sie Ihre Installation mit:
cupsd -v
which ipptool
find /usr/share/cups -name 'cups-create-local-printer.test' 2>/dev/null
Konfigurieren Sie die Angreiferidentität und den Zielpfad über Umgebungsvariablen:
export CUPS_ATTACKER="$USER"
export CUPS_TARGET="/tmp/cups-poc-target"
python3 exploit.py
Für eine kontrollierte Privilegieneskalations-Reproduktion wählen Sie ein Ziel, das für Ihre isolierte Testumgebung geeignet ist.
Das Skript verwendet standardmäßig außerdem ein sudoers-artiges Ziel unter /etc/sudoers.d/, daher führen Sie es nicht beiläufig auf einem Produktionssystem aus.
Der PoC startet einen IPP-Listener und veranlasst CUPS, sich gegen diesen zu authentifizieren. Der Listener gibt zunächst eine 401-Challenge zurück mit:
WWW-Authenticate: Local trc="y"
Die nachfolgende Anfrage enthält:
Authorization: Local <token>
Das Token wird dann gegen den lokalen CUPS-Administrationsendpunkt wiederverwendet.
Die Reproduktion verwendet:
CUPS-Create-Local-Printer
mit einer file://-Geräte-URI.
Die Kandidatenschleife führt die Druckeroperationen wiederholt aus, einschließlich:
CUPS-Add-Modify-Printer
CUPS-Accept-Jobs
Resume-Printer
Print-Job
Die Race wird absichtlich wiederholt, da ein einzelner Versuch möglicherweise nicht gewinnt.
Dieses Repository ist eine Anpassung, nicht die kanonische Upstream-Implementierung.
Die Logik zum Aufbau der Anfragen und die Exploit-Sequenz basieren auf der veröffentlichten Reproduktion. Die wesentlichen Änderungen betreffen die Ausführung gegen eine bestehende System-CUPS-Installation sowie die Entfernung von Setup-/Reset-Annahmen der Reproduktionsumgebung.
Siehe die Upstream-OpenPrinting-CUPS-Sicherheitsempfehlung und das Repository für die maßgeblichen Schwachstelleninformationen und die ursprüngliche Reproduktion.
Verwenden Sie dies nicht gegen CUPS-Installationen ohne Autorisierung.
Für die defensive Validierung gehören zu den nützlichen Indikatoren unerwartete IPP-Anfragen an angreiferkontrollierte Endpunkte, ungewöhnliche Local-Authentifizierungsaustausche, die Erstellung unerwarteter lokaler Drucker und verdächtige Drucker-/Job-Aktivitäten.