Internet Printing Protocol

Reading time: 5 minutes

tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks

Internet Printing Protocol (IPP), zgodnie z RFC 2910 i RFC 2911, jest de facto standardem dla drukowania w sieci. Działa na bazie HTTP/1.1 (w trybie czystego tekstu lub TLS) i udostępnia bogate API do tworzenia zadań drukowania, zapytywania o możliwości drukarek i zarządzania kolejkami. Nowoczesne rozszerzenia, takie jak IPP Everywhere, umożliwiają nawet drukowanie bez sterowników z mobilnych i chmurowych środowisk, podczas gdy ten sam format pakietu został ponownie wykorzystany dla drukarek 3-D.

Niestety, otwarcie portu 631/tcp (i 631/udp do odkrywania drukarek) często prowadzi do poważnych problemów z bezpieczeństwem – zarówno na tradycyjnych drukarkach biurowych, jak i na każdym hoście Linux/Unix uruchamiającym 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])

Enumeracja i Rekonesans

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>

Skrypt cups-info wyciąga model, stan i statystyki kolejki, podczas gdy cups-queue-info wylicza oczekujące zadania.

2. Narzędzia IPP z CUPS

  • ippfind – odkrywanie multicast/UDP (działa z cups-browsed):
bash
ippfind --timeout 3 --txt -v "@local and port=631"  # lista drukarek
  • ipptool – dowolne żądania zdefiniowane w pliku .test:
bash
ipptool -tv ipp://<IP>/ipp/print get-printer-attributes.test

Dołączony plik get-printer-attributes.test zapytuje o wersję oprogramowania, obsługiwane formaty dokumentów itp.

3. Dorki Shodan / Censys

bash
shodan search 'product:"CUPS (IPP)" port:631'

Więcej niż 70 000 hostów publicznie eksponowało CUPS w kwietniu 2025 roku.


Ostatnie luki (2023-2025)

RokCVE ID(s)Dotknięty komponentWpływ
2025CVE-2023-50739Oprogramowanie Lexmark (parser IPP)Heap-overflow → RCE przez Wi-Fi/LAN
2024CVE-2024-47076, 47175, 47176, 47177cups-browsed, libcupsfilters, libppd, cups-filtersPełny nieautoryzowany łańcuch RCE na dowolnym komputerze serwerowym/desktopie z włączonym przeglądaniem CUPS
2024CVE-2024-35235cupsd 2.4.8-Sztuczka z symlinkiem → dowolne chmod 666 → eskalacja uprawnień
2023CVE-2023-0856 (Canon) + Pwn2OwnStack-overflow w atrybucie sides → zdalne wykonanie kodu

łańcuch RCE cups-browsed (wrzesień 2024)

  1. cups-browsed nasłuchuje na UDP/631 na ogłoszenia drukarek.
  2. Atakujący wysyła pojedynczy sfałszowany pakiet wskazujący na złośliwy URL IPP (CVE-2024-47176).
  3. libcupsfilters automatycznie pobiera zdalny PPD bez walidacji (CVE-2024-47076 & 47175).
  4. Opracowany PPD nadużywa filtra foomatic-rip, aby wykonywać dowolne polecenia powłoki za każdym razem, gdy coś jest drukowane (CVE-2024-47177).

Kod dowodu koncepcji jest publiczny na blogu badacza, a exploity nie wymagają żadnej autoryzacji; dostęp do sieci na UDP/631 jest wystarczający.

Tymczasowe środki zaradcze

sudo systemctl stop cups-browsed
sudo systemctl disable cups-browsed
sudo ufw deny 631/udp  # or equivalent firewall rule

Patches zostały wydane przez główne dystrybucje w październiku 2024 – upewnij się, że cups-filters ≥ 2.0.0.

Umieszczenie linku symbolicznego w dyrektywie Listen pliku cupsd.conf powoduje, że cupds (root) wykonuje chmod 666 na wybranej przez atakującego ścieżce, co prowadzi do zapisywalnych plików systemowych i, na Ubuntu, do wykonania kodu za pomocą złośliwego PPD z FoomaticRIPCommandLine.


Techniki ofensywne

  • Nieautoryzowane zadanie drukowania w formacie raw – wiele drukarek akceptuje POST /ipp/print bez autoryzacji. Złośliwy ładunek PostScript może wywołać polecenia powłoki (system("/bin/nc ...")) na zaawansowanych urządzeniach.
  • Przechwytywanie zadańCancel-Job następnie Send-Document pozwala atakującemu na zastąpienie dokumentu innej osoby przed jego fizycznym wydrukowaniem.
  • Kombinacja SNMP → IPP – domyślna społeczność public często ujawnia wewnętrzną nazwę kolejki wymaganą w URL IPP.

Najlepsze praktyki defensywne

  1. Szybko aktualizuj CUPS i oprogramowanie układowe drukarki; subskrybuj kanały PSIRT dostawcy.
  2. Wyłącz cups-browsed i UDP/631, chyba że drukowanie zeroconf jest wymagane.
  3. Ogranicz TCP/631 do zaufanych podsieci/VPN i wymuszaj TLS (ipps://).
  4. Wymagaj autoryzacji Kerberos/Negotiate lub certyfikatu zamiast anonimowego drukowania.
  5. Monitoruj logi: /var/log/cups/error_log z LogLevel debug2 pokaże niepewne pobierania PPD lub podejrzane wywołania filtrów.
  6. W sieciach o wysokim poziomie bezpieczeństwa przenieś drukowanie na wzmocniony, izolowany serwer druku, który przekazuje zadania do urządzeń tylko przez USB.

Odniesienia

  • Akamai – “Krytyczna luka RCE w systemie Linux w CUPS — Co wiemy i jak się przygotować”, kwiecień 2025.
  • Debian Security Tracker – szczegóły CVE-2024-35235.

tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks