Internet Printing Protocol

Reading time: 5 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

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)

GodinaCVE ID(s)Pogođena komponentaUticaj
2025CVE-2023-50739Lexmark firmware (IPP parser)Heap-overflow → RCE preko Wi-Fi/LAN
2024CVE-2024-47076, 47175, 47176, 47177cups-browsed, libcupsfilters, libppd, cups-filtersPotpuna neautentifikovana RCE lanac na bilo kom Linux desktop/serveru sa omogućenim CUPS pretraživanjem
2024CVE-2024-35235cupsd 2.4.8-Symlink trik → proizvoljni chmod 666 → eskalacija privilegija
2023CVE-2023-0856 (Canon) + Pwn2OwnStack-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.

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 zadatkaCancel-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.

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks