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
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
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
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
# 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):
ippfind --timeout 3 --txt -v "@local and port=631" # lista drukarek
ipptool
– dowolne żądania zdefiniowane w pliku .test:
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
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)
Rok | CVE ID(s) | Dotknięty komponent | Wpływ |
---|---|---|---|
2025 | CVE-2023-50739 | Oprogramowanie Lexmark (parser IPP) | Heap-overflow → RCE przez Wi-Fi/LAN |
2024 | CVE-2024-47076, 47175, 47176, 47177 | cups-browsed, libcupsfilters, libppd, cups-filters | Pełny nieautoryzowany łańcuch RCE na dowolnym komputerze serwerowym/desktopie z włączonym przeglądaniem CUPS |
2024 | CVE-2024-35235 | cupsd 2.4.8- | Sztuczka z symlinkiem → dowolne chmod 666 → eskalacja uprawnień |
2023 | CVE-2023-0856 (Canon) + Pwn2Own | Stack-overflow w atrybucie sides → zdalne wykonanie kodu |
łańcuch RCE cups-browsed (wrzesień 2024)
cups-browsed
nasłuchuje na UDP/631 na ogłoszenia drukarek.- Atakujący wysyła pojedynczy sfałszowany pakiet wskazujący na złośliwy URL IPP (CVE-2024-47176).
libcupsfilters
automatycznie pobiera zdalny PPD bez walidacji (CVE-2024-47076 & 47175).- 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.
błąd konfiguracji symlink Listen
w cupsd (CVE-2024-35235)
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ępnieSend-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
- Szybko aktualizuj CUPS i oprogramowanie układowe drukarki; subskrybuj kanały PSIRT dostawcy.
- Wyłącz
cups-browsed
i UDP/631, chyba że drukowanie zeroconf jest wymagane. - Ogranicz TCP/631 do zaufanych podsieci/VPN i wymuszaj TLS (ipps://).
- Wymagaj autoryzacji Kerberos/Negotiate lub certyfikatu zamiast anonimowego drukowania.
- Monitoruj logi:
/var/log/cups/error_log
zLogLevel debug2
pokaże niepewne pobierania PPD lub podejrzane wywołania filtrów. - 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
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.