
PoC in Python che riproduce la vulnerabilità della stampante locale di CUPS 2.4.16: cattura il token di autenticazione Local tramite un endpoint IPP malevolo, crea una stampante file:// e sfrutta una race condition su un job per scrivere file di proprietà di root.
Solo per test autorizzati / uso di ricerca. Esegui questo PoC solo contro sistemi di tua proprietà o per i quali sei esplicitamente autorizzato a eseguire test.
Questo repository contiene una riproduzione orientata al CUPS di sistema della vulnerabilità della stampante locale in CUPS 2.4.16.
L'implementazione è stata sviluppata a partire dalla riproduzione pubblicata della vulnerabilità CUPS e adattata per funzionare contro un'installazione CUPS di sistema già in esecuzione, invece di richiedere una build CUPS installata separatamente e un harness di riproduzione eseguito come root.
La riproduzione segue questa catena generale:
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
L'exploit dipende da una race condition, quindi l'esecuzione riuscita non è garantita a ogni tentativo.
La riproduzione pubblicata è progettata come un harness di vulnerabilità controllato. In particolare, presuppone un'installazione CUPS dedicata ed esegue operazioni di setup/reset appropriate per un ambiente di riproduzione ma non rappresentative di un'installazione di distribuzione già in esecuzione.
Questa implementazione invece:
ipptool installato.cups-create-local-printer.test di sistema quando disponibile.Local di CUPS.file://.Testato nel laboratorio dell'autore con:
ipptoolLa definizione di test è attesa in:
/usr/share/cups/ipptool/cups-create-local-printer.test
Verifica la tua installazione con:
cupsd -v
which ipptool
find /usr/share/cups -name 'cups-create-local-printer.test' 2>/dev/null
Configura l'identità dell'attaccante e il percorso di destinazione tramite variabili d'ambiente:
export CUPS_ATTACKER="$USER"
export CUPS_TARGET="/tmp/cups-poc-target"
python3 exploit.py
Per una riproduzione controllata di privilege escalation, scegli un target appropriato per il tuo ambiente di test isolato.
Lo script utilizza inoltre come default un target in stile sudoers sotto /etc/sudoers.d/, quindi non eseguirlo con leggerezza su un sistema di produzione.
Il PoC avvia un listener IPP e induce CUPS ad autenticarsi contro di esso. Il listener inizialmente restituisce una challenge 401 con:
WWW-Authenticate: Local trc="y"
La richiesta successiva contiene:
Authorization: Local <token>
Il token viene poi riutilizzato contro l'endpoint di amministrazione CUPS locale.
La riproduzione utilizza:
CUPS-Create-Local-Printer
con un device URI file://.
Il ciclo candidato esegue ripetutamente le operazioni sulla stampante, incluse:
CUPS-Add-Modify-Printer
CUPS-Accept-Jobs
Resume-Printer
Print-Job
La race viene ripetuta intenzionalmente perché un singolo tentativo potrebbe non riuscire.
Questo repository è un adattamento, non l'implementazione upstream canonica.
La logica di costruzione delle richieste e la sequenza di exploitation si basano sulla riproduzione pubblicata. Le modifiche principali riguardano l'esecuzione contro un'installazione CUPS di sistema esistente e la rimozione delle assunzioni di setup/reset dell'ambiente di riproduzione.
Consulta l' advisory di sicurezza e il repository upstream di OpenPrinting CUPS per le informazioni autorevoli sulla vulnerabilità e la riproduzione originale.
Non utilizzare questo strumento contro installazioni CUPS senza autorizzazione.
Per la validazione difensiva, gli indicatori utili includono richieste IPP inattese verso endpoint controllati dall'attaccante, scambi di autenticazione Local insoliti, creazione di stampanti locali inattese e attività sospette su stampanti/job.