mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/pentesting-631-internet-pri
This commit is contained in:
parent
2f886bc79e
commit
65071adbae
@ -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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user