Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
POC_CVE-2026-45185 — POC_CVE-2026-45185 para nuclei-templates | Kitploit
Ferramentas/GitHubGitHub/mj-bin/poc_cve-2026-45185
Análise de VulnerabilidadesExploraçãoFuzzingAprendizado e EducaçãoSegurança de EmailLabs e Prática
GitHubmj-bin/poc_cve-2026-45185

POC_CVE-2026-45185

POC_CVE-2026-45185 para nuclei-templates

Ver Repositório
214há 3 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Laboratório de Validação de Template Nuclei CVE-2026-45185

Este repositório não é um repositório de PoC de exploit de propósito geral. É um laboratório local de validação para reproduzir e revisar o comportamento de um template CVE-2026-45185 destinado à contribuição para projectdiscovery/nuclei-templates.

root@kitploit:~
O template de código nuclei não é um detector apenas por versão.
Ele controla diretamente STARTTLS, BDAT, TLS close_notify e um byte SMTP
subsequente em texto puro na mesma conexão TCP.

Essa sequência corresponde no laboratório local vulnerável Exim 4.99.2 GnuTLS e
não corresponde no laboratório corrigido Exim 4.99.3 GnuTLS sob as mesmas condições.

O sinal de validação atual é um oráculo de resposta SMTP remoto, não uma observação direta da gravação UAF em si. Internamente, este CVE é um use-after-free em que bytes de nova linha (\r/\n) podem ser gravados em um buffer de transferência GnuTLS liberado após o encerramento do TLS. Na prática, um cliente não consegue observar de forma realista essa gravação no buffer liberado diretamente por meio de respostas SMTP. Portanto, este README e o template não afirmam provar diretamente a gravação UAF bdat_ungetc -> tls_ungetc nem RCE. Em vez disso, o template detecta uma diferença de recuperação de estado/pilha de recepção que aparece durante o fluxo de disparo.

Baixar ferramenta

Ao rastrear o mecanismo da vulnerabilidade, observei que após o close_notify do TLS durante o tratamento de STARTTLS + BDAT, ponteiros de função tls_* obsoletos podem permanecer na camada inferior da pilha de recepção BDAT em vez de serem restaurados corretamente para ponteiros de função smtp_*. Esse estado se torna visível na forma como o servidor lida com o próximo comando SMTP. Depois que o BDAT dividido atinge a primeira conclusão, enviar NOOP na mesma sessão faz o laboratório vulnerável Exim 4.99.2 GnuTLS retornar 421 lost input connection, enquanto o laboratório corrigido Exim 4.99.3 GnuTLS lida normalmente com 250 OK. Essa clara diferença de resposta vulnerável/corrigido é usada como o correspondente (matcher) para o template de código nuclei local e autorizado.

Para um passo a passo mais detalhado do fluxo da vulnerabilidade, consulte CVE-2026-45185-Technical-Analysis.md.

Matriz de Validação

AlvoVersãoBackend TLSSTARTTLSCHUNKINGPortaResultado esperado do nuclei
vulnerávelExim 4.99.2GnuTLSsimsim127.0.0.1:2525correspondência
corrigidoExim 4.99.3GnuTLSsimsim127.0.0.1:2526sem correspondência

Destinatário comum do envelope SMTP (RCPT TO):

root@kitploit:~
[email protected]

A ACL lab_rcpt do laboratório Docker aceita este destinatário de envelope. Em um alvo SMTP genérico, se RCPT TO for rejeitado, a sequência pode não alcançar o parser do corpo BDAT, portanto o template precisa de um destinatário aceito.

Esse valor é distinto do cabeçalho To: dentro do corpo BDAT. O RCPT TO é um endereço de envelope SMTP que deve passar pelas verificações de destinatário do servidor. O valor To: no corpo BDAT é apenas texto de cabeçalho de mensagem; ele não precisa existir nem ser aceito como caixa postal pelo servidor.

Localização do Template

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

Nome do template:

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

O template é escrito com metadata.verified: true e possui as tags code e intrusive.

Validação Rápida

Execute os seguintes comandos no diretório POC_2026_45185/.

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

Valide a sintaxe do template:

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

Assine o template de código local antes de executá-lo:

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

Execute contra o laboratório vulnerável:

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

Execute contra o laboratório corrigido:

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

Observe que o protocolo code do nuclei não é executado por padrão, portanto -code é obrigatório. O nuclei também bloqueia templates code não assinados. Se a chave privada local do nuclei estiver protegida por uma frase secreta, execute o comando de assinatura em um terminal interativo e digite essa frase secreta. Assine novamente após cada alteração no template, pois o digest cobre o conteúdo do template.

Exemplos de Resultados do Nuclei

Estas capturas de tela mostram o resultado do oráculo de resposta do laboratório local depois que o template foi assinado. Elas são evidências de validação para a diferença de resposta na mesma sessão descrita acima, não uma prova direta de depurador ou ASAN da gravação UAF interna.

Laboratório vulnerável Exim 4.99.2 GnuTLS em 127.0.0.1:2525:

Vulnerable Exim 4.99.2 local nuclei match

Laboratório corrigido Exim 4.99.3 GnuTLS em 127.0.0.1:2526:

Patched Exim 4.99.3 local nuclei no-match

Por que o Protocolo Code?

O núcleo deste CVE não é um banner SMTP nem uma verificação de versão. O template precisa criar a seguinte transição de estado de transporte na mesma conexão TCP:

root@kitploit:~
plaintext SMTP EHLO
-> STARTTLS
-> TLS handshake on the same TCP connection
-> TLS EHLO / MAIL FROM / RCPT TO / BDAT 70 LAST
-> first 69 bytes of the BDAT body as TLS application data
-> TLS close_notify without closing the TCP socket
-> final body byte as plaintext on the same TCP connection
-> same-session plaintext NOOP response check

O Que o Template Verifica

O código Python dentro do template YAML imprime o marcador fixo somente depois que todas as seguintes condições forem atendidas. O correspondente (matcher) do nuclei só corresponde a esse marcador.

root@kitploit:~
Exim identity is found
AND STARTTLS is advertised in plaintext EHLO
AND CHUNKING is advertised in plaintext EHLO
AND STARTTLS is accepted
AND CHUNKING is advertised in TLS EHLO
AND MAIL FROM is accepted
AND RCPT TO is accepted
AND the split close_notify BDAT reaches first completion
AND first completion contains "250 OK id="
AND the same-session plaintext NOOP response contains "421"
AND the same-session plaintext NOOP response contains "lost input connection"

O template não corresponde a nenhum dos seguintes sinais isoladamente:

root@kitploit:~
version-only
timeout-only
connection-drop-only
empty-response-only
recipient rejection
STARTTLS/CHUNKING advertisement only

Oráculo de Resposta

Ambos os laboratórios processam a mensagem BDAT dividida até a primeira conclusão.

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

A diferença aparece quando o próximo comando SMTP em texto puro é enviado na mesma sessão SMTP.

Vulnerável 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

Corrigido 4.99.3:

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

Interpretação:

root@kitploit:~
Observation:
  Both labs reach split BDAT message completion.
  Only the vulnerable lab fails to return cleanly to the next plaintext SMTP
  command loop in the same session.

Evidence:
  The vulnerable follow-up response is 421 lost input connection.
  The patched follow-up response is 250 OK or 221 closing connection.

Inference:
  This difference is consistent with the receive stack/state recovery difference
  after STARTTLS close_notify.

Formato do Payload

O template usa a seguinte mensagem de 70 bytes como corpo BDAT.

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

O destinatário do envelope SMTP é passado separadamente pela variável recipient do template. O cabeçalho To: no corpo é texto e não tem relação com o fato de o SMTP RCPT TO ser aceito, portanto ele não precisa existir nem ser aceito pelo servidor.

Formato da divisão:

root@kitploit:~
BDAT 70 LAST
TLS body:   first 69 bytes, ending with "bod"
TLS event:  close_notify
Plaintext:  final byte "y"
Follow-up:  NOOP

Verificação de Sanidade Local

Você pode verificar manualmente que ambos os laboratórios anunciam Exim, STARTTLS e 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

Sinais esperados:

root@kitploit:~
Exim
STARTTLS
CHUNKING

Você também pode verificar o fluxo STARTTLS normal:

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

Escopo e Segurança

  • Use isto apenas contra o laboratório Docker local ou alvos SMTP explicitamente autorizados.
  • Não escaneie nem envie o gatilho para servidores Exim de terceiros.
  • Este repositório não fornece cadeia de exploit RCE, persistência ou pós-exploração.
  • As imagens Docker padrão são builds de depuração, não builds ASAN.
  • O trabalho de acompanhamento com gdb/ASAN para confirmação do caminho interno de chamadas é rastreado separadamente em debugging/ e notes/source-walkthrough-progress.md.

Estrutura do Repositório

root@kitploit:~
POC_2026_45185/
  compose.yaml
  images/            local nuclei validation screenshots
  vulnerable/        Exim 4.99.2 + GnuTLS debug build
  patched/           Exim 4.99.3 + GnuTLS debug build
  nuclei-templates/  submodule: local nuclei template workspace

Referências

  • XBOW write-up: https://xbow.com/blog/dead-letter-cve-2026-45185-xbow-found-rce-exim
  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-45185
  • Exim advisory: https://exim.org/static/doc/security/EXIM-Security-2026-05-01.1/EXIM-Security-2026-05-01.1.txt
  • oss-security announcement: https://www.openwall.com/lists/oss-security/2026/05/12/4
  • Upstream Exim patch: https://code.exim.org/exim/exim/commit/040c1ce6889f435206677ed532c9a4185cf0bcaf