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
16759fe1f9
commit
e0ffed7cb3
@ -1,23 +1,103 @@
|
||||
# Internet Printing Protocol
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
# Internet Printing Protocol \(IPP\)
|
||||
**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.
|
||||
|
||||
**Internet Printing Protocol (IPP)**, określony w **RFC2910** i **RFC2911**, stanowi podstawę dla drukowania przez internet. Jego zdolność do rozszerzania jest pokazana przez rozwój takich inicjatyw jak **IPP Everywhere**, które ma na celu standaryzację drukowania mobilnego i w chmurze, oraz wprowadzenie rozszerzeń dla **drukowania 3D**.
|
||||
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**.
|
||||
|
||||
Wykorzystując protokół **HTTP**, IPP korzysta z ustalonych praktyk bezpieczeństwa, w tym **podstawowej/autoryzacji digest** oraz **szyfrowania SSL/TLS**. Działania takie jak przesyłanie zlecenia drukowania lub zapytanie o status drukarki są realizowane za pomocą **żądań HTTP POST** kierowanych do serwera IPP, który działa na **porcie 631/tcp**.
|
||||
|
||||
Znana implementacja IPP to **CUPS**, system drukowania open-source, powszechnie stosowany w różnych dystrybucjach Linuksa i OS X. Mimo swojej użyteczności, IPP, podobnie jak LPD, może być wykorzystywane do przesyłania złośliwej zawartości za pomocą **plików PostScript** lub **PJL**, co podkreśla potencjalne ryzyko bezpieczeństwa.
|
||||
---
|
||||
## 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])
|
||||
```
|
||||
Jeśli chcesz dowiedzieć się więcej o [**hackingu drukarek, przeczytaj tę stronę**](http://hacking-printers.net/wiki/index.php/Main_Page).
|
||||
---
|
||||
## Enumeracja i Rekonesans
|
||||
|
||||
### 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>
|
||||
```
|
||||
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):
|
||||
```bash
|
||||
ippfind --timeout 3 --txt -v "@local and port=631" # lista drukarek
|
||||
```
|
||||
* `ipptool` – dowolne żądania zdefiniowane w pliku *.test*:
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
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)
|
||||
1. `cups-browsed` nasłuchuje na **UDP/631** na ogłoszenia drukarek.
|
||||
2. Atakujący wysyła pojedynczy sfałszowany pakiet wskazujący na złośliwy URL IPP (CVE-2024-47176).
|
||||
3. `libcupsfilters` automatycznie pobiera zdalny **PPD** bez walidacji (CVE-2024-47076 & 47175).
|
||||
4. 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ępnie `Send-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
|
||||
1. Szybko aktualizuj CUPS i oprogramowanie układowe drukarki; subskrybuj kanały PSIRT dostawcy.
|
||||
2. Wyłącz `cups-browsed` i UDP/631, chyba że drukowanie zeroconf jest wymagane.
|
||||
3. Ogranicz TCP/631 do zaufanych podsieci/VPN i wymuszaj **TLS (ipps://)**.
|
||||
4. Wymagaj autoryzacji **Kerberos/Negotiate** lub certyfikatu zamiast anonimowego drukowania.
|
||||
5. Monitoruj logi: `/var/log/cups/error_log` z `LogLevel debug2` pokaże niepewne pobierania PPD lub podejrzane wywołania filtrów.
|
||||
6. 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.
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user