
PoC en Python que reproduce el fallo de impresora local de CUPS 2.4.16: captura el token de autenticación Local mediante un endpoint IPP malicioso, crea una impresora file:// y compite con un trabajo para escribir archivos propiedad de root.
Solo para pruebas autorizadas / uso de investigación. Ejecute este PoC únicamente contra sistemas que posea o para los que tenga autorización explícita de prueba.
Este repositorio contiene una reproducción orientada al CUPS del sistema de la vulnerabilidad de impresora local en CUPS 2.4.16.
La implementación fue desarrollada a partir de la reproducción publicada de la vulnerabilidad de CUPS y adaptada para funcionar contra una instalación de CUPS del sistema ya en ejecución, en lugar de requerir una compilación de CUPS instalada por separado y un arnés de reproducción ejecutado como root.
La reproducción sigue esta cadena general:
CUPS 2.4.16
│
▼
Desafío de autenticación local
│
▼
Endpoint IPP controlado por el atacante
│
▼
Authorization: Local <token>
│
▼
Administración autenticada de CUPS
│
▼
CUPS-Create-Local-Printer
│
▼
URI de dispositivo file://
│
▼
Condición de carrera impresora/trabajo
│
▼
Archivo objetivo propiedad de root
El exploit depende de una condición de carrera, por lo que la ejecución exitosa no está garantizada en cada intento.
La reproducción publicada está diseñada como un arnés de vulnerabilidad controlado. En particular, asume una instalación de CUPS dedicada y realiza operaciones de configuración/restablecimiento que son apropiadas para un entorno de reproducción, pero que no son representativas de una instalación de distribución ya en ejecución.
Esta implementación, en cambio:
ipptool instalado.cups-create-local-printer.test del sistema cuando está disponible.Local de CUPS.file://.Probado en el laboratorio del autor con:
ipptoolSe espera que la definición de prueba esté en:
/usr/share/cups/ipptool/cups-create-local-printer.test
Compruebe su instalación con:
cupsd -v
which ipptool
find /usr/share/cups -name 'cups-create-local-printer.test' 2>/dev/null
Configure la identidad del atacante y la ruta objetivo mediante variables de entorno:
export CUPS_ATTACKER="$USER"
export CUPS_TARGET="/tmp/cups-poc-target"
python3 exploit.py
Para una reproducción controlada de escalada de privilegios, elija un objetivo apropiado para su entorno de prueba aislado.
El script también utiliza por defecto un objetivo de estilo sudoers bajo /etc/sudoers.d/, por lo que no lo ejecute sin cuidado en un sistema de producción.
El PoC inicia un listener IPP y hace que CUPS se autentique contra él. El listener inicialmente devuelve un desafío 401 con:
WWW-Authenticate: Local trc="y"
La solicitud posterior contiene:
Authorization: Local <token>
El token se reutiliza entonces contra el endpoint de administración local de CUPS.
La reproducción utiliza:
CUPS-Create-Local-Printer
con un URI de dispositivo file://.
El bucle de candidatos realiza las operaciones de impresora repetidamente, incluyendo:
CUPS-Add-Modify-Printer
CUPS-Accept-Jobs
Resume-Printer
Print-Job
La carrera se repite intencionalmente porque un solo intento puede no ganar.
Este repositorio es una adaptación, no la implementación canónica original.
La lógica de construcción de solicitudes y la secuencia de explotación se basan en la reproducción publicada. Los principales cambios se refieren a la ejecución contra una instalación de CUPS del sistema existente y a la eliminación de las suposiciones de configuración/restablecimiento del entorno de reproducción.
Consulte el aviso de seguridad y el repositorio de OpenPrinting CUPS originales para obtener la información autorizada sobre la vulnerabilidad y la reproducción original.
No utilice esto contra instalaciones de CUPS sin autorización.
Para la validación defensiva, los indicadores útiles incluyen solicitudes IPP inesperadas a endpoints controlados por el atacante, intercambios de autenticación Local inusuales, creación de impresoras locales inesperadas y actividad sospechosa de impresora/trabajo.