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
270628092b
commit
6ac0b174ca
@ -1,23 +1,103 @@
|
|||||||
|
# Internet Printing Protocol
|
||||||
|
|
||||||
{{#include ../banners/hacktricks-training.md}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
# Internet Printing Protocol \(IPP\)
|
Das **Internet Printing Protocol (IPP)**, wie in **RFC 2910** und **RFC 2911** spezifiziert, ist der De-facto-Standard für das Netzwerkdruck. Es basiert auf **HTTP/1.1** (entweder im Klartext oder TLS) und bietet eine umfangreiche API zum Erstellen von Druckaufträgen, Abfragen von Druckerfähigkeiten und Verwalten von Warteschlangen. Moderne Erweiterungen wie **IPP Everywhere** ermöglichen sogar druckerloses Drucken aus mobilen und Cloud-Umgebungen, während dasselbe Paketformat auch für 3-D-Drucker wiederverwendet wurde.
|
||||||
|
|
||||||
Das **Internet Printing Protocol (IPP)**, wie in **RFC2910** und **RFC2911** spezifiziert, dient als Grundlage für das Drucken über das Internet. Seine Erweiterungsfähigkeit wird durch Entwicklungen wie **IPP Everywhere** demonstriert, das darauf abzielt, mobiles und Cloud-Drucken zu standardisieren, sowie durch die Einführung von Erweiterungen für **3D-Druck**.
|
Leider führt das Offenlegen des Ports **631/tcp (und 631/udp für die Druckerentdeckung)** oft zu ernsthaften Sicherheitsproblemen – sowohl bei traditionellen Bürodruckern als auch bei jedem Linux/Unix-Host, der **CUPS** ausführt.
|
||||||
|
|
||||||
Durch die Nutzung des **HTTP**-Protokolls profitiert IPP von etablierten Sicherheitspraktiken, einschließlich **Basic/Digest-Authentifizierung** und **SSL/TLS-Verschlüsselung**. Aktionen wie das Einreichen eines Druckauftrags oder das Abfragen des Druckerstatus werden durch **HTTP POST-Anfragen** an den IPP-Server durchgeführt, der auf **Port 631/tcp** arbeitet.
|
---
|
||||||
|
## Quick PoC – crafting raw IPP with Python
|
||||||
Eine bekannte Implementierung von IPP ist **CUPS**, ein Open-Source-Drucksystem, das in verschiedenen Linux-Distributionen und OS X verbreitet ist. Trotz seiner Nützlichkeit kann IPP, ähnlich wie LPD, ausgenutzt werden, um schädliche Inhalte über **PostScript** oder **PJL-Dateien** zu übertragen, was ein potenzielles Sicherheitsrisiko darstellt.
|
|
||||||
```python
|
```python
|
||||||
# Example of sending an IPP request using Python
|
import struct, requests
|
||||||
import requests
|
|
||||||
|
|
||||||
url = "http://printer.example.com:631/ipp/print"
|
# Minimal IPP Get-Printer-Attributes request (operation-id 0x000B)
|
||||||
headers = {"Content-Type": "application/ipp"}
|
ipp = struct.pack(
|
||||||
data = b"..." # IPP request data goes here
|
">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)
|
r = requests.post("http://printer:631/ipp/print", headers={"Content-Type":"application/ipp"}, data=ipp)
|
||||||
print(response.status_code)
|
print(r.status_code, r.content[:40])
|
||||||
```
|
```
|
||||||
Wenn Sie mehr über [**Hacking von Druckern erfahren möchten, lesen Sie diese Seite**](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>
|
||||||
|
```
|
||||||
|
Das `cups-info`-Skript extrahiert Modell-, Status- und Warteschlangenstatistiken, während `cups-queue-info` ausstehende Aufträge auflistet.
|
||||||
|
|
||||||
|
### 2. IPP-Dienstprogramme von CUPS
|
||||||
|
* `ippfind` – Multicast/UDP-Entdeckung (funktioniert gegen cups-browsed):
|
||||||
|
```bash
|
||||||
|
ippfind --timeout 3 --txt -v "@local and port=631" # list printers
|
||||||
|
```
|
||||||
|
* `ipptool` – beliebige Anfragen, die in einer *.test*-Datei definiert sind:
|
||||||
|
```bash
|
||||||
|
ipptool -tv ipp://<IP>/ipp/print get-printer-attributes.test
|
||||||
|
```
|
||||||
|
Die gebündelte *get-printer-attributes.test*-Datei fragt die Firmware-Version, unterstützte Dokumentformate usw. ab.
|
||||||
|
|
||||||
|
### 3. Shodan / Censys Dorks
|
||||||
|
```bash
|
||||||
|
shodan search 'product:"CUPS (IPP)" port:631'
|
||||||
|
```
|
||||||
|
Mehr als **70 000** Hosts haben im April 2025 CUPS öffentlich exponiert.
|
||||||
|
|
||||||
|
---
|
||||||
|
## Aktuelle Schwachstellen (2023-2025)
|
||||||
|
|
||||||
|
| Jahr | CVE-ID(s) | Betroffenes Element | Auswirkung |
|
||||||
|
|------|-----------|---------------------|------------|
|
||||||
|
| 2025 | CVE-2023-50739 | Lexmark-Firmware (IPP-Parser) | Heap-Overflow → RCE über Wi-Fi/LAN |
|
||||||
|
| 2024 | CVE-2024-47076, 47175, 47176, 47177 | cups-browsed, libcupsfilters, libppd, cups-filters | Vollständige nicht authentifizierte RCE-Kette auf jedem Linux-Desktop/Server mit aktivierter CUPS-Browsing-Funktion |
|
||||||
|
| 2024 | CVE-2024-35235 | cupsd 2.4.8- | Symlink-Trick → beliebiges **chmod 666** → Privilegieneskalation |
|
||||||
|
| 2023 | CVE-2023-0856 (Canon) + Pwn2Own | Stack-Overflow im `sides`-Attribut → Remote-Code-Ausführung |
|
||||||
|
|
||||||
|
### cups-browsed RCE-Kette (September 2024)
|
||||||
|
1. `cups-browsed` hört auf **UDP/631** nach Druckeranzeigen.
|
||||||
|
2. Ein Angreifer sendet ein einzelnes gefälschtes Paket, das auf eine bösartige IPP-URL verweist (CVE-2024-47176).
|
||||||
|
3. `libcupsfilters` ruft automatisch das entfernte **PPD** ohne Validierung ab (CVE-2024-47076 & 47175).
|
||||||
|
4. Ein manipuliertes PPD missbraucht den **foomatic-rip**-Filter, um beliebige Shell-Befehle auszuführen, wann immer etwas gedruckt wird (CVE-2024-47177).
|
||||||
|
|
||||||
|
Proof-of-Concept-Code ist öffentlich im Blog des Forschers und die Exploits erfordern **keine Authentifizierung**; Netzwerkzugang zu UDP/631 ist ausreichend.
|
||||||
|
|
||||||
|
#### Temporäre Minderung
|
||||||
|
```
|
||||||
|
sudo systemctl stop cups-browsed
|
||||||
|
sudo systemctl disable cups-browsed
|
||||||
|
sudo ufw deny 631/udp # or equivalent firewall rule
|
||||||
|
```
|
||||||
|
Patches wurden von großen Distributionen im Oktober 2024 veröffentlicht – stellen Sie sicher, dass **cups-filters ≥ 2.0.0**.
|
||||||
|
|
||||||
|
### cupsd Symlink `Listen` Fehlkonfiguration (CVE-2024-35235)
|
||||||
|
Das Platzieren eines symbolischen Links in der `Listen`-Direktive von *cupsd.conf* führt dazu, dass **cupds (root)** einen `chmod 666` auf einen vom Angreifer gewählten Pfad ausführt, was zu beschreibbaren Systemdateien und, auf Ubuntu, zur Codeausführung über ein bösartiges PPD mit `FoomaticRIPCommandLine` führt.
|
||||||
|
|
||||||
|
---
|
||||||
|
## Offensive Techniken
|
||||||
|
|
||||||
|
* **Unauthentifizierter Rohdruckauftrag** – viele Drucker akzeptieren `POST /ipp/print` ohne Authentifizierung. Eine bösartige **PostScript**-Payload kann Shell-Befehle (`system("/bin/nc ...")`) auf High-End-Geräten ausführen.
|
||||||
|
* **Auftragsübernahme** – `Cancel-Job` gefolgt von `Send-Document` ermöglicht es einem Angreifer, das Dokument einer anderen Person zu ersetzen, bevor es physisch gedruckt wird.
|
||||||
|
* **SNMP → IPP-Kombination** – die Standard-Community `public` leakt oft den internen Warteschafennamen, der in der IPP-URL erforderlich ist.
|
||||||
|
|
||||||
|
---
|
||||||
|
## Verteidigung Best Practices
|
||||||
|
1. Patchen Sie CUPS und die Drucker-Firmware umgehend; abonnieren Sie die PSIRT-Feeds des Anbieters.
|
||||||
|
2. Deaktivieren Sie `cups-browsed` und UDP/631, es sei denn, zeroconf-Druck ist erforderlich.
|
||||||
|
3. Beschränken Sie TCP/631 auf vertrauenswürdige Subnetze/VPN und erzwingen Sie **TLS (ipps://)**.
|
||||||
|
4. Fordern Sie **Kerberos/Negotiate** oder Zertifikatsauthentifizierung anstelle von anonymem Drucken.
|
||||||
|
5. Überwachen Sie Protokolle: `/var/log/cups/error_log` mit `LogLevel debug2` zeigt unsichere PPD-Downloads oder verdächtige Filteraufrufe an.
|
||||||
|
6. In Hochsicherheitsnetzwerken sollte das Drucken auf einen gehärteten, isolierten Druckserver verlagert werden, der Aufträge nur über USB an Geräte weiterleitet.
|
||||||
|
|
||||||
|
## Referenzen
|
||||||
|
- Akamai – „Kritische Linux RCE-Sicherheitsanfälligkeit in CUPS – Was wir wissen und wie man sich vorbereitet“, April 2025.
|
||||||
|
- Debian Security Tracker – CVE-2024-35235 Details.
|
||||||
{{#include ../banners/hacktricks-training.md}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user