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
POC_CVE-2026-45185 — POC_CVE-2026-45185 para nuclei-templates | Kitploit
Herramientas/GitHubGitHub/mj-bin/poc_cve-2026-45185
Análisis de VulnerabilidadesExplotaciónFuzzingAprendizaje y EducaciónSeguridad de Correo ElectrónicoLabs y Práctica
GitHubmj-bin/poc_cve-2026-45185

POC_CVE-2026-45185

POC_CVE-2026-45185 para nuclei-templates

Ver Repositorio
214hace 3 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 →
Compartir

CVE-2026-45185 Laboratorio de Validación de Plantillas Nuclei

Este repositorio no es un repositorio de PoC de exploits de propósito general. Es un laboratorio de validación local para reproducir y revisar el comportamiento de una plantilla CVE-2026-45185 destinada a ser contribuida a projectdiscovery/nuclei-templates.

root@kitploit:~
La plantilla de código nuclei no es un detector solo de versión.
Controla directamente STARTTLS, BDAT, close_notify de TLS y un siguiente
byte SMTP en texto plano en la misma conexión TCP.

Esta secuencia coincide en el laboratorio local vulnerable Exim 4.99.2 GnuTLS y no
coincide en el laboratorio parcheado Exim 4.99.3 GnuTLS bajo las mismas condiciones.

La señal de validación actual es un oráculo de respuesta SMTP remoto, no una observación directa de la escritura UAF en sí. Internamente, este CVE es un use-after-free donde bytes de nueva línea (\r/\n) pueden escribirse en un búfer de transferencia GnuTLS liberado después del apagado de TLS. En la práctica, un cliente no puede observar realistamente esa escritura en búfer liberado directamente a través de respuestas SMTP. Por lo tanto, este README y la plantilla no afirman probar directamente la escritura UAF de bdat_ungetc -> tls_ungetc o RCE. En cambio, la plantilla detecta una diferencia de recuperación de estado/pila de recepción que aparece durante el flujo de activación.

Descargar herramienta

Al rastrear el mecanismo de la vulnerabilidad, observé que después de TLS close_notify durante el manejo de STARTTLS + BDAT, punteros a función tls_* obsoletos pueden permanecer en la capa inferior de la pila de recepción BDAT en lugar de ser restaurados correctamente a punteros a función smtp_*. Ese estado se vuelve visible en cómo el servidor maneja el siguiente comando SMTP. Después de que el BDAT dividido alcanza la primera finalización, enviar NOOP en la misma sesión hace que el laboratorio vulnerable Exim 4.99.2 GnuTLS devuelva 421 lost input connection, mientras que el laboratorio parcheado Exim 4.99.3 GnuTLS lo maneja normalmente con 250 OK. Esta clara diferencia de respuesta vulnerable/parcheado se utiliza como el comparador para la plantilla de código nuclei local y autorizada.

Para un recorrido más profundo del flujo de la vulnerabilidad, consulte CVE-2026-45185-Technical-Analysis.md.

Matriz de Validación

DestinoVersiónBackend TLSSTARTTLSCHUNKINGPuertoResultado esperado de nuclei
vulnerableExim 4.99.2GnuTLSsísí127.0.0.1:2525coincidencia
parcheadoExim 4.99.3GnuTLSsísí127.0.0.1:2526sin coincidencia

Destinatario común del sobre SMTP (RCPT TO):

root@kitploit:~
[email protected]

La ACL lab_rcpt del laboratorio Docker acepta este destinatario de sobre. En un objetivo SMTP general, si RCPT TO es rechazado, la secuencia puede no alcanzar el analizador del cuerpo BDAT, por lo que la plantilla necesita un destinatario aceptado.

Este valor es distinto del encabezado To: dentro del cuerpo BDAT. El destinatario RCPT TO es una dirección de sobre SMTP que debe pasar las comprobaciones de destinatario del servidor. El valor To: en el cuerpo BDAT es solo texto de encabezado del mensaje; no necesita existir ni ser aceptado como buzón por el servidor.

Ubicación de la Plantilla

root@kitploit:~
templates/CVE-2026-45185.yaml

Nombre de la plantilla:

root@kitploit:~
Exim 4.97-4.99.2 GnuTLS STARTTLS BDAT - Same-Session Response Check

La plantilla está escrita con metadata.verified: true y tiene las etiquetas code e intrusive.

Validación Rápida

Ejecute los siguientes comandos desde el directorio POC_2026_45185/.

root@kitploit:~
docker compose build
docker compose up -d

Valide la sintaxis de la plantilla:

root@kitploit:~
nuclei -duc -validate -code -t templates/CVE-2026-45185.yaml

Firme la plantilla de código local antes de ejecutarla:

root@kitploit:~
nuclei -duc -code -t templates/CVE-2026-45185.yaml -sign

Ejecute contra el laboratorio vulnerable:

root@kitploit:~
nuclei -code \
  -t templates/CVE-2026-45185.yaml \
  -u 127.0.0.1:2525 \
  -var [email protected] \
  -debug

Resultado esperado:

root@kitploit:~
CVE-2026-45185: vulnerable response oracle matched

Ejecute contra el laboratorio parcheado:

root@kitploit:~
nuclei -code \
  -t templates/CVE-2026-45185.yaml \
  -u 127.0.0.1:2526 \
  -var [email protected] \
  -debug

Resultado esperado:

root@kitploit:~
no match
NO-MATCH: patched-like response: NOOP succeeded after split trigger

Tenga en cuenta que el protocolo code de nuclei no se ejecuta por defecto, por lo que -code es necesario. Nuclei también bloquea plantillas code sin firmar. Si la clave privada local de nuclei está protegida con una frase de contraseña, ejecute el comando de firma en una terminal interactiva e introduzca esa frase de contraseña. Vuelva a firmar después de cada cambio en la plantilla porque el resumen cubre el contenido de la plantilla.

Ejemplo de Resultados de Nuclei

Estas capturas de pantalla muestran el resultado del oráculo de respuesta del laboratorio local después de que la plantilla haya sido firmada. Son evidencia de validación de la diferencia de respuesta en la misma sesión descrita anteriormente, no una prueba directa con depurador o ASAN de la escritura UAF interna.

Laboratorio vulnerable Exim 4.99.2 GnuTLS en 127.0.0.1:2525:

Coincidencia local nuclei Exim 4.99.2 vulnerable

Laboratorio parcheado Exim 4.99.3 GnuTLS en 127.0.0.1:2526:

Sin coincidencia local nuclei Exim 4.99.3 parcheado

¿Por Qué el Protocolo Code?

El núcleo de este CVE no es un banner SMTP o una comprobación de versión. La plantilla necesita crear la siguiente transición de estado de transporte en la misma conexión TCP:

root@kitploit:~
SMTP EHLO en texto plano
-> STARTTLS
-> handshake TLS en la misma conexión TCP
-> TLS EHLO / MAIL FROM / RCPT TO / BDAT 70 LAST
-> primeros 69 bytes del cuerpo BDAT como datos de aplicación TLS
-> close_notify de TLS sin cerrar el socket TCP
-> byte final del cuerpo en texto plano en la misma conexión TCP
-> comprobación de respuesta NOOP en texto plano en la misma sesión

Qué Verifica la Plantilla

El código Python dentro de la plantilla YAML imprime el marcador fijo solo después de que todas las siguientes condiciones se cumplan. El comparador de nuclei solo coincide con ese marcador.

root@kitploit:~
Se encuentra la identidad Exim
Y STARTTLS se anuncia en EHLO en texto plano
Y CHUNKING se anuncia en EHLO en texto plano
Y STARTTLS es aceptado
Y CHUNKING se anuncia en TLS EHLO
Y MAIL FROM es aceptado
Y RCPT TO es aceptado
Y el BDAT dividido con close_notify alcanza la primera finalización
Y la primera finalización contiene "250 OK id="
Y la respuesta NOOP en texto plano en la misma sesión contiene "421"
Y la respuesta NOOP en texto plano en la misma sesión contiene "lost input connection"

La plantilla no coincide con ninguna de las siguientes señales por sí solas:

root@kitploit:~
solo versión
solo tiempo de espera
solo caída de conexión
solo respuesta vacía
rechazo de destinatario
solo anuncio de STARTTLS/CHUNKING

Oráculo de Respuesta

Ambos laboratorios procesan el mensaje BDAT dividido hasta la primera finalización.

root@kitploit:~
250- 70 byte chunk, total 72
250 OK id=...

La diferencia aparece cuando se envía el siguiente comando SMTP en texto plano en la misma sesión SMTP.

Vulnerable 4.99.2:

root@kitploit:~
NOOP -> 421 exim-lab.local lost input connection
QUIT -> 421 exim-lab.local lost input connection
RSET -> 421 exim-lab.local lost input connection

Parcheado 4.99.3:

root@kitploit:~
NOOP -> 250 OK
QUIT -> 221 exim-lab.local closing connection
RSET -> 250 Reset OK

Interpretación:

root@kitploit:~
Observación:
  Ambos laboratorios alcanzan la finalización del mensaje BDAT dividido.
  Solo el laboratorio vulnerable no logra volver limpiamente al bucle del siguiente comando
  SMTP en texto plano en la misma sesión.

Evidencia:
  La respuesta de seguimiento vulnerable es 421 lost input connection.
  La respuesta de seguimiento parcheada es 250 OK o 221 closing connection.

Inferencia:
  Esta diferencia es consistente con la diferencia de recuperación de estado/pila de recepción
  después de close_notify de STARTTLS.

Forma del Payload

La plantilla utiliza el siguiente mensaje de 70 bytes como cuerpo BDAT.

root@kitploit:~
From: [email protected]\r\n
To: [email protected]\r\n
Subject: poc\r\n
\r\n
body

El destinatario del sobre SMTP se pasa por separado a través de la variable de plantilla recipient. El encabezado To: en el cuerpo es texto y no está relacionado con si el SMTP RCPT TO es aceptado, por lo que no necesita existir ni ser aceptado por el servidor.

Forma dividida:

root@kitploit:~
BDAT 70 LAST
Cuerpo TLS:   primeros 69 bytes, terminando con "bod"
Evento TLS:   close_notify
Texto plano:  byte final "y"
Seguimiento:   NOOP

Verificación Local

Puede verificar manualmente que ambos laboratorios anuncian Exim, STARTTLS y CHUNKING.

root@kitploit:~
printf 'EHLO lab-client.local\r\nQUIT\r\n' | nc -w 3 127.0.0.1 2525
printf 'EHLO lab-client.local\r\nQUIT\r\n' | nc -w 3 127.0.0.1 2526

Señales esperadas:

root@kitploit:~
Exim
STARTTLS
CHUNKING

También puede verificar la ruta normal de STARTTLS:

root@kitploit:~
openssl s_client -starttls smtp -connect 127.0.0.1:2525 -crlf
openssl s_client -starttls smtp -connect 127.0.0.1:2526 -crlf

Alcance y Seguridad

  • Use esto solo contra el laboratorio Docker local o objetivos SMTP explícitamente autorizados.
  • No escanee ni envíe el activador a servidores Exim de terceros.
  • Este repositorio no proporciona una cadena de exploits RCE, persistencia o post-explotación.
  • Las imágenes Docker predeterminadas son compilaciones de depuración, no compilaciones ASAN.
  • El trabajo de seguimiento con gdb/ASAN para la confirmación de la ruta de llamada interna se rastrea por separado en debugging/ y notes/source-walkthrough-progress.md.

Estructura del Repositorio

root@kitploit:~
POC_2026_45185/
  compose.yaml
  images/            capturas de pantalla de validación local de nuclei
  vulnerable/        Exim 4.99.2 + compilación de depuración GnuTLS
  patched/           Exim 4.99.3 + compilación de depuración GnuTLS
  nuclei-templates/  submódulo: espacio de trabajo local de plantillas nuclei

Referencias

  • Artículo de XBOW: https://xbow.com/blog/dead-letter-cve-2026-45185-xbow-found-rce-exim
  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-45185
  • Aviso de Exim: https://exim.org/static/doc/security/EXIM-Security-2026-05-01.1/EXIM-Security-2026-05-01.1.txt
  • Anuncio oss-security: https://www.openwall.com/lists/oss-security/2026/05/12/4
  • Parche upstream de Exim: https://code.exim.org/exim/exim/commit/040c1ce6889f435206677ed532c9a4185cf0bcaf