Internet Printing Protocol
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Протокол Інтернет-друку (IPP), як зазначено в RFC 2910 та RFC 2911, є де-факто стандартом для мережевого друку. Він працює поверх HTTP/1.1 (як у відкритому тексті, так і через TLS) і надає багатий API для створення друкованих завдань, запиту можливостей принтера та управління чергами. Сучасні розширення, такі як IPP Everywhere, навіть дозволяють друк без драйверів з мобільних та хмарних середовищ, тоді як той же формат пакета був повторно використаний для 3-D принтерів.
На жаль, відкриття порту 631/tcp (і 631/udp для виявлення принтерів) часто призводить до серйозних проблем з безпекою – як на традиційних офісних принтерах, так і на будь-якому хосту Linux/Unix, що працює з CUPS.
Quick PoC – crafting raw IPP with 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])
Перерахунок та Розвідка
1. Nmap NSE
# 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):
ippfind --timeout 3 --txt -v "@local and port=631" # список принтерів
ipptool
– довільні запити, визначені у файлі .test:
ipptool -tv ipp://<IP>/ipp/print get-printer-attributes.test
Упакований файл get-printer-attributes.test запитує версію прошивки, підтримувані формати документів тощо.
3. Dork'и Shodan / Censys
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)
cups-browsed
слухає на UDP/631 для реклами принтерів.- Зловмисник надсилає один підроблений пакет, що вказує на шкідливу IPP URL (CVE-2024-47176).
libcupsfilters
автоматично отримує віддалений PPD без валідації (CVE-2024-47076 & 47175).- Створений 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
- Швидко патчити CUPS та прошивку принтера; підписатися на канали PSIRT постачальника.
- Вимкнути
cups-browsed
та UDP/631, якщо не потрібен друк без конфігурації. - Обмежити TCP/631 для довірених підмереж/VPN та забезпечити TLS (ipps://).
- Вимагати Kerberos/Negotiate або автентифікацію за сертифікатом замість анонімного друку.
- Моніторити журнали:
/var/log/cups/error_log
зLogLevel debug2
покаже ненадійні завантаження PPD або підозрілі виклики фільтрів. - У мережах з високою безпекою перенести друк на захищений, ізольований сервер друку, який проксірує завдання до пристроїв лише через USB.
References
- Akamai – “Critical Linux RCE Vulnerability in CUPS — What We Know and How to Prepare”, April 2025.
- Debian Security Tracker – деталі CVE-2024-35235.
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.