
CUPS 2.4.16 Локальное повышение привилегий через утечку локального административного токена и произвольную запись файлов через file:// (CVE-2026-34990)
CUPS 2.4.16 содержит уязвимость локального повышения привилегий (также отслеживается как GHSA-c54j-2vqw-wpwp).
Сокет, доступный для записи всем — /run/cups/cups.sock доступен для записи всем,
что позволяет любому локальному пользователю отправлять IPP-запросы демону CUPS
(работающему от имени root).
Утечка локального токена — CUPS-Create-Local-Printer может быть использован для
утечки токена авторизации Local путём указания device-uri на
контролируемый злоумышленником IPP-сервер.
Произвольная запись файлов — С помощью утёкшего токена злоумышленник может создать
принтер с device-uri=file:///etc/sudoers.d/<user>, что заставит CUPS
(от имени root) записать произвольное содержимое в любой путь на диске.
# Basic usage
python3 cups_pwn.py --user lowpriv
# Custom sudoers path
python3 cups_pwn.py --user lowpriv --sudoers /etc/sudoers.d/custom
# After success
sudo -i
🧠 Как это работает
text
┌─────────────────────────────────────────────────────────────────┐
│ 1. Start fake IPP server on 127.0.0.1:9189 │
│ 2. Send CUPS-Create-Local-Printer with device-uri=ipp://... │
│ 3. CUPS connects to our fake server → sends Local token │
│ 4. Extract the token │
│ 5. Create printer with device-uri=file:///etc/sudoers.d/... │
│ 6. Print gzip payload with "user ALL=(ALL) NOPASSWD: ALL" │
│ 7. CUPS writes the payload as root │
│ 8. sudo -n id → root │
└─────────────────────────────────────────────────────────────────┘
🛡️ Отказ от ответственности
Этот инструмент предоставляется исключительно для авторизованного тестирования
безопасности и образовательных целей. Не используйте его против систем, которыми вы
не владеете и на тестирование которых у вас нет явного разрешения. Автор не несёт
ответственности за любое неправомерное использование или ущерб, причинённый этим
инструментом.
📚 Ссылки
GHSA-c54j-2vqw-wpwp
CVE-2026-34990
CUPS Security Advisories
📄 Лицензия
MIT — см. файл LICENSE.
text
### Ficheiro 3: `LICENSE`
```bash
nano LICENSE