CVE-2026-34990 - CUPS LPE
Análisis del CVE
Vulnerabilidad Explotada
Esta vulnerabilidad representa una escalada de privilegios local (LPE) en el servicio CUPS (Common UNIX Printing System). La explotación se logra encadenando dos debilidades de diseño en el manejo del protocolo IPP (Internet Printing Protocol):
Fuga de Credenciales (Token Leak / Coercion)
El atacante puede abusar de la operación CUPS-Create-Local-Printer para obligar al demonio cupsd a conectarse a un servidor IPP malicioso. Al forzar un desafío de autenticación (401 Unauthorized con WWW-Authenticate: Local), cupsd filtra un token de autorización local de altos privilegios.
Escritura Arbitraria de Archivos (Abuso de file://)
Utilizando el token capturado, el atacante tiene permisos suficientes para registrar una nueva impresora utilizando el esquema file:// en su directiva device-uri. Esto permite redirigir el “trabajo de impresión” hacia rutas críticas y protegidas del sistema operativo.
Impacto
Crítico (Local): Un usuario local con privilegios mínimos (como www-data o un usuario estándar) puede escalar sus privilegios a root sin necesidad de interacción por parte del administrador.
Al poder escribir archivos arbitrarios en directorios sensibles del sistema (como /etc/sudoers.d/ o /etc/cron.d/), el compromiso del host es total.
Uso
Ejecuta el script de exploit contra el entorno local:
python3 CVE-2026-34990.py
Resultado esperado
[*] CVE-2026-34990 | user=labuser | cupsd=127.0.0.1:631
[*] coercing cupsd → rogue server ...
[+] captured token: D9F5BF7529096C824392C6BFF8108645
[*] writing sudoers ...
[+] wrote /etc/sudoers.d/labuser-pwn
[+] ROOT: uid=0(root) gid=0(root) groups=0(root)
[*] run: sudo -i
Una vez ejecutado, genera tu shell interactivo como root:
sudo -i
PoC
Este script está destinado únicamente a fines educativos y de investigación. Gixploit no se hace responsable de ningún mal uso o daño causado por este exploit.
¡Siempre asegúrate de tener permiso antes de probar o explotar vulnerabilidades!
Explicación del código
El script en Python automatiza la cadena de explotación en tres fases principales utilizando peticiones IPP construidas a nivel de bytes (struct.pack):
Captura del token de autenticación
El proceso comienza desplegando un servidor IPP falso (rogue server) en un puerto local (por ejemplo, el 9189). Cuando recibe conexiones entrantes, responde con un estado HTTP 401 Unauthorized solicitando autenticación local.
Esta respuesta fuerza al demonio cupsd a reenviar la petición original incluyendo su token de sesión administrativo en la cabecera Authorization.
Coacción e inducción al filtrado de tokens
Para desencadenar la conexión hacia el servidor falso, el script transmite una petición CUPS-Create-Local-Printer al puerto legítimo de CUPS (puerto 631). En los parámetros de la solicitud, se configura el atributo device-uri apuntando al servicio controlado por el atacante (ipp://127.0.0.1:9189/ipp/print).
Esto obliga al demonio cupsd (que se ejecuta con permisos elevados de root) a iniciar una conexión saliente, filtrando así el token de autenticación durante el saludo de red.
Escritura arbitraria mediante el esquema file://
Una vez obtenido el token, se realizan peticiones administrativas autenticadas mediante CUPS-Add-Modify-Printer para registrar una cola de impresión persistente cuyo destino especificado en device-uri es la ruta file:///etc/sudoers.d/<usuario>-pwn. A continuación, se habilita la impresora y se envía un trabajo en formato raw (Print-Job) cuyo contenido es la regla <usuario> ALL=(ALL) NOPASSWD: ALL.
Al procesar la cola, cupsd escribe el archivo directamente en el sistema de archivos con permisos de superusuario, permitiendo la ejecución de comandos con sudo sin contraseña.