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

Протокол Інтернет-друку (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

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

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)Вразливий компонентВплив
2025CVE-2023-50739Прошивка Lexmark (IPP парсер)Heap-overflow → RCE через Wi-Fi/LAN
2024CVE-2024-47076, 47175, 47176, 47177cups-browsed, libcupsfilters, libppd, cups-filtersПовний неавтентифікований RCE ланцюг на будь-якому Linux десктопі/сервері з увімкненим CUPS переглядом
2024CVE-2024-35235cupsd 2.4.8-Symlink трюк → довільний chmod 666 → підвищення привілеїв
2023CVE-2023-0856 (Canon) + Pwn2OwnStack-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 HijackingCancel-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.

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