Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
POC_CVE-2026-45185 — POC_CVE-2026-45185 per nuclei-templates | Kitploit
Strumenti/GitHubGitHub/mj-bin/poc_cve-2026-45185
Analisi delle VulnerabilitàExploitFuzzingApprendimento e FormazioneSicurezza EmailLab e Pratica
GitHubmj-bin/poc_cve-2026-45185

POC_CVE-2026-45185

POC_CVE-2026-45185 per nuclei-templates

Vedi Repository
2143 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Laboratorio di validazione del template Nuclei per CVE-2026-45185

Questo repository non è un repository PoC (proof-of-concept) di exploit generici. È un laboratorio di validazione locale per riprodurre e verificare il comportamento di un template CVE-2026-45185 pensato per essere contribuito a projectdiscovery/nuclei-templates.

root@kitploit:~
The nuclei code template is not a version-only detector.
It directly controls STARTTLS, BDAT, TLS close_notify, and a following
SMTP plaintext byte on the same TCP connection.

This sequence matches in the local vulnerable Exim 4.99.2 GnuTLS lab and does
not match in the patched Exim 4.99.3 GnuTLS lab under the same conditions.

Il segnale di validazione attuale è un oracolo di risposta SMTP remota, non un'osservazione diretta della scrittura UAF stessa. Internamente, questa CVE è una use-after-free in cui i byte di newline (\r/\n) possono essere scritti in un buffer di trasferimento GnuTLS liberato dopo l'arresto di TLS. In pratica, un client non può osservare realisticamente quella scrittura su buffer liberato direttamente attraverso le risposte SMTP. Pertanto, questo README e il template non affermano di provare direttamente la scrittura UAF bdat_ungetc -> tls_ungetc o la RCE. Invece, il template rileva una differenza di ripristino dello stato/dello stack di ricezione che emerge durante il flusso di trigger.

Scarica lo strumento

Durante l'analisi del meccanismo della vulnerabilità, ho osservato che dopo close_notify TLS durante la gestione di STARTTLS + BDAT, puntatori a funzione tls_* obsoleti possono rimanere nel livello inferiore dello stack di ricezione BDAT invece di essere correttamente ripristinati ai puntatori a funzione smtp_*. Questo stato diventa visibile nel modo in cui il server gestisce il comando SMTP successivo. Dopo che il BDAT diviso raggiunge il primo completamento, l'invio di NOOP sulla stessa sessione fa sì che il laboratorio vulnerabile Exim 4.99.2 GnuTLS restituisca 421 lost input connection, mentre il laboratorio corretto Exim 4.99.3 GnuTLS lo gestisce normalmente con 250 OK. Questa chiara differenza di risposta vulnerabile/corretto viene usata come matcher per il template nuclei code locale e autorizzato.

Per un'analisi più approfondita del flusso della vulnerabilità, consulta CVE-2026-45185-Technical-Analysis.md.

Matrice di Validazione

TargetVersioneBackend TLSSTARTTLSCHUNKINGPortaRisultato nuclei atteso
vulnerabileExim 4.99.2GnuTLSsìsì127.0.0.1:2525match
correttoExim 4.99.3GnuTLSsìsì127.0.0.1:2526no match

Destinatario comune dell'inviluppo SMTP (RCPT TO):

root@kitploit:~
[email protected]

L'ACL lab_rcpt del laboratorio Docker accetta questo destinatario dell'inviluppo. Su un target SMTP generico, se RCPT TO viene rifiutato, la sequenza potrebbe non raggiungere il parser del corpo BDAT, quindi il template richiede un destinatario accettato.

Questo valore è distinto dall'intestazione To: nel corpo BDAT. Il destinatario RCPT TO è un indirizzo dell'inviluppo SMTP che deve superare i controlli sui destinatari del server. Il valore To: nel corpo BDAT è solo testo dell'intestazione del messaggio; non deve esistere né essere accettato come casella di posta dal server.

Percorso del Template

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

Nome del template:

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

Il template è scritto con metadata.verified: true e ha i tag code e intrusive.

Validazione Rapida

Esegui i seguenti comandi dalla directory POC_2026_45185/.

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

Valida la sintassi del template:

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

Firma il template code locale prima di eseguirlo:

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

Esegui contro il laboratorio vulnerabile:

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

Risultato atteso:

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

Esegui contro il laboratorio corretto:

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

Risultato atteso:

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

Nota che il protocollo nuclei code non viene eseguito di default, quindi -code è obbligatorio. Nuclei blocca anche i template code non firmati. Se la chiave privata nuclei locale è protetta da una passphrase, esegui il comando di firma in un terminale interattivo e inserisci la passphrase. Ripeti la firma dopo ogni modifica al template perché il digest copre il contenuto del template.

Esempi di Risultati Nuclei

Questi screenshot mostrano il risultato dell'oracolo di risposta del laboratorio locale dopo la firma del template. Sono una prova di validazione della differenza di risposta nella stessa sessione descritta sopra, non una dimostrazione diretta tramite debugger o ASAN della scrittura UAF interna.

Laboratorio vulnerabile Exim 4.99.2 GnuTLS su 127.0.0.1:2525:

Corrispondenza nuclei locale Exim 4.99.2 vulnerabile

Laboratorio corretto Exim 4.99.3 GnuTLS su 127.0.0.1:2526:

Mancata corrispondenza nuclei locale Exim 4.99.3 corretto

Perché il protocollo Code?

Il cuore di questa CVE non è un banner SMTP o un controllo di versione. Il template deve creare la seguente transizione di stato del trasporto sulla stessa connessione 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

Cosa Controlla Il Template

Il codice Python all'interno del template YAML stampa il marcatore fisso solo dopo che tutte le seguenti condizioni sono soddisfatte. Il matcher nuclei corrisponde solo a quel marcatore.

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"

Il template non corrisponde su nessuno dei seguenti segnali da soli:

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

Oracolo di Risposta

Entrambi i laboratori elaborano il messaggio BDAT diviso fino al primo completamento.

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

La differenza appare quando il comando SMTP in chiaro successivo viene inviato sulla stessa sessione SMTP.

4.99.2 vulnerabile:

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

4.99.3 corretto:

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

Interpretazione:

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.

Struttura del Payload

Il template usa il seguente messaggio di 70 byte come corpo BDAT.

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

Il destinatario dell'inviluppo SMTP viene passato separatamente tramite la variabile recipient del template. L'intestazione To: nel corpo è testo e non è correlata all'accettazione di RCPT TO da parte di SMTP, quindi non deve esistere né essere accettata dal server.

Struttura divisa:

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 Locale

Puoi verificare manualmente che entrambi i laboratori pubblicizzino 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

Segnali attesi:

root@kitploit:~
Exim
STARTTLS
CHUNKING

Puoi anche verificare il percorso STARTTLS normale:

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

Ambito e Sicurezza

  • Usalo solo contro il laboratorio Docker locale o target SMTP esplicitamente autorizzati.
  • Non eseguire scansioni né inviare il trigger a server Exim di terze parti.
  • Questo repository non fornisce una catena di exploit RCE, persistenza o post-exploitation.
  • Le immagini Docker predefinite sono build di debug, non build ASAN.
  • Il lavoro di follow-up con gdb/ASAN per la conferma del percorso di chiamata interno è tracciato separatamente in debugging/ e notes/source-walkthrough-progress.md.

Struttura del Repository

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

Riferimenti

  • Articolo XBOW: https://xbow.com/blog/dead-letter-cve-2026-45185-xbow-found-rce-exim
  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-45185
  • Advisory Exim: https://exim.org/static/doc/security/EXIM-Security-2026-05-01.1/EXIM-Security-2026-05-01.1.txt
  • Annuncio oss-security: https://www.openwall.com/lists/oss-security/2026/05/12/4
  • Patch upstream di Exim: https://code.exim.org/exim/exim/commit/040c1ce6889f435206677ed532c9a4185cf0bcaf