Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2025-59712_CVE-2025-59713 — Exploit PoC de Snipe-IT para CVE-2025-59712 y CVE-2025-59713 | Kitploit
Herramientas/GitHubGitHub/synacktiv/cve-2025-59712_cve-2025-59713
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónRed TeamingDesarrollo de Payloads
GitHubsynacktiv/cve-2025-59712_cve-2025-59713

CVE-2025-59712_CVE-2025-59713

Exploit PoC de Snipe-IT para CVE-2025-59712 y CVE-2025-59713

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Ver Repositorio
23hace 10 mesesAún no revisado

PoC para CVE-2025-59712 y CVE-2025-59713

Este PoC proporciona un script automatizado para explotar CVE-2025-59712 (XSS en la cabecera User-Agent) y CVE-2025-59713 (deserialización insegura).

Contexto

Estas dos vulnerabilidades fueron descubiertas por Synacktiv durante la investigación de vulnerabilidades en el software Snipe-IT. Snipe-IT es un sistema de gestión de activos de código abierto basado en Laravel y diseñado para ayudar a las organizaciones a rastrear y gestionar sus activos físicos y digitales.

Un informe técnico se puede encontrar en el aviso de seguridad dedicado en el sitio web de Synacktiv.

Modos

Este script proporciona tres subcomandos, correspondientes a los modos de explotación: xss, rce y fullchain.

XSS

Este subcomando explota CVE-2025-59712, que permite a un usuario de bajos privilegios inyectar JavaScript arbitrario en la página HTML renderizada al llamar a la ruta /reports/activity. Esto solo puede ser realizado por un usuario administrador, o por un usuario que tenga permisos explícitos de visualización de informes. La inyección es posible debido a una sanitización incorrecta del campo User-Agent cuando un usuario actualiza la información de su perfil.

Para ello, primero iniciará sesión como el usuario de bajos privilegios y, a continuación, inyectará el código JavaScript definido en el archivo proporcionado mediante el flag --javascript.

root@kitploit:~
$ python3 exploit.py xss --help

 Usage: exploit.py xss [OPTIONS]

 Execute XSS attack only with custom JavaScript payload

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --url         -u       TEXT                    Target Snipe-IT URL [required]                                                                                                             │
│ *  --login       -l       TEXT                    Low-privileged username [required]                                                                                                         │
│ *  --password    -p       TEXT                    Low-privileged password [required]                                                                                                         │
│ *  --new-name    -n       TEXT                    New name for low-privileged user [required]                                                                                                │
│ *  --javascript  -js      TEXT                    Path to custom JavaScript file [required]                                                                                                  │
│    --proxy       -x       TEXT                    HTTP proxy (http://ip:port)                                                                                                                │
│    --verbose     -v       [quiet|normal|verbose]  Logging verbosity [default: normal]                                                                                                        │
│    --help                                         Show this message and exit.                                                                                                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

[!IMPORTANT]
Durante la investigación de seguridad, las pruebas se llevaron a cabo en una versión de Snipe-IT que, por defecto, mostraba el campo User-Agent en el que se inyecta el JavaScript malicioso. Desde el commit 10e5d88, la propiedad User-Agent no se muestra por defecto cuando se renderiza la tabla de registro de acciones. Por lo tanto, el administrador que vaya a desencadenar el XSS debe haber marcado la casilla User-Agent en las opciones de vista para las versiones de Snipe-IT posteriores a este commit.

RCE

Este subcomando explota CVE-2025-59713, que permite la ejecución remota de código cuando se conocen las credenciales de un usuario administrador o superadministrador. Para ello, se realizan los siguientes pasos:

  1. Se activa una copia de seguridad de la instancia de Snipe-IT.
  2. La copia de seguridad generada se descarga, se edita en memoria y se vuelve a subir a Snipe-IT. La edición de la copia de seguridad incluye sentencias SQL adicionales en el archivo db-dumps/mysql-snipeit.sql, que crea un nuevo campo personalizado y edita el último registro de acciones con un objeto JSON que contiene la cadena pop de Laravel al restaurarse.

[!TIP] Por defecto, Snipe-IT incluye el archivo .env en la copia de seguridad. Si el script lo detecta, se muestra el valor de APP_KEY y el archivo .env se guarda en el directorio ./output (se puede especificar una ubicación personalizada para ese archivo con --output-dir).

  1. Se activa una restauración desde la copia de seguridad editada, que ejecutará las sentencias SQL añadidas.

[!CAUTION] Restaurar una copia de seguridad desconecta a todos los usuarios conectados a la instancia.

  1. Una vez completada la restauración, se llama a la ruta /api/v1/reports/activity, lo que desencadena la deserialización y ejecuta la cadena pop de Laravel.
root@kitploit:~
$ python3 exploit.py rce --help

 Usage: exploit.py rce [OPTIONS]

 Execute RCE attack only (requires existing admin account)

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --url         -u       TEXT                    Target Snipe-IT URL [required]                                                                                                             │
│ *  --admin-user  -au      TEXT                    Admin username [required]                                                                                                                  │
│ *  --admin-pass  -ap      TEXT                    Admin password [required]                                                                                                                  │
│    --output-dir  -od      PATH                    Output dir for .env file [default: /home/ninja/Téléchargements/snipe-it-advisory/exploit/output]                                           │
│    --shell-ip    -si      TEXT                    Reverse shell IP address                                                                                                                   │
│    --shell-port  -sp      INTEGER                 Reverse shell port                                                                                                                         │
│    --command     -c       TEXT                    Custom command (overrides reverse shell)                                                                                                   │
│    --proxy       -x       TEXT                    HTTP proxy (http://ip:port)                                                                                                                │
│    --verbose     -v       [quiet|normal|verbose]  Logging verbosity [default: normal]                                                                                                        │
│    --help                                         Show this message and exit.                                                                                                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

Fullchain

El subcomando fullchain tiene como objetivo encadenar ambas vulnerabilidades, XSS y RCE. Corresponde a un escenario en el que solo se tiene acceso a un usuario de bajos privilegios y se desea lograr la ejecución remota de código. Esto solo funcionará si el usuario que visita la página /reports/activity es un administrador o superadministrador. De hecho, solo estos roles tienen los derechos para crear y restaurar una copia de seguridad, lo cual es necesario para envenenar la base de datos y desencadenar posteriormente la cadena pop de Laravel.

Para ello, el script:

  1. Formateará una plantilla JavaScript con una cadena pop de Laravel que ejecutará, por defecto, una reverse shell de bash (puedes personalizar esta opción con el flag --command, igual que en el modo RCE).
  2. Iniciará sesión como el usuario de bajos privilegios e inyectará el campo User-Agent con una etiqueta <scr> para forzar al navegador de la víctima a cargar la plantilla JavaScript maliciosa.
  3. Levantará un servidor HTTP malicioso para distribuir la plantilla mencionada anteriormente, así como sus dependencias.
  4. Cuando un administrador o superadministrador visita la ruta /reports/activity, se desencadena el XSS y el JavaScript malicioso es cargado y ejecutado por el navegador de la víctima. A partir de entonces, se realizan los mismos pasos que en el módulo RCE, pero en JavaScript.
  5. Cuando se restaura la copia de seguridad, el navegador de la víctima realiza una petición GET (callback) al servidor HTTP de Python para notificar que la copia de seguridad ha sido restaurada y que la ruta de la API para desencadenar el RCE puede ser llamada.

Este modo utiliza varias librerías JavaScript adicionales, todos los créditos son para sus respectivos autores:

  • crypto-js.js: Se utiliza para realizar operaciones criptográficas, el código original se puede encontrar aquí.
  • jszip.js y jszip-utils.js: Se utilizan para realizar la edición en memoria de archivos ZIP. Los repos oficiales se pueden encontrar respectivamente aquí y aquí.
root@kitploit:~
$ python3 exploit.py fullchain --help

 Usage: exploit.py fullchain [OPTIONS]

 Execute full attack chain: XSS -> Backup manipulation -> RCE

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --url         -u       TEXT                    Target Snipe-IT URL [required]                                                                                                             │
│ *  --login       -l       TEXT                    Low-privileged user's username [required]                                                                                                  │
│ *  --password    -p       TEXT                    Low-privileged user's password [required]                                                                                                  │
│ *  --new-name    -n       TEXT                    New name for low-privileged user [required]                                                                                                │
│    --ip          -i       TEXT                    HTTP server IP address (default: auto-detect)                                                                                              │
│ *  --port        -P       INTEGER                 HTTP server port [required]                                                                                                                │
│    --admin-user  -au      TEXT                    Admin username to create [default: admin_rce]                                                                                              │
│    --admin-pass  -ap      TEXT                    Admin password to create [default: password123]                                                                                            │
│    --shell-ip    -si      TEXT                    Reverse shell IP address                                                                                                                   │
│    --shell-port  -sp      INTEGER                 Reverse shell port                                                                                                                         │
│    --command     -c       TEXT                    Custom command (overrides reverse shell)                                                                                                   │
│    --proxy       -x       TEXT                    HTTP proxy (http://ip:port)                                                                                                                │
│    --verbose     -v       [quiet|normal|verbose]  Logging verbosity [default: normal]                                                                                                        │
│    --help                                         Show this message and exit.                                                                                                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

Instalación

Para ejecutar este script, ejecuta los siguientes comandos:

root@kitploit:~
$ git clone https://github.com/synacktiv/CVE-2025-59712_CVE-2025-59713
$ cd CVE-2025-59712_CVE-2025-59713
$ python3 -m venv .venv && source .venv/bin/activate
$ python3 -m pip install -r requirements.txt

Dockerfile para el entorno de pruebas

También se proporciona un Dockerfile para probar el script y reproducir la explotación de las vulnerabilidades. Descarga una versión vulnerable de Snipe-IT, configura la base de datos con php artisan y crea dos usuarios:

  1. Usuario admin con una contraseña por defecto de AdminPassword123!
  2. Usuario lowpriv con una contraseña por defecto de LowPrivUser123!

Antes de ejecutar el contenedor, los archivos .env y snipe-it.conf deben actualizarse con la URL de la instancia de Snipe-IT:

root@kitploit:~
$ sed -i 's|^APP_URL=.*|APP_URL=http://<IP>:<PORT>|' .env
$ sed -i 's|\(ServerName\s*\).*|\1http://<IP>:<PORT>|' snipe-it.conf

El contenedor se puede ejecutar a continuación:

root@kitploit:~
$ docker build . -t "snipe-it-cve"
$ docker run -p 80:80 --name "snipe-it-debian" snipe-it-cve:latest
Descargar herramienta