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

5.7 KiB
Raw Blame History

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

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)

  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 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}}