hacktricks/src/network-services-pentesting/pentesting-631-internet-printing-protocol-ipp.md

104 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Internet Printing Protocol
{{#include ../banners/hacktricks-training.md}}
**Internet Printing Protocol (IPP)**, kako je navedeno u **RFC 2910** i **RFC 2911**, je de-facto standard za mrežno štampanje. Osnovan je na **HTTP/1.1** (bilo u čistom tekstu ili TLS) i nudi bogat API za kreiranje štampanja, upit mogućnosti štampača i upravljanje redovima. Moderne ekstenzije kao što su **IPP Everywhere** čak omogućavaju štampanje bez drajvera iz mobilnih i cloud okruženja, dok je isti format paketa ponovo korišćen za 3-D štampače.
Nažalost, izlaganje porta **631/tcp (i 631/udp za otkrivanje štampača)** često dovodi do ozbiljnih bezbednosnih problema kako na tradicionalnim kancelarijskim štampačima, tako i na bilo kojem Linux/Unix hostu koji pokreće **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])
```
---
## Enumeracija & Recon
### 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>
```
`cups-info` скрипта извлачи модел, стање и статистику реда, док `cups-queue-info` набраја чекајуће задатке.
### 2. IPP алати из CUPS
* `ippfind` мултикаст/UDP откривање (ради против cups-browsed):
```bash
ippfind --timeout 3 --txt -v "@local and port=631" # листа штампаче
```
* `ipptool` произвољни захтеви дефинисани у *.test* фајлу:
```bash
ipptool -tv ipp://<IP>/ipp/print get-printer-attributes.test
```
Укључени *get-printer-attributes.test* фајл упитује верзију фирмвера, подржане формате докумената, итд.
### 3. Shodan / Censys дorks
```bash
shodan search 'product:"CUPS (IPP)" port:631'
```
Više od **70 000** hostova je javno izlagalo CUPS u aprilu 2025.
---
## Nedavne ranjivosti (2023-2025)
| Godina | CVE ID(s) | Pogođena komponenta | Uticaj |
|--------|-----------|---------------------|--------|
| 2025 | CVE-2023-50739 | Lexmark firmware (IPP parser) | Heap-overflow → RCE preko Wi-Fi/LAN |
| 2024 | CVE-2024-47076, 47175, 47176, 47177 | cups-browsed, libcupsfilters, libppd, cups-filters | Potpuna neautentifikovana RCE lanac na bilo kom Linux desktop/serveru sa omogućenim CUPS pretraživanjem |
| 2024 | CVE-2024-35235 | cupsd 2.4.8- | Symlink trik → proizvoljni **chmod 666** → eskalacija privilegija |
| 2023 | CVE-2023-0856 (Canon) + Pwn2Own | Stack-overflow u `sides` atributu → daljinsko izvršavanje koda |
### cups-browsed RCE lanac (septembar 2024)
1. `cups-browsed` sluša na **UDP/631** za oglase štampača.
2. Napadač šalje jedan lažirani paket koji ukazuje na zloćudni IPP URL (CVE-2024-47176).
3. `libcupsfilters` automatski preuzima udaljeni **PPD** bez validacije (CVE-2024-47076 & 47175).
4. Prilagođeni PPD zloupotrebljava **foomatic-rip** filter da izvrši proizvoljne shell komande svaki put kada se nešto štampa (CVE-2024-47177).
Kod za dokazivanje koncepta je javan na blogu istraživača i eksploati zahtevaju **nema autentifikacije**; mrežni pristup UDP/631 je dovoljan.
#### Privremene mitigacije
```
sudo systemctl stop cups-browsed
sudo systemctl disable cups-browsed
sudo ufw deny 631/udp # or equivalent firewall rule
```
Patches su objavljeni od strane glavnih distribucija u oktobru 2024 osigurajte **cups-filters ≥ 2.0.0**.
### cupsd symlink `Listen` pogrešna konfiguracija (CVE-2024-35235)
Postavljanje simboličke veze u *cupsd.conf* direktivi `Listen` uzrokuje da **cupds (root)** `chmod 666` putanju koju bira napadač, što dovodi do zapisivih sistemskih datoteka i, na Ubuntu-u, izvršavanja koda putem zlonamernog PPD-a sa `FoomaticRIPCommandLine`.
---
## Ofanzivne Tehnike
* **Neautentifikovani sirovi print zadatak** mnogi štampači prihvataju `POST /ipp/print` bez autentifikacije. Zlonameran **PostScript** payload može pozvati shell komande (`system("/bin/nc ...")`) na visokokvalitetnim uređajima.
* **Otimačina zadatka** `Cancel-Job` praćen `Send-Document` omogućava napadaču da zameni dokument nekog drugog pre nego što bude fizički odštampan.
* **SNMP → IPP kombinacija** podrazumevana zajednica `public` često otkriva interno ime reda koje je potrebno u IPP URL-u.
---
## Defensivne Najbolje Prakse
1. Hitno ažurirajte CUPS i firmware štampača; prijavite se na PSIRT feed-ove dobavljača.
2. Onemogućite `cups-browsed` i UDP/631 osim ako je zeroconf štampanje neophodno.
3. Ograničite TCP/631 na pouzdane podmreže/VPN i primenite **TLS (ipps://)**.
4. Zahtevajte **Kerberos/Negotiate** ili autentifikaciju putem sertifikata umesto anonimnog štampanja.
5. Pratite logove: `/var/log/cups/error_log` sa `LogLevel debug2` će prikazati nesolidne PPD preuzimanja ili sumnjive invokacije filtera.
6. U mrežama visoke sigurnosti, prebacite štampanje na ojačan, izolovan print server koji posreduje zadatke uređajima isključivo putem USB-a.
## Reference
- Akamai “Kritična Linux RCE ranjivost u CUPS-u — Šta znamo i kako se pripremiti”, april 2025.
- Debian Security Tracker detalji o CVE-2024-35235.
{{#include ../banners/hacktricks-training.md}}