mirror of
				https://github.com/HackTricks-wiki/hacktricks.git
				synced 2025-10-10 18:36:50 +00:00 
			
		
		
		
	Translated ['src/network-services-pentesting/pentesting-631-internet-pri
This commit is contained in:
		
							parent
							
								
									b42390c445
								
							
						
					
					
						commit
						4481ee5a51
					
				@ -1,23 +1,103 @@
 | 
			
		||||
# Internet Printing Protocol
 | 
			
		||||
 | 
			
		||||
{{#include ../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
# Internet Printing Protocol \(IPP\)
 | 
			
		||||
**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.
 | 
			
		||||
 | 
			
		||||
**Internet Printing Protocol (IPP)**, **RFC2910** ve **RFC2911**'de belirtildiği gibi, internet üzerinden yazdırma için bir temel sağlar. Gelişmeler, **IPP Everywhere** gibi, mobil ve bulut yazdırmayı standartlaştırmayı amaçlayarak genişletilebilirliğini göstermektedir ve **3D yazdırma** için uzantıların tanıtımını içermektedir.
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
**HTTP** protokolünden yararlanan IPP, **basic/digest authentication** ve **SSL/TLS encryption** gibi yerleşik güvenlik uygulamalarından faydalanır. Bir yazdırma işi göndermek veya yazıcı durumunu sorgulamak gibi işlemler, **port 631/tcp** üzerinde çalışan IPP sunucusuna yönlendirilmiş **HTTP POST requests** aracılığıyla gerçekleştirilir.
 | 
			
		||||
 | 
			
		||||
IPP'nin iyi bilinen bir uygulaması, çeşitli Linux dağıtımları ve OS X üzerinde yaygın olan açık kaynaklı yazdırma sistemi **CUPS**'dır. Kullanışlı olmasına rağmen, IPP, LPD gibi, **PostScript** veya **PJL files** aracılığıyla kötü niyetli içerik iletmek için istismar edilebilir, bu da potansiyel bir güvenlik riski oluşturur.
 | 
			
		||||
---
 | 
			
		||||
## Quick PoC – crafting raw IPP with Python
 | 
			
		||||
```python
 | 
			
		||||
# Example of sending an IPP request using Python
 | 
			
		||||
import requests
 | 
			
		||||
import struct, requests
 | 
			
		||||
 | 
			
		||||
url = "http://printer.example.com:631/ipp/print"
 | 
			
		||||
headers = {"Content-Type": "application/ipp"}
 | 
			
		||||
data = b"..."  # IPP request data goes here
 | 
			
		||||
# 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
 | 
			
		||||
 | 
			
		||||
response = requests.post(url, headers=headers, data=data, verify=True)
 | 
			
		||||
print(response.status_code)
 | 
			
		||||
r = requests.post("http://printer:631/ipp/print", headers={"Content-Type":"application/ipp"}, data=ipp)
 | 
			
		||||
print(r.status_code, r.content[:40])
 | 
			
		||||
```
 | 
			
		||||
Eğer [**yazıcıları hacklemek hakkında daha fazla bilgi edinmek istiyorsanız bu sayfayı okuyun**](http://hacking-printers.net/wiki/index.php/Main_Page). 
 | 
			
		||||
---
 | 
			
		||||
## 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}}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user