Internet Printing Protocol

Reading time: 5 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Internet Printing Protocol (IPP), RFC 2910 ve RFC 2911'de belirtildiği gibi, ağ yazdırma için de-facto standarttır. HTTP/1.1 (şifreli veya TLS) üzerinde çalışır ve yazdırma işleri oluşturma, yazıcı yeteneklerini sorgulama ve kuyrukları yönetme için zengin bir API sunar. IPP Everywhere gibi modern uzantılar, sürücü gerektirmeyen yazdırmayı mobil ve bulut ortamlarından mümkün kılarken, aynı paket formatı 3-D yazıcılar için de yeniden kullanılmıştır.

Ne yazık ki, 631/tcp (ve yazıcı keşfi için 631/udp) portunu açmak genellikle ciddi güvenlik sorunlarına yol açar - hem geleneksel ofis yazıcılarında hem de CUPS çalıştıran herhangi bir Linux/Unix ana bilgisayarında.


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>

cups-info betiği model, durum ve kuyruk istatistiklerini çıkarırken cups-queue-info bekleyen işleri sıralar.

2. CUPS'tan IPP yardımcı programları

  • ippfind – çoklu yayın/UDP keşfi (cups-browsed'e karşı çalışır):
bash
ippfind --timeout 3 --txt -v "@local and port=631"  # yazıcıları listele
  • ipptool – bir .test dosyasında tanımlanan rastgele istekler:
bash
ipptool -tv ipp://<IP>/ipp/print get-printer-attributes.test

Paketlenmiş get-printer-attributes.test dosyası, yazılım sürümünü, desteklenen belge formatlarını vb. sorgular.

3. Shodan / Censys dorks

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

70 000'den fazla ana bilgisayar, Nisan 2025'te CUPS'ı kamuya açık bir şekilde sergiliyordu.


Son Güvenlik Açıkları (2023-2025)

YılCVE ID'leriEtkilenen bileşenEtki
2025CVE-2023-50739Lexmark firmware (IPP parser)Heap-overflow → RCE üzerinden Wi-Fi/LAN
2024CVE-2024-47076, 47175, 47176, 47177cups-browsed, libcupsfilters, libppd, cups-filtersCUPS taraması etkin olan herhangi bir Linux masaüstü/sunucusunda tam kimlik doğrulamasız RCE zinciri
2024CVE-2024-35235cupsd 2.4.8-Symlink hilesi → keyfi chmod 666 → ayrıcalık yükseltme
2023CVE-2023-0856 (Canon) + Pwn2Ownsides niteliğinde stack-overflow → uzaktan kod yürütme

cups-browsed RCE zinciri (Eylül 2024)

  1. cups-browsed, yazıcı reklamları için UDP/631 üzerinde dinler.
  2. Bir saldırgan, kötü niyetli bir IPP URL'sine işaret eden tek bir sahte paket gönderir (CVE-2024-47176).
  3. libcupsfilters, uzaktaki PPD'yi doğrulama olmadan otomatik olarak alır (CVE-2024-47076 & 47175).
  4. Özel olarak hazırlanmış bir PPD, herhangi bir şey yazdırıldığında keyfi shell komutlarını yürütmek için foomatic-rip filtresini kötüye kullanır (CVE-2024-47177).

Kanıt konsepti kodu araştırmacının blogunda kamuya açıktır ve istismarlar kimlik doğrulaması gerektirmez; UDP/631'e ağ erişimi yeterlidir.

Geçici hafifletmeler

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

Yamanlar, Ekim 2024'te büyük dağıtımlar tarafından yayınlandı - cups-filters ≥ 2.0.0 olduğundan emin olun.

cupsd.conf dosyasındaki Listen direktifine bir sembolik bağlantı yerleştirmek, cupds (root)'un bir saldırgan tarafından seçilen bir yolu chmod 666 yapmasına neden olur, bu da yazılabilir sistem dosyalarına yol açar ve Ubuntu'da, FoomaticRIPCommandLine ile kötü niyetli bir PPD aracılığıyla kod yürütülmesine neden olur.


Saldırgan Teknikler

  • Kimlik doğrulaması yapılmamış ham yazdırma işi – birçok yazıcı POST /ipp/print isteğini kimlik doğrulaması olmadan kabul eder. Kötü niyetli bir PostScript yükü, yüksek kaliteli cihazlarda shell komutlarını (system("/bin/nc ...")) çağırabilir.
  • İş Ele GeçirmeCancel-Job ardından Send-Document ile bir saldırgan, birinin belgesini fiziksel olarak yazdırılmadan önce değiştirebilir.
  • SNMP → IPP kombinasyonu – varsayılan topluluk public, IPP URL'sinde gerekli olan iç kuyruk adını sıklıkla sızdırır.

Savunma En İyi Uygulamaları

  1. CUPS ve yazıcı firmware'lerini zamanında yamalayın; satıcı PSIRT beslemelerine abone olun.
  2. Zeroconf yazdırma gerekmiyorsa cups-browsed ve UDP/631'i devre dışı bırakın.
  3. TCP/631'i güvenilir alt ağlara/VPN'ye kısıtlayın ve TLS (ipps://)'yi zorlayın.
  4. Anonim yazdırma yerine Kerberos/Negotiate veya sertifika kimlik doğrulaması gerektirin.
  5. Günlükleri izleyin: /var/log/cups/error_log ile LogLevel debug2, sağlam olmayan PPD indirmelerini veya şüpheli filtre çağrılarını gösterecektir.
  6. Yüksek güvenlikli ağlarda, yazdırmayı yalnızca USB aracılığıyla cihazlara iş gönderen, sertleştirilmiş, izole bir yazıcı sunucusuna taşıyın.

Referanslar

  • Akamai – “CUPS'ta Kritik Linux RCE Açığı — Bildiklerimiz ve Nasıl Hazırlanmalıyız”, Nisan 2025.
  • Debian Güvenlik Takipçisi – CVE-2024-35235 detayları.

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin