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
94eff9bdb6
commit
0935cb5876
@ -1,23 +1,103 @@
|
||||
# Internet Printing Protocol
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
# Інтернет-протокол друку \(IPP\)
|
||||
**Протокол Інтернет-друку (IPP)**, як зазначено в **RFC 2910** та **RFC 2911**, є де-факто стандартом для мережевого друку. Він працює поверх **HTTP/1.1** (як у відкритому тексті, так і через TLS) і надає багатий API для створення друкованих завдань, запиту можливостей принтера та управління чергами. Сучасні розширення, такі як **IPP Everywhere**, навіть дозволяють друк без драйверів з мобільних та хмарних середовищ, тоді як той же формат пакета був повторно використаний для 3-D принтерів.
|
||||
|
||||
**Інтернет-протокол друку (IPP)**, як зазначено в **RFC2910** та **RFC2911**, слугує основою для друку через інтернет. Його можливість розширення демонструється такими розробками, як **IPP Everywhere**, яка має на меті стандартизувати мобільний та хмарний друк, а також введення розширень для **3D-друку**.
|
||||
На жаль, відкриття порту **631/tcp (і 631/udp для виявлення принтерів)** часто призводить до серйозних проблем з безпекою – як на традиційних офісних принтерах, так і на будь-якому хосту Linux/Unix, що працює з **CUPS**.
|
||||
|
||||
Використовуючи протокол **HTTP**, IPP отримує вигоду від встановлених практик безпеки, включаючи **базову/дослідницьку аутентифікацію** та **SSL/TLS шифрування**. Дії, такі як подання завдання на друк або запит статусу принтера, виконуються через **HTTP POST запити**, спрямовані на IPP сервер, який працює на **порті 631/tcp**.
|
||||
|
||||
Відомою реалізацією IPP є **CUPS**, система друку з відкритим кодом, що поширена в різних дистрибутивах Linux та OS X. Незважаючи на свою корисність, IPP, подібно до LPD, може бути використаний для передачі шкідливого контенту через **PostScript** або **PJL файли**, що підкреслює потенційний ризик безпеки.
|
||||
---
|
||||
## 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])
|
||||
```
|
||||
Якщо ви хочете дізнатися більше про [**зламування принтерів, прочитайте цю сторінку**](http://hacking-printers.net/wiki/index.php/Main_Page).
|
||||
---
|
||||
## Перерахунок та Розвідка
|
||||
|
||||
### 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` витягує модель, стан та статистику черги, тоді як `cups-queue-info` перераховує очікуючі завдання.
|
||||
|
||||
### 2. Утиліти IPP з CUPS
|
||||
* `ippfind` – мультикаст/UDP виявлення (працює з cups-browsed):
|
||||
```bash
|
||||
ippfind --timeout 3 --txt -v "@local and port=631" # список принтерів
|
||||
```
|
||||
* `ipptool` – довільні запити, визначені у файлі *.test*:
|
||||
```bash
|
||||
ipptool -tv ipp://<IP>/ipp/print get-printer-attributes.test
|
||||
```
|
||||
Упакований файл *get-printer-attributes.test* запитує версію прошивки, підтримувані формати документів тощо.
|
||||
|
||||
### 3. Dork'и Shodan / Censys
|
||||
```bash
|
||||
shodan search 'product:"CUPS (IPP)" port:631'
|
||||
```
|
||||
Більше ніж **70 000** хостів публічно експонували CUPS у квітні 2025 року.
|
||||
|
||||
---
|
||||
## Останні вразливості (2023-2025)
|
||||
|
||||
| Рік | CVE ID(s) | Вразливий компонент | Вплив |
|
||||
|------|-----------|--------------------|--------|
|
||||
| 2025 | CVE-2023-50739 | Прошивка Lexmark (IPP парсер) | Heap-overflow → RCE через Wi-Fi/LAN |
|
||||
| 2024 | CVE-2024-47076, 47175, 47176, 47177 | cups-browsed, libcupsfilters, libppd, cups-filters | Повний неавтентифікований RCE ланцюг на будь-якому Linux десктопі/сервері з увімкненим CUPS переглядом |
|
||||
| 2024 | CVE-2024-35235 | cupsd 2.4.8- | Symlink трюк → довільний **chmod 666** → підвищення привілеїв |
|
||||
| 2023 | CVE-2023-0856 (Canon) + Pwn2Own | Stack-overflow в атрибуті `sides` → віддалене виконання коду |
|
||||
|
||||
### cups-browsed RCE ланцюг (вересень 2024)
|
||||
1. `cups-browsed` слухає на **UDP/631** для реклами принтерів.
|
||||
2. Зловмисник надсилає один підроблений пакет, що вказує на шкідливу IPP URL (CVE-2024-47176).
|
||||
3. `libcupsfilters` автоматично отримує віддалений **PPD** без валідації (CVE-2024-47076 & 47175).
|
||||
4. Створений PPD зловживає фільтром **foomatic-rip** для виконання довільних shell команд щоразу, коли щось друкується (CVE-2024-47177).
|
||||
|
||||
Код доказу концепції є публічним на блозі дослідника, і експлойти не вимагають **жодної автентифікації**; доступ до мережі на UDP/631 є достатнім.
|
||||
|
||||
#### Тимчасові заходи пом'якшення
|
||||
```
|
||||
sudo systemctl stop cups-browsed
|
||||
sudo systemctl disable cups-browsed
|
||||
sudo ufw deny 631/udp # or equivalent firewall rule
|
||||
```
|
||||
Патчі були випущені основними дистрибутивами в жовтні 2024 року – переконайтеся, що **cups-filters ≥ 2.0.0**.
|
||||
|
||||
### Неправильна конфігурація символічного посилання `Listen` у cupsd (CVE-2024-35235)
|
||||
Розміщення символічного посилання в директиві `Listen` *cupsd.conf* призводить до того, що **cupds (root)** виконує `chmod 666` на вибраному зловмисником шляху, що призводить до записуваних системних файлів і, на Ubuntu, до виконання коду через шкідливий PPD з `FoomaticRIPCommandLine`.
|
||||
|
||||
---
|
||||
## Офensive Techniques
|
||||
|
||||
* **Unauthenticated raw print job** – багато принтерів приймають `POST /ipp/print` без автентифікації. Шкідливий **PostScript** вантаж може викликати команди оболонки (`system("/bin/nc ...")`) на висококласних пристроях.
|
||||
* **Job Hijacking** – `Cancel-Job`, за яким слідує `Send-Document`, дозволяє зловмиснику замінити документ когось іншого перед його фізичним друком.
|
||||
* **SNMP → IPP combo** – за замовчуванням спільнота `public` часто витікає внутрішнє ім'я черги, необхідне в IPP URL.
|
||||
|
||||
---
|
||||
## Defensive Best Practices
|
||||
1. Швидко патчити CUPS та прошивку принтера; підписатися на канали PSIRT постачальника.
|
||||
2. Вимкнути `cups-browsed` та UDP/631, якщо не потрібен друк без конфігурації.
|
||||
3. Обмежити TCP/631 для довірених підмереж/VPN та забезпечити **TLS (ipps://)**.
|
||||
4. Вимагати **Kerberos/Negotiate** або автентифікацію за сертифікатом замість анонімного друку.
|
||||
5. Моніторити журнали: `/var/log/cups/error_log` з `LogLevel debug2` покаже ненадійні завантаження PPD або підозрілі виклики фільтрів.
|
||||
6. У мережах з високою безпекою перенести друк на захищений, ізольований сервер друку, який проксірує завдання до пристроїв лише через USB.
|
||||
|
||||
## References
|
||||
- Akamai – “Critical Linux RCE Vulnerability in CUPS — What We Know and How to Prepare”, April 2025.
|
||||
- Debian Security Tracker – деталі CVE-2024-35235.
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user