Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
POC_CVE-2026-45185 — POC_CVE-2026-45185 for nuclei-templates | Kitploit
Outils/GitHubGitHub/mj-bin/poc_cve-2026-45185
Vulnerability AnalysisExploitationFuzzingLearning & EducationEmail SecurityLabs & Practice
GitHubmj-bin/poc_cve-2026-45185

POC_CVE-2026-45185

POC_CVE-2026-45185 for nuclei-templates

Voir le dépôt
21il y a 3 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Laboratoire de validation du modèle Nuclei pour CVE-2026-45185

Ce dépôt n'est pas un dépôt de PoC d'exploit à usage général. Il s'agit d'un laboratoire de validation local permettant de reproduire et d'examiner le comportement d'un modèle CVE-2026-45185 destiné à être contribué à projectdiscovery/nuclei-templates.

root@kitploit:~
Le modèle de code nuclei n'est pas un détecteur basé uniquement sur la version.
Il contrôle directement STARTTLS, BDAT, TLS close_notify et un octet
SMTP en texte clair suivant sur la même connexion TCP.

Cette séquence correspond dans le laboratoire local vulnérable Exim 4.99.2 GnuTLS et ne
correspond pas dans le laboratoire corrigé Exim 4.99.3 GnuTLS dans les mêmes conditions.

Le signal de validation actuel est un oracle de réponse SMTP distant, pas une observation directe de l'écriture UAF elle-même. En interne, cette CVE est une use-after-free où des octets de saut de ligne (\r/\n) peuvent être écrits dans un tampon de transfert GnuTLS libéré après l'arrêt TLS. En pratique, un client ne peut pas observer directement cette écriture dans le tampon libéré via les réponses SMTP. Par conséquent, ce README et le modèle ne prétendent pas prouver directement l'écriture UAF bdat_ungetc -> tls_ungetc ou une RCE. À la place, le modèle détecte une différence de récupération de la pile/état de réception qui apparaît pendant le flux de déclenchement.

En traçant le mécanisme de la vulnérabilité, j'ai observé qu'après TLS close_notify pendant la gestion STARTTLS + BDAT, des pointeurs de fonction tls_* obsolètes peuvent rester dans la couche inférieure de la pile de réception BDAT au lieu d'être correctement restaurés en pointeurs de fonction smtp_*. Cet état devient visible dans la façon dont le serveur traite la prochaine commande SMTP. Après que le BDAT fractionné atteint sa première complétion, l'envoi de NOOP sur la même session fait que le laboratoire vulnérable Exim 4.99.2 GnuTLS renvoie 421 lost input connection, tandis que le laboratoire corrigé Exim 4.99.3 GnuTLS le gère normalement avec 250 OK. Cette différence claire de réponse vulnérable/corrigé est utilisée comme correspondance pour le modèle de code nuclei local et autorisé.

Pour une présentation plus détaillée du flux de la vulnérabilité, voir CVE-2026-45185-Technical-Analysis.md.

Matrice de validation

Destinataire d'enveloppe SMTP commun (RCPT TO) :

root@kitploit:~
[email protected]

L'ACL lab_rcpt du laboratoire Docker accepte ce destinataire d'enveloppe. Sur une cible SMTP générale, si RCPT TO est rejeté, la séquence peut ne pas atteindre l'analyseur de corps BDAT, donc le modèle a besoin d'un destinataire accepté.

Cette valeur est distincte de l'en-tête To: dans le corps BDAT. Le destinataire RCPT TO est une adresse d'enveloppe SMTP qui doit passer les vérifications de destinataire du serveur. La valeur To: dans le corps BDAT n'est qu'un texte d'en-tête de message ; elle n'a pas besoin d'exister ou d'être acceptée comme boîte aux lettres par le serveur.

Emplacement du modèle

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

Nom du modèle :

root@kitploit:~
Exim 4.97-4.99.2 GnuTLS STARTTLS BDAT - Vérification de réponse sur la même session

Le modèle est écrit avec metadata.verified: true et possède les balises code et intrusive.

Validation rapide

Exécutez les commandes suivantes depuis le répertoire POC_2026_45185/.

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

Validez la syntaxe du modèle :

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

Signez le modèle de code local avant de l'exécuter :

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

Exécutez contre le laboratoire vulnérable :

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

Résultat attendu :

root@kitploit:~
CVE-2026-45185 : oracle de réponse vulnérable correspondant

Exécutez contre le laboratoire corrigé :

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

Résultat attendu :

root@kitploit:~
pas de correspondance
NO-MATCH : réponse de type corrigé : NOOP a réussi après le déclenchement fractionné

Notez que le protocole code de nuclei n'est pas exécuté par défaut, donc -code est nécessaire. Nuclei bloque également les modèles code non signés. Si la clé privée locale de nuclei est protégée par une phrase de passe, exécutez la commande de signature dans un terminal interactif et saisissez cette phrase de passe. Re-signez après chaque modification du modèle car le digest couvre le contenu du modèle.

Exemples de résultats Nuclei

Ces captures d'écran montrent le résultat de l'oracle de réponse du laboratoire local après la signature du modèle. Elles constituent une preuve de validation de la différence de réponse sur la même session décrite ci-dessus, et non une preuve directe par débogueur ou ASAN de l'écriture UAF interne.

Laboratoire vulnérable Exim 4.99.2 GnuTLS sur 127.0.0.1:2525 :

Correspondance nuclei locale Exim 4.99.2 vulnérable

Laboratoire corrigé Exim 4.99.3 GnuTLS sur 127.0.0.1:2526 :

Pas de correspondance nuclei locale Exim 4.99.3 corrigé

Pourquoi le protocole Code ?

Le cœur de cette CVE n'est pas une bannière SMTP ou une vérification de version. Le modèle doit créer la transition d'état de transport suivante sur la même connexion TCP :

root@kitploit:~
SMTP en texte clair EHLO
-> STARTTLS
-> Poignée de main TLS sur la même connexion TCP
-> TLS EHLO / MAIL FROM / RCPT TO / BDAT 70 LAST
-> 69 premiers octets du corps BDAT en tant que données d'application TLS
-> TLS close_notify sans fermer la socket TCP
-> dernier octet du corps en texte clair sur la même connexion TCP
-> vérification de réponse NOOP en texte clair sur la même session

Ce que vérifie le modèle

Le code Python dans le modèle YAML imprime le marqueur fixe uniquement après que toutes les conditions suivantes sont remplies. Le dispositif de correspondance nuclei ne correspond qu'à ce marqueur.

root@kitploit:~
L'identité Exim est trouvée
ET STARTTLS est annoncé dans EHLO en texte clair
ET CHUNKING est annoncé dans EHLO en texte clair
ET STARTTLS est accepté
ET CHUNKING est annoncé dans EHLO TLS
ET MAIL FROM est accepté
ET RCPT TO est accepté
ET le BDAT fractionné close_notify atteint la première complétion
ET la première complétion contient "250 OK id="
ET la réponse NOOP en texte clair sur la même session contient "421"
ET la réponse NOOP en texte clair sur la même session contient "lost input connection"

Le modèle ne correspond sur aucun des signaux suivants seuls :

root@kitploit:~
version uniquement
timeout uniquement
perte de connexion uniquement
réponse vide uniquement
rejet du destinataire
annonce STARTTLS/CHUNKING uniquement

Oracle de réponse

Les deux laboratoires traitent le message BDAT fractionné jusqu'à la première complétion.

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

La différence apparaît lorsque la prochaine commande SMTP en texte clair est envoyée sur la même session SMTP.

Vulnérable 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

Corrigé 4.99.3 :

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

Interprétation :

root@kitploit:~
Observation :
  Les deux laboratoires atteignent la complétion du message BDAT fractionné.
  Seul le laboratoire vulnérable ne parvient pas à revenir proprement à la boucle
  de commande SMTP en texte clair suivante dans la même session.

Preuve :
  La réponse de suivi vulnérable est 421 lost input connection.
  La réponse de suivi corrigée est 250 OK ou 221 closing connection.

Inférence :
  Cette différence est cohérente avec la différence de récupération de la pile/état
  de réception après STARTTLS close_notify.

Forme de la charge utile

Le modèle utilise le message de 70 octets suivant comme corps BDAT.

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

Le destinataire de l'enveloppe SMTP est passé séparément via la variable de modèle recipient. L'en-tête To: dans le corps est du texte et n'est pas lié à l'acceptation de RCPT TO par SMTP, donc il n'a pas besoin d'exister ou d'être accepté par le serveur.

Forme fractionnée :

root@kitploit:~
BDAT 70 LAST
Corps TLS :   69 premiers octets, se terminant par "bod"
Événement TLS :  close_notify
Texte clair :  dernier octet "y"
Suivi :        NOOP

Vérification locale de cohérence

Vous pouvez vérifier manuellement que les deux laboratoires annoncent Exim, STARTTLS et 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

Signaux attendus :

root@kitploit:~
Exim
STARTTLS
CHUNKING

Vous pouvez également vérifier le chemin normal 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

Portée et sécurité

  • Utilisez ceci uniquement contre le laboratoire Docker local ou des cibles SMTP explicitement autorisées.
  • Ne scannez pas et n'envoyez pas le déclencheur à des serveurs Exim tiers.
  • Ce dépôt ne fournit pas de chaîne d'exploitation RCE, de persistance ou de post-exploitation.
  • Les images Docker par défaut sont des versions de débogage, pas des versions ASAN.
  • Le travail de suivi avec gdb/ASAN pour la confirmation des chemins d'appel internes est suivi séparément sous debugging/ et notes/source-walkthrough-progress.md.

Structure du dépôt

root@kitploit:~
POC_2026_45185/
  compose.yaml
  images/            captures d'écran de validation nuclei locales
  vulnerable/        Exim 4.99.2 + GnuTLS version de débogage
  patched/           Exim 4.99.3 + GnuTLS version de débogage
  nuclei-templates/  sous-module : espace de travail local des modèles nuclei

Références

  • Article XBOW : https://xbow.com/blog/dead-letter-cve-2026-45185-xbow-found-rce-exim
  • NVD : https://nvd.nist.gov/vuln/detail/CVE-2026-45185
  • Avis Exim : https://exim.org/static/doc/security/EXIM-Security-2026-05-01.1/EXIM-Security-2026-05-01.1.txt
  • Annonce oss-security : https://www.openwall.com/lists/oss-security/2026/05/12/4
  • Patch Exim en amont : https://code.exim.org/exim/exim/commit/040c1ce6889f435206677ed532c9a4185cf0bcaf
Télécharger l’outil
CibleVersionBackend TLSSTARTTLSCHUNKINGPortRésultat nuclei attendu
vulnérableExim 4.99.2GnuTLSouioui127.0.0.1:2525correspond
corrigéExim 4.99.3GnuTLSouioui127.0.0.1:2526pas de correspondance