Translated ['src/network-services-pentesting/pentesting-631-internet-pri

This commit is contained in:
Translator 2025-08-14 06:34:33 +00:00
parent 2f886bc79e
commit 65071adbae

View File

@ -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* <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)
| 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}}