Internet Printing Protocol
Reading time: 6 minutes
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Il Internet Printing Protocol (IPP), come specificato in RFC 2910 e RFC 2911, è lo standard de facto per la stampa in rete. Si basa su HTTP/1.1 (sia in chiaro che in TLS) e espone una ricca API per creare lavori di stampa, interrogare le capacità delle stampanti e gestire le code. Estensioni moderne come IPP Everywhere consentono persino la stampa senza driver da ambienti mobili e cloud, mentre lo stesso formato di pacchetto è stato riutilizzato per le stampanti 3-D.
Sfortunatamente, esporre la porta 631/tcp (e 631/udp per la scoperta delle stampanti) porta spesso a gravi problemi di sicurezza – sia su stampanti da ufficio tradizionali che su qualsiasi host Linux/Unix che esegue CUPS.
Quick PoC – crafting raw IPP with Python
import struct, requests
# Minimal IPP Get-Printer-Attributes request (operation-id 0x000B)
ipp = struct.pack(
">IHHIHH", # version 2.0, operation-id, request-id
0x0200, # 2.0
0x000B, # Get-Printer-Attributes
0x00000001, # request-id
0x01, 0x47, # operation-attributes-tag, charset attr (skipped)
) + b"\x03" # end-of-attributes
r = requests.post("http://printer:631/ipp/print", headers={"Content-Type":"application/ipp"}, data=ipp)
print(r.status_code, r.content[:40])
Enumerazione e Ricerca
1. Nmap NSE
# run all CUPS/IPP scripts
nmap -sV -p631 --script=cups* <target>
# or only basic info
nmap -p631 --script=cups-info,cups-queue-info <target>
Lo script cups-info
estrae modello, stato e statistiche della coda, mentre cups-queue-info
enumera i lavori in attesa.
2. Utilità IPP da CUPS
ippfind
– scoperta multicast/UDP (funziona contro cups-browsed):
ippfind --timeout 3 --txt -v "@local and port=631" # elenca le stampanti
ipptool
– richieste arbitrarie definite in un file .test:
ipptool -tv ipp://<IP>/ipp/print get-printer-attributes.test
Il file get-printer-attributes.test incluso interroga la versione del firmware, i formati di documento supportati, ecc.
3. Dorks Shodan / Censys
shodan search 'product:"CUPS (IPP)" port:631'
Più di 70 000 host esponevano pubblicamente CUPS nell'aprile 2025.
Vulnerabilità recenti (2023-2025)
Anno | ID CVE | Componente interessato | Impatto |
---|---|---|---|
2025 | CVE-2023-50739 | Firmware Lexmark (parser IPP) | Heap-overflow → RCE su Wi-Fi/LAN |
2024 | CVE-2024-47076, 47175, 47176, 47177 | cups-browsed, libcupsfilters, libppd, cups-filters | Catena RCE completa non autenticata su qualsiasi desktop/server Linux con CUPS browsing abilitato |
2024 | CVE-2024-35235 | cupsd 2.4.8- | Trucco symlink → chmod 666 arbitrario → escalation dei privilegi |
2023 | CVE-2023-0856 (Canon) + Pwn2Own | Stack-overflow nell'attributo sides → esecuzione di codice remoto |
Catena RCE di cups-browsed (settembre 2024)
cups-browsed
ascolta su UDP/631 per le pubblicità delle stampanti.- Un attaccante invia un singolo pacchetto contraffatto che punta a un URL IPP malevolo (CVE-2024-47176).
libcupsfilters
recupera automaticamente il PPD remoto senza validazione (CVE-2024-47076 & 47175).- Un PPD creato ad arte sfrutta il filtro foomatic-rip per eseguire comandi shell arbitrari ogni volta che viene stampato qualcosa (CVE-2024-47177).
Il codice di prova di concetto è pubblico sul blog del ricercatore e gli exploit richiedono nessuna autenticazione; l'accesso alla rete su UDP/631 è sufficiente.
Mitigazioni temporanee
sudo systemctl stop cups-browsed
sudo systemctl disable cups-browsed
sudo ufw deny 631/udp # or equivalent firewall rule
Patches sono stati rilasciati dalle principali distribuzioni nell'ottobre 2024 – assicurati che cups-filters ≥ 2.0.0.
misconfigurazione del symlink Listen
di cupsd (CVE-2024-35235)
Posizionare un link simbolico nella direttiva Listen
di cupsd.conf causa a cupds (root) di chmod 666
un percorso scelto dall'attaccante, portando a file di sistema scrivibili e, su Ubuntu, all'esecuzione di codice tramite un PPD malevolo con FoomaticRIPCommandLine
.
Tecniche Offensive
- Lavoro di stampa raw non autenticato – molte stampanti accettano
POST /ipp/print
senza autenticazione. Un payload PostScript malevolo può invocare comandi shell (system("/bin/nc ...")
) su dispositivi di alta gamma. - Hijacking del lavoro –
Cancel-Job
seguito daSend-Document
consente a un attaccante di sostituire il documento di qualcun altro prima che venga stampato fisicamente. - Combinazione SNMP → IPP – la community predefinita
public
spesso rivela il nome della coda interna necessario nell'URL IPP.
Migliori Pratiche Difensive
- Applica prontamente le patch a CUPS e al firmware della stampante; iscriviti ai feed PSIRT del fornitore.
- Disabilita
cups-browsed
e UDP/631 a meno che la stampa zeroconf non sia necessaria. - Limita TCP/631 a sottoreti/VPN fidate e applica TLS (ipps://).
- Richiedi autenticazione Kerberos/Negotiate o tramite certificato invece della stampa anonima.
- Monitora i log:
/var/log/cups/error_log
conLogLevel debug2
mostrerà download di PPD non solidi o invocazioni di filtri sospette. - In reti ad alta sicurezza, sposta la stampa su un server di stampa isolato e rinforzato che proxy i lavori ai dispositivi solo tramite USB.
Riferimenti
- Akamai – “Vulnerabilità critica RCE Linux in CUPS — Cosa sappiamo e come prepararci”, aprile 2025.
- Debian Security Tracker – dettagli CVE-2024-35235.
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.