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

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

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

bash
# 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):
bash
ippfind --timeout 3 --txt -v "@local and port=631"  # elenca le stampanti
  • ipptool – richieste arbitrarie definite in un file .test:
bash
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

bash
shodan search 'product:"CUPS (IPP)" port:631'

Più di 70 000 host esponevano pubblicamente CUPS nell'aprile 2025.


Vulnerabilità recenti (2023-2025)

AnnoID CVEComponente interessatoImpatto
2025CVE-2023-50739Firmware Lexmark (parser IPP)Heap-overflow → RCE su Wi-Fi/LAN
2024CVE-2024-47076, 47175, 47176, 47177cups-browsed, libcupsfilters, libppd, cups-filtersCatena RCE completa non autenticata su qualsiasi desktop/server Linux con CUPS browsing abilitato
2024CVE-2024-35235cupsd 2.4.8-Trucco symlink → chmod 666 arbitrario → escalation dei privilegi
2023CVE-2023-0856 (Canon) + Pwn2OwnStack-overflow nell'attributo sides → esecuzione di codice remoto

Catena RCE di cups-browsed (settembre 2024)

  1. cups-browsed ascolta su UDP/631 per le pubblicità delle stampanti.
  2. Un attaccante invia un singolo pacchetto contraffatto che punta a un URL IPP malevolo (CVE-2024-47176).
  3. libcupsfilters recupera automaticamente il PPD remoto senza validazione (CVE-2024-47076 & 47175).
  4. 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.

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 lavoroCancel-Job seguito da Send-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

  1. Applica prontamente le patch a CUPS e al firmware della stampante; iscriviti ai feed PSIRT del fornitore.
  2. Disabilita cups-browsed e UDP/631 a meno che la stampa zeroconf non sia necessaria.
  3. Limita TCP/631 a sottoreti/VPN fidate e applica TLS (ipps://).
  4. Richiedi autenticazione Kerberos/Negotiate o tramite certificato invece della stampa anonima.
  5. Monitora i log: /var/log/cups/error_log con LogLevel debug2 mostrerà download di PPD non solidi o invocazioni di filtri sospette.
  6. 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