Internet Printing Protocol

Reading time: 6 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Das Internet Printing Protocol (IPP), wie in RFC 2910 und RFC 2911 spezifiziert, ist der De-facto-Standard für das Netzwerkdruck. Es basiert auf HTTP/1.1 (entweder im Klartext oder TLS) und bietet eine umfangreiche API zum Erstellen von Druckaufträgen, Abfragen von Druckerfähigkeiten und Verwalten von Warteschlangen. Moderne Erweiterungen wie IPP Everywhere ermöglichen sogar druckerloses Drucken aus mobilen und Cloud-Umgebungen, während dasselbe Paketformat auch für 3-D-Drucker wiederverwendet wurde.

Leider führt das Offenlegen des Ports 631/tcp (und 631/udp für die Druckerentdeckung) oft zu ernsthaften Sicherheitsproblemen – sowohl bei traditionellen Bürodruckern als auch bei jedem Linux/Unix-Host, der CUPS ausführt.


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])

Enumeration & 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>

Das cups-info-Skript extrahiert Modell-, Status- und Warteschlangenstatistiken, während cups-queue-info ausstehende Aufträge auflistet.

2. IPP-Dienstprogramme von CUPS

  • ippfind – Multicast/UDP-Entdeckung (funktioniert gegen cups-browsed):
bash
ippfind --timeout 3 --txt -v "@local and port=631"  # list printers
  • ipptool – beliebige Anfragen, die in einer .test-Datei definiert sind:
bash
ipptool -tv ipp://<IP>/ipp/print get-printer-attributes.test

Die gebündelte get-printer-attributes.test-Datei fragt die Firmware-Version, unterstützte Dokumentformate usw. ab.

3. Shodan / Censys Dorks

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

Mehr als 70 000 Hosts haben im April 2025 CUPS öffentlich exponiert.


Aktuelle Schwachstellen (2023-2025)

JahrCVE-ID(s)Betroffenes ElementAuswirkung
2025CVE-2023-50739Lexmark-Firmware (IPP-Parser)Heap-Overflow → RCE über Wi-Fi/LAN
2024CVE-2024-47076, 47175, 47176, 47177cups-browsed, libcupsfilters, libppd, cups-filtersVollständige nicht authentifizierte RCE-Kette auf jedem Linux-Desktop/Server mit aktivierter CUPS-Browsing-Funktion
2024CVE-2024-35235cupsd 2.4.8-Symlink-Trick → beliebiges chmod 666 → Privilegieneskalation
2023CVE-2023-0856 (Canon) + Pwn2OwnStack-Overflow im sides-Attribut → Remote-Code-Ausführung

cups-browsed RCE-Kette (September 2024)

  1. cups-browsed hört auf UDP/631 nach Druckeranzeigen.
  2. Ein Angreifer sendet ein einzelnes gefälschtes Paket, das auf eine bösartige IPP-URL verweist (CVE-2024-47176).
  3. libcupsfilters ruft automatisch das entfernte PPD ohne Validierung ab (CVE-2024-47076 & 47175).
  4. Ein manipuliertes PPD missbraucht den foomatic-rip-Filter, um beliebige Shell-Befehle auszuführen, wann immer etwas gedruckt wird (CVE-2024-47177).

Proof-of-Concept-Code ist öffentlich im Blog des Forschers und die Exploits erfordern keine Authentifizierung; Netzwerkzugang zu UDP/631 ist ausreichend.

Temporäre Minderung

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

Patches wurden von großen Distributionen im Oktober 2024 veröffentlicht – stellen Sie sicher, dass cups-filters ≥ 2.0.0.

Das Platzieren eines symbolischen Links in der Listen-Direktive von cupsd.conf führt dazu, dass cupds (root) einen chmod 666 auf einen vom Angreifer gewählten Pfad ausführt, was zu beschreibbaren Systemdateien und, auf Ubuntu, zur Codeausführung über ein bösartiges PPD mit FoomaticRIPCommandLine führt.


Offensive Techniken

  • Unauthentifizierter Rohdruckauftrag – viele Drucker akzeptieren POST /ipp/print ohne Authentifizierung. Eine bösartige PostScript-Payload kann Shell-Befehle (system("/bin/nc ...")) auf High-End-Geräten ausführen.
  • AuftragsübernahmeCancel-Job gefolgt von Send-Document ermöglicht es einem Angreifer, das Dokument einer anderen Person zu ersetzen, bevor es physisch gedruckt wird.
  • SNMP → IPP-Kombination – die Standard-Community public leakt oft den internen Warteschafennamen, der in der IPP-URL erforderlich ist.

Verteidigung Best Practices

  1. Patchen Sie CUPS und die Drucker-Firmware umgehend; abonnieren Sie die PSIRT-Feeds des Anbieters.
  2. Deaktivieren Sie cups-browsed und UDP/631, es sei denn, zeroconf-Druck ist erforderlich.
  3. Beschränken Sie TCP/631 auf vertrauenswürdige Subnetze/VPN und erzwingen Sie TLS (ipps://).
  4. Fordern Sie Kerberos/Negotiate oder Zertifikatsauthentifizierung anstelle von anonymem Drucken.
  5. Überwachen Sie Protokolle: /var/log/cups/error_log mit LogLevel debug2 zeigt unsichere PPD-Downloads oder verdächtige Filteraufrufe an.
  6. In Hochsicherheitsnetzwerken sollte das Drucken auf einen gehärteten, isolierten Druckserver verlagert werden, der Aufträge nur über USB an Geräte weiterleitet.

Referenzen

  • Akamai – „Kritische Linux RCE-Sicherheitsanfälligkeit in CUPS – Was wir wissen und wie man sich vorbereitet“, April 2025.
  • Debian Security Tracker – CVE-2024-35235 Details.

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks