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

104 lines
5.7 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)**, kama ilivyoainishwa katika **RFC 2910** na **RFC 2911**, ni kiwango cha de-facto kwa uchapishaji wa mtandao. Inakaa juu ya **HTTP/1.1** (iwe ni maandiko wazi au TLS) na inatoa API tajiri kwa ajili ya kuunda kazi za uchapishaji, kuuliza uwezo wa printer na kusimamia foleni. Upanuzi wa kisasa kama **IPP Everywhere** hata unaruhusu uchapishaji bila madereva kutoka kwa mazingira ya simu na wingu, wakati muundo sawa wa pakiti umerejelewa kwa printers za 3-D.
Kwa bahati mbaya, kufichua bandari **631/tcp (na 631/udp kwa ajili ya kugundua printer)** mara nyingi husababisha matatizo makubwa ya usalama kwa printers za ofisi za jadi na kwenye mwenyeji yeyote wa Linux/Unix unaendesha **CUPS**.
---
## 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])
```
---
## Uhesabu & Upelelezi
### 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>
```
The `cups-info` script inatoa mfano, hali na takwimu za foleni wakati `cups-queue-info` inataja kazi zinazongoja.
### 2. IPP utilities kutoka CUPS
* `ippfind` ugunduzi wa multicast/UDP (inafanya kazi dhidi ya cups-browsed):
```bash
ippfind --timeout 3 --txt -v "@local and port=631" # orodhesha printers
```
* `ipptool` maombi ya kawaida yaliyofafanuliwa katika faili ya *.test*:
```bash
ipptool -tv ipp://<IP>/ipp/print get-printer-attributes.test
```
Faili iliyojumuishwa *get-printer-attributes.test* inachunguza toleo la firmware, fomati za hati zinazoungwa mkono, n.k.
### 3. Shodan / Censys dorks
```bash
shodan search 'product:"CUPS (IPP)" port:631'
```
Zaidi ya **70,000** wenyeji walikuwa wakionyesha hadharani CUPS mnamo Aprili 2025.
---
## Uthibitisho wa Hivi Karibuni (2023-2025)
| Mwaka | CVE ID(s) | Kipengele kilichoathirika | Athari |
|------|-----------|--------------------|--------|
| 2025 | CVE-2023-50739 | Lexmark firmware (IPP parser) | Heap-overflow → RCE kupitia Wi-Fi/LAN |
| 2024 | CVE-2024-47076, 47175, 47176, 47177 | cups-browsed, libcupsfilters, libppd, cups-filters | Mnyororo wa RCE usio na uthibitisho kamili kwenye desktop/server yoyote ya Linux iliyo na CUPS browsing imewezeshwa |
| 2024 | CVE-2024-35235 | cupsd 2.4.8- | Njia ya symlink → **chmod 666** isiyo na mipaka → kupandisha hadhi |
| 2023 | CVE-2023-0856 (Canon) + Pwn2Own | Stack-overflow katika sifa ya `sides` → utekelezaji wa msimbo wa mbali |
### Mnyororo wa RCE wa cups-browsed (Septemba 2024)
1. `cups-browsed` inasikiliza kwenye **UDP/631** kwa matangazo ya printer.
2. Mshambuliaji anatumia pakiti moja ya kudanganya ikielekeza kwenye URL ya IPP mbaya (CVE-2024-47176).
3. `libcupsfilters` inapata kiotomatiki **PPD** ya mbali bila uthibitisho (CVE-2024-47076 & 47175).
4. PPD iliyoundwa inatumia kichujio cha **foomatic-rip** kutekeleza amri za shell zisizo na mipaka kila wakati kitu kinapochapishwa (CVE-2024-47177).
Msimbo wa uthibitisho wa dhana upo hadharani kwenye blogu ya mtafiti na unahitaji **hakuna uthibitisho**; ufikiaji wa mtandao kwa UDP/631 unatosha.
#### Njia za muda za kupunguza
```
sudo systemctl stop cups-browsed
sudo systemctl disable cups-browsed
sudo ufw deny 631/udp # or equivalent firewall rule
```
Patches zilitolewa na usambazaji mkubwa mnamo Oktoba 2024 hakikisha **cups-filters ≥ 2.0.0**.
### cupsd symlink `Listen` misconfiguration (CVE-2024-35235)
Kuweka kiungo cha alama katika *cupsd.conf*s `Listen` directive kunasababisha **cupds (root)** kufanya `chmod 666` kwenye njia iliyochaguliwa na mshambuliaji, ikisababisha faili za mfumo zinazoweza kuandikwa na, kwenye Ubuntu, utekelezaji wa msimbo kupitia PPD mbaya na `FoomaticRIPCommandLine`.
---
## Mbinu za Kihalifu
* **Kazi ya uchapishaji isiyo na uthibitisho** printers nyingi zinakubali `POST /ipp/print` bila uthibitisho. Payload mbaya ya **PostScript** inaweza kuita amri za shell (`system("/bin/nc ...")`) kwenye vifaa vya hali ya juu.
* **Kuhijack Kazi** `Cancel-Job` ikifuatwa na `Send-Document` inaruhusu mshambuliaji kubadilisha hati ya mtu mwingine kabla ya kuchapishwa kimwili.
* **SNMP → IPP combo** jamii ya chaguo-msingi `public` mara nyingi inavuja jina la foleni ya ndani inayohitajika katika URL ya IPP.
---
## Mbinu Bora za Kijamii
1. Sasisha CUPS na firmware ya printer mara moja; jiandikishe kwa feeds za PSIRT za muuzaji.
2. Zima `cups-browsed` na UDP/631 isipokuwa uchapishaji wa zeroconf unahitajika.
3. Punguza TCP/631 kwa subnets/VPN zinazotegemewa na enforce **TLS (ipps://)**.
4. Hitaji **Kerberos/Negotiate** au uthibitisho wa cheti badala ya uchapishaji wa bila majina.
5. Fuata kumbukumbu: `/var/log/cups/error_log` na `LogLevel debug2` itaonyesha upakuaji wa PPD zisizo thabiti au mwito wa chujio wa kutatanisha.
6. Katika mitandao ya usalama wa juu, hamasisha uchapishaji kwenye seva ya uchapishaji iliyoharibiwa, iliyotengwa ambayo inapeleka kazi kwa vifaa kupitia USB pekee.
## Marejeleo
- Akamai “Uthibitisho wa RCE wa Linux wa Kihafidhina katika CUPS — Kile Tunachojua na Jinsi ya Kujiandaa”, Aprili 2025.
- Debian Security Tracker maelezo ya CVE-2024-35235.
{{#include ../banners/hacktricks-training.md}}