hacktricks/src/network-services-pentesting/pentesting-631-internet-printing-protocol-ipp.md

104 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Internet Printing Protocol
{{#include ../banners/hacktricks-training.md}}
**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ıl | CVE ID'leri | Etkilenen bileşen | Etki |
|------|-----------|--------------------|--------|
| 2025 | CVE-2023-50739 | Lexmark firmware (IPP parser) | Heap-overflow → RCE üzerinden Wi-Fi/LAN |
| 2024 | CVE-2024-47076, 47175, 47176, 47177 | cups-browsed, libcupsfilters, libppd, cups-filters | CUPS taraması etkin olan herhangi bir Linux masaüstü/sunucusunda tam kimlik doğrulamasız RCE zinciri |
| 2024 | CVE-2024-35235 | cupsd 2.4.8- | Symlink hilesi → keyfi **chmod 666** → ayrıcalık yükseltme |
| 2023 | CVE-2023-0856 (Canon) + Pwn2Own | `sides` 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 symlink `Listen` yanlış yapılandırması (CVE-2024-35235)
*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çirme** `Cancel-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ı.
{{#include ../banners/hacktricks-training.md}}