Internet Printing Protocol

Reading time: 6 minutes

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Το Internet Printing Protocol (IPP), όπως καθορίζεται στο RFC 2910 και RFC 2911, είναι το de-facto πρότυπο για την εκτύπωση μέσω δικτύου. Βρίσκεται πάνω από το HTTP/1.1 (είτε σε καθαρό κείμενο είτε σε TLS) και εκθέτει ένα πλούσιο API για τη δημιουργία εκτυπωτικών εργασιών, την αναζήτηση δυνατοτήτων εκτυπωτή και τη διαχείριση ουρών. Σύγχρονες επεκτάσεις όπως το IPP Everywhere επιτρέπουν ακόμη και την εκτύπωση χωρίς οδηγούς από κινητές και cloud περιβάλλοντα, ενώ η ίδια μορφή πακέτου έχει επαναχρησιμοποιηθεί για εκτυπωτές 3-D.

Δυστυχώς, η έκθεση της θύρας 631/tcp (και 631/udp για την ανακάλυψη εκτυπωτών) συχνά οδηγεί σε σοβαρά ζητήματα ασφάλειας – τόσο σε παραδοσιακούς εκτυπωτές γραφείου όσο και σε οποιονδήποτε Linux/Unix υπολογιστή που εκτελεί το 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])

Αριθμητική & Αναγνώριση

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 script εξάγει μοντέλο, κατάσταση και στατιστικά ουρών, ενώ το cups-queue-info απαριθμεί τις εκκρεμείς εργασίες.

2. IPP utilities από CUPS

  • ippfind – multicast/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 αρχείο ερωτά την έκδοση firmware, υποστηριζόμενες μορφές εγγράφων, κ.λπ.

3. Shodan / Censys dorks

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

Περισσότεροι από 70 000 υπολογιστές εκθέτουν δημόσια το CUPS τον Απρίλιο του 2025.


Πρόσφατες Ευπάθειες (2023-2025)

ΈτοςCVE ID(s)Επηρεαζόμενο συστατικόΕπιπτώσεις
2025CVE-2023-50739Firmware Lexmark (IPP parser)Heap-overflow → RCE μέσω Wi-Fi/LAN
2024CVE-2024-47076, 47175, 47176, 47177cups-browsed, libcupsfilters, libppd, cups-filtersΠλήρης αδιάκριτη αλυσίδα RCE σε οποιονδήποτε Linux υπολογιστή/διακομιστή με ενεργοποιημένο CUPS browsing
2024CVE-2024-35235cupsd 2.4.8-Symlink trick → αυθαίρετο chmod 666 → κλιμάκωση προνομίων
2023CVE-2023-0856 (Canon) + Pwn2OwnStack-overflow στο χαρακτηριστικό sides → απομακρυσμένη εκτέλεση κώδικα

Αλυσίδα RCE cups-browsed (Σεπτέμβριος 2024)

  1. cups-browsed ακούει σε UDP/631 για διαφημίσεις εκτυπωτών.
  2. Ένας επιτιθέμενος στέλνει ένα μόνο ψευδές πακέτο που δείχνει σε μια κακόβουλη διεύθυνση IPP (CVE-2024-47176).
  3. libcupsfilters αυτόματα ανακτά το απομακρυσμένο PPD χωρίς έλεγχο (CVE-2024-47076 & 47175).
  4. Ένα κακόβουλο PPD εκμεταλλεύεται το φίλτρο foomatic-rip για να εκτελεί αυθαίρετες εντολές shell κάθε φορά που εκτυπώνεται κάτι (CVE-2024-47177).

Ο κώδικας απόδειξης της έννοιας είναι δημόσιος στο blog του ερευνητή και οι εκμεταλλεύσεις απαιτούν καμία πιστοποίηση; η πρόσβαση στο δίκτυο στο UDP/631 είναι αρκετή.

Προσωρινές μετρήσεις

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

Patches were released by major distributions in October 2024 – ensure cups-filters ≥ 2.0.0.

Η τοποθέτηση ενός συμβολικού συνδέσμου στην οδηγία Listen του cupsd.conf προκαλεί το cupds (root) να chmod 666 μια διαδρομή που επιλέγει ο επιτιθέμενος, οδηγώντας σε αρχεία συστήματος που είναι εγγράψιμα και, στο Ubuntu, εκτέλεση κώδικα μέσω ενός κακόβουλου PPD με FoomaticRIPCommandLine.


Offensive Techniques

  • Unauthenticated raw print job – πολλοί εκτυπωτές δέχονται POST /ipp/print χωρίς αυθεντικοποίηση. Ένα κακόβουλο PostScript payload μπορεί να καλέσει εντολές shell (system("/bin/nc ...")) σε συσκευές υψηλής τεχνολογίας.
  • Job HijackingCancel-Job ακολουθούμενο από Send-Document επιτρέπει σε έναν επιτιθέμενο να αντικαταστήσει το έγγραφο κάποιου άλλου πριν εκτυπωθεί φυσικά.
  • SNMP → IPP combo – η προεπιλεγμένη κοινότητα public συχνά διαρρέει το εσωτερικό όνομα ουράς που απαιτείται στο URL IPP.

Defensive Best Practices

  1. Ενημερώστε άμεσα το CUPS και το firmware του εκτυπωτή; εγγραφείτε σε τροφοδοσίες PSIRT προμηθευτών.
  2. Απενεργοποιήστε το cups-browsed και το UDP/631 εκτός αν απαιτείται εκτύπωση zeroconf.
  3. Περιορίστε το TCP/631 σε αξιόπιστα υποδίκτυα/VPN και επιβάλετε TLS (ipps://).
  4. Απαιτήστε Kerberos/Negotiate ή αυθεντικοποίηση πιστοποιητικού αντί για ανώνυμη εκτύπωση.
  5. Παρακολουθήστε τα αρχεία καταγραφής: /var/log/cups/error_log με LogLevel debug2 θα δείξει μη έγκυρες λήψεις PPD ή ύποπτες κλήσεις φίλτρων.
  6. Σε δίκτυα υψηλής ασφάλειας, μεταφέρετε την εκτύπωση σε έναν σκληρυμένο, απομονωμένο εκτυπωτή που προξενεί εργασίες σε συσκευές μέσω USB μόνο.

References

  • Akamai – “Critical Linux RCE Vulnerability in CUPS — What We Know and How to Prepare”, April 2025.
  • Debian Security Tracker – CVE-2024-35235 details.

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks