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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
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
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
# 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):
ippfind --timeout 3 --txt -v "@local and port=631" # листа штампаче
ipptool
– произвољни захтеви дефинисани у .test фајлу:
ipptool -tv ipp://<IP>/ipp/print get-printer-attributes.test
Укључени get-printer-attributes.test фајл упитује верзију фирмвера, подржане формате докумената, итд.
3. Shodan / Censys дorks
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)
cups-browsed
sluša na UDP/631 za oglase štampača.- Napadač šalje jedan lažirani paket koji ukazuje na zloćudni IPP URL (CVE-2024-47176).
libcupsfilters
automatski preuzima udaljeni PPD bez validacije (CVE-2024-47076 & 47175).- 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ćenSend-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
- Hitno ažurirajte CUPS i firmware štampača; prijavite se na PSIRT feed-ove dobavljača.
- Onemogućite
cups-browsed
i UDP/631 osim ako je zeroconf štampanje neophodno. - Ograničite TCP/631 na pouzdane podmreže/VPN i primenite TLS (ipps://).
- Zahtevajte Kerberos/Negotiate ili autentifikaciju putem sertifikata umesto anonimnog štampanja.
- Pratite logove:
/var/log/cups/error_log
saLogLevel debug2
će prikazati nesolidne PPD preuzimanja ili sumnjive invokacije filtera. - 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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.