From 65071adbae592cebed6dcd087ce448e60d7b920f Mon Sep 17 00:00:00 2001 From: Translator Date: Thu, 14 Aug 2025 06:34:33 +0000 Subject: [PATCH] Translated ['src/network-services-pentesting/pentesting-631-internet-pri --- ...ting-631-internet-printing-protocol-ipp.md | 106 +++++++++++++++--- 1 file changed, 93 insertions(+), 13 deletions(-) diff --git a/src/network-services-pentesting/pentesting-631-internet-printing-protocol-ipp.md b/src/network-services-pentesting/pentesting-631-internet-printing-protocol-ipp.md index c897d18bf..9f66a3797 100644 --- a/src/network-services-pentesting/pentesting-631-internet-printing-protocol-ipp.md +++ b/src/network-services-pentesting/pentesting-631-internet-printing-protocol-ipp.md @@ -1,23 +1,103 @@ +# Internet Printing Protocol + {{#include ../banners/hacktricks-training.md}} -# Internet Printing Protocol \(IPP\) +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. -Il **Internet Printing Protocol (IPP)**, come specificato in **RFC2910** e **RFC2911**, serve come base per la stampa su internet. La sua capacità di essere esteso è dimostrata da sviluppi come **IPP Everywhere**, che mira a standardizzare la stampa mobile e cloud, e l'introduzione di estensioni per la **stampa 3D**. +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**. -Sfruttando il protocollo **HTTP**, IPP beneficia di pratiche di sicurezza consolidate, tra cui **autenticazione base/digest** e **crittografia SSL/TLS**. Azioni come l'invio di un lavoro di stampa o la richiesta dello stato della stampante vengono eseguite tramite **richieste HTTP POST** dirette al server IPP, che opera sulla **porta 631/tcp**. - -Una implementazione ben nota di IPP è **CUPS**, un sistema di stampa open-source prevalente in varie distribuzioni Linux e OS X. Nonostante la sua utilità, IPP, simile a LPD, può essere sfruttato per trasmettere contenuti dannosi tramite **file PostScript** o **PJL**, evidenziando un potenziale rischio per la sicurezza. +--- +## Quick PoC – crafting raw IPP with Python ```python -# Example of sending an IPP request using Python -import requests +import struct, requests -url = "http://printer.example.com:631/ipp/print" -headers = {"Content-Type": "application/ipp"} -data = b"..." # IPP request data goes here +# 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 -response = requests.post(url, headers=headers, data=data, verify=True) -print(response.status_code) +r = requests.post("http://printer:631/ipp/print", headers={"Content-Type":"application/ipp"}, data=ipp) +print(r.status_code, r.content[:40]) ``` -Se vuoi saperne di più su [**hacking delle stampanti leggi questa pagina**](http://hacking-printers.net/wiki/index.php/Main_Page). +--- +## Enumerazione e Ricerca +### 1. Nmap NSE +```bash +# run all CUPS/IPP scripts +nmap -sV -p631 --script=cups* +# or only basic info +nmap -p631 --script=cups-info,cups-queue-info +``` +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:///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) + +| 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) +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**. + +### 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 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. {{#include ../banners/hacktricks-training.md}}