В сентябре исследователи из компании V12 продемонстрировали cups2root — новую технику локального повышения привилегий в Linux на основе штатных механизмов диспетчера печати CUPS. Планировщик cupsd не ограничивает path-компонент device-URI для non-file-бэкендов, поэтому root-привилегированный backend serial может записать данные печати в произвольный файл (включая конфигурацию самого CUPS), а подмена параметров этой конфигурации заставляет root-процесс исполнить файлы атакующего.
Данная особенность заводилась как уязвимость CVE-2026-95511, однако апстрим CUPS отклонил её: создание serial-очереди требует членства в SystemGroups (lpadmin) — административной роли, назначаемой суперпользователем, то есть «граница привилегий не пересекается».
Но для защитников проблема остаётся: в Ubuntu Desktop обычный пользователь по умолчанию входит в lpadmin, и группа становится путём к root.
Как устроена атака:
В CUPS можно создать очередь, которая будет ссылаться на конфиг самого cupsd. Это может делать пользователь, состоящий в группе lpadmin (по умолчанию обычный пользователь состоит в ней в чистой версии Ubuntu 26.04). После создания очереди в нее пишется (через lp -d PRINTER_NAME -o RAW payload) «нужный» конфиг, а именно:
Group <primary-группа атакующего>, ServerRoot/ServerBin/RequestRoot/TempDir = /etc/cups/interfaces
После принуждения к перезапуску (посылается искажённый запрос на подписку IPP Create-Printer-Subscriptions, затем systemd перезапускает упавший cupsd) диспетчер печати CUPS вычитывает новый конфиг, идёт по подготовленному пути и делает то, что прописано в конфиге: даёт права на запись группе пользователя в папку /etc/cups/interfaces.
Далее атакующий создаёт симлинки бинарей CUPS (чтобы cupsd не упал), копирует в эту папку пейлоад и создаёт wrapper-скрипт cups-exec, который запускается в рамках нормальной работы CUPS от имени root. Этот скрипт даёт пейлоаду нужные права через chown 0:0 + chmod 6755 (setuid-root лаунчер). Остаётся только запустить пейлоад с root-правами.
Директория для записи /etc/cups/interfaces/ выбрана неслучайно, она должна удовлетворять следующим условиям:
- из неё можно исполнять файлы;
- она поддерживает suid-бит на исполняемых файлах;
- процесс, который меняет права на директорию, на которую указывают параметры фейкового конфига (ServerBin), должен иметь право менять права данной директории.
Детектирование:
Среди артефактов, фиксируемых при использовании такой техники, можно выделить следующие:
— Событие запуска процесса serial самого cupsd, которое явно говорит, что происходит работа с устройством по URI serial:/etc/cups/cups-files.conf:
/usr/lib/cups/backend/serial serial:/etc/cups/cups-files.conf?baud=115200 <обрезано> — Создание очереди для принтера с файлом cups-files.conf от процесса lpadmin:
/usr/sbin/lpadmin -p cups2root -v serial:/etc/cups/cups-files.conf?baud=115200 <обрезано> — Смена владельца (chown 0:0), смена прав и выдача suid-бита (chmod 6755), проверка пользователя (id -u) и другие подозрительные события от процесса cups-exec.
— Наличие и запуск скрытых файлов (начинаются с ‘.’) из директории /etc/cups/interfaces/. В случае оригинального PoC это файл /etc/cups/interfaces/.c2rsh.
Защита:
На данную особенность нет патча, поскольку она не признана уязвимостью. Основная рекомендация по защите — удаление из группы lpadmin пользователей, которые не администрируют принтеры в CUPS.
Мораль:
Техника cups2root показывает, что граница привилегий определяется не только ядром и SUID-бинарниками, но и «административными» группами прикладных сервисов. Root-процессы с управляемой пользователем конфигурацией (пути, URI, фильтры) — потенциальный канал записи и исполнения от имени root, а членство в таких группах — привилегия, подлежащая контролю. Даже без формального CVE детект должен опираться на поведение цепочки lpadmin → cupsd → backend → cups-exec, а не только на сигнатуры пейлоада.

