
CUPS 2.4.16 Escalada de Privilegios Locales mediante Fuga de Token de Administrador Local y Escritura Arbitraria de Archivos file:// (CVE-2026-34990)
CUPS 2.4.16 contiene una vulnerabilidad de escalada de privilegios local (también registrada como GHSA-c54j-2vqw-wpwp).
Socket con permisos de escritura para todos — /run/cups/cups.sock tiene permisos de escritura para todos,
lo que permite a cualquier usuario local enviar solicitudes IPP al demonio CUPS
(que se ejecuta como root).
Fuga de token local — CUPS-Create-Local-Printer puede ser explotado para
filtrar el token de autorización Local apuntando device-uri a un
servidor IPP controlado por el atacante.
Escritura arbitraria de archivos — Con el token filtrado, un atacante puede crear
una impresora con device-uri=file:///etc/sudoers.d/<user>, provocando que CUPS
(como root) escriba contenido arbitrario en cualquier ruta del disco.
# 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
🧠 Cómo funciona
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 │
└─────────────────────────────────────────────────────────────────┘
🛡️ Aviso legal
Esta herramienta se proporciona únicamente para pruebas de seguridad autorizadas y
fines educativos. No la utilices contra sistemas que no sean de tu propiedad o para los que no
tengas permiso explícito para probar. El autor no se responsabiliza de ningún uso indebido
o daño causado por esta herramienta.
📚 Referencias
GHSA-c54j-2vqw-wpwp
CVE-2026-34990
CUPS Security Advisories
📄 Licencia
MIT — consulta el archivo LICENSE.
text
### Ficheiro 3: `LICENSE`
```bash
nano LICENSE