Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
POC_CVE-2026-45185 — POC_CVE-2026-45185 für nuclei-templates | Kitploit
Tools/GitHubGitHub/mj-bin/poc_cve-2026-45185
SchwachstellenanalyseExploitationFuzzingLernen & BildungE-Mail-SicherheitLabs & Praxis
GitHubmj-bin/poc_cve-2026-45185

POC_CVE-2026-45185

POC_CVE-2026-45185 für nuclei-templates

Repository anzeigen
214vor 3 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-45185 Nuclei-Vorlagen-Validierungslabor

Dieses Repository ist kein Allzweck-Exploit-PoC-Repository. Es ist ein lokales Validierungslabor zur Reproduktion und Überprüfung des Verhaltens einer CVE-2026-45185-Vorlage, die für einen Beitrag zu projectdiscovery/nuclei-templates vorgesehen ist.

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.

Das aktuelle Validierungssignal ist ein entfernter SMTP-Antwort-Orakel, keine direkte Beobachtung des UAF-Schreibens selbst. Intern handelt es sich bei dieser CVE um einen Use-After-Free, bei dem Newline-Bytes (\r/\n) nach dem TLS-Shutdown in einen freigegebenen GnuTLS-Transfer-Puffer geschrieben werden können. In der Praxis kann ein Client dieses Schreiben in den freigegebenen Puffer nicht realistisch direkt über SMTP-Antworten beobachten. Daher beanspruchen dieses README und die Vorlage nicht, den UAF-Schreibvorgang bdat_ungetc -> tls_ungetc oder RCE direkt zu beweisen. Stattdessen erkennt die Vorlage einen Unterschied in der Empfangsstapel-/Zustandswiederherstellung, der während des Triggerablaufs auftritt.

Tool herunterladen

Während der Nachverfolgung des Schwachstellenmechanismus habe ich beobachtet, dass nach TLS close_notify während der STARTTLS+BDAT-Verarbeitung veraltete tls_*-Funktionszeiger in der unteren Schicht des BDAT-Empfangsstapels verbleiben können, anstatt ordnungsgemäß auf smtp_*-Funktionszeiger zurückgesetzt zu werden. Dieser Zustand wird sichtbar, wie der Server den nächsten SMTP-Befehl behandelt. Nachdem das geteilte BDAT den ersten Abschluss erreicht hat, führt das Senden von NOOP in derselben Sitzung dazu, dass das anfällige Exim 4.99.2 GnuTLS-Labor 421 lost input connection zurückgibt, während das gepatchte Exim 4.99.3 GnuTLS-Labor es normal mit 250 OK behandelt. Dieser deutliche Unterschied zwischen anfälliger und gepatchter Antwort wird als Matcher für die lokale, autorisierte Nuclei-Code-Vorlage verwendet.

Für eine detailliertere Schritt-für-Schritt-Erklärung des Schwachstellenablaufs siehe CVE-2026-45185-Technical-Analysis.md.

Validierungsmatrix

ZielVersionTLS-BackendSTARTTLSCHUNKINGPortErwartetes Nuclei-Ergebnis
anfälligExim 4.99.2GnuTLSjaja127.0.0.1:2525Treffer
gepatchtExim 4.99.3GnuTLSjaja127.0.0.1:2526kein Treffer

Allgemeiner SMTP-Umschlagempfänger (RCPT TO):

root@kitploit:~
[email protected]

Die lab_rcpt-ACL des Docker-Labors akzeptiert diesen Umschlagempfänger. Bei einem allgemeinen SMTP-Ziel, wenn RCPT TO abgelehnt wird, erreicht die Sequenz möglicherweise nicht den BDAT-Body-Parser, daher benötigt die Vorlage einen akzeptierten Empfänger.

Dieser Wert unterscheidet sich vom To:-Header innerhalb des BDAT-Bodys. Der RCPT TO-Empfänger ist eine SMTP-Umschlagadresse, die die Empfängerprüfungen des Servers bestehen muss. Der To:-Wert im BDAT-Body ist nur Nachrichtenkopftext; er muss nicht existieren oder vom Server als Mailbox akzeptiert werden.

Vorlagenort

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

Vorlagenname:

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

Die Vorlage ist mit metadata.verified: true geschrieben und hat die Tags code und intrusive.

Schnelle Validierung

Führen Sie die folgenden Befehle aus dem Verzeichnis POC_2026_45185/ aus.

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

Validieren Sie die Vorlagensyntax:

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

Signieren Sie die lokale Code-Vorlage vor dem Ausführen:

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

Ausführen gegen das anfällige Labor:

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

Erwartetes Ergebnis:

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

Ausführen gegen das gepatchte Labor:

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

Erwartetes Ergebnis:

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

Beachten Sie, dass das code-Protokoll von Nuclei standardmäßig nicht ausgeführt wird, daher ist -code erforderlich. Nuclei blockiert auch unsignierte code-Vorlagen. Wenn der lokale private Nuclei-Schlüssel mit einer Passphrase geschützt ist, führen Sie den Signierbefehl in einem interaktiven Terminal aus und geben Sie diese Passphrase ein. Signieren Sie nach jeder Vorlagenänderung neu, da der Digest den Vorlageninhalt abdeckt.

Beispielhafte Nuclei-Ergebnisse

Diese Screenshots zeigen das lokale Labor-Antwort-Orakel-Ergebnis, nachdem die Vorlage signiert wurde. Sie sind Validierungsnachweise für den oben beschriebenen Unterschied in der Antwort derselben Sitzung, kein direkter Debugger- oder ASAN-Nachweis des internen UAF-Schreibvorgangs.

Anfälliges Exim 4.99.2 GnuTLS-Labor auf 127.0.0.1:2525:

Anfälliges Exim 4.99.2 lokales Nuclei-Treffer

Gepatchtes Exim 4.99.3 GnuTLS-Labor auf 127.0.0.1:2526:

Gepatchtes Exim 4.99.3 lokales Nuclei-kein-Treffer

Warum das Code-Protokoll?

Der Kern dieser CVE ist kein SMTP-Banner- oder Versionscheck. Die Vorlage muss den folgenden Transportzustandsübergang auf derselben TCP-Verbindung erzeugen:

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

Was die Vorlage prüft

Der Python-Code innerhalb der YAML-Vorlage gibt den festgelegten Marker nur aus, wenn alle folgenden Bedingungen erfüllt sind. Der Nuclei-Matcher erkennt nur diesen Marker.

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"

Die Vorlage erkennt nicht auf eines der folgenden Signale allein:

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

Antwort-Orakel

Beide Labore verarbeiten die geteilte BDAT-Nachricht bis zum ersten Abschluss.

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

Der Unterschied tritt auf, wenn der nächste SMTP-Klartextbefehl in derselben SMTP-Sitzung gesendet wird.

Anfälliges 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

Gepatchtes 4.99.3:

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

Interpretation:

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.

Payload-Form

Die Vorlage verwendet die folgende 70-Byte-Nachricht als BDAT-Body.

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

Der SMTP-Umschlagempfänger wird separat über die Vorlagenvariable recipient übergeben. Der To:-Header im Body ist Text und hat nichts damit zu tun, ob SMTP RCPT TO akzeptiert wird, daher muss er nicht existieren oder vom Server akzeptiert werden.

Geteilte Form:

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

Lokaler Plausibilitätscheck

Sie können manuell überprüfen, dass beide Labore Exim, STARTTLS und CHUNKING anzeigen.

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

Erwartete Signale:

root@kitploit:~
Exim
STARTTLS
CHUNKING

Sie können auch den normalen STARTTLS-Pfad prüfen:

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

Umfang und Sicherheit

  • Verwenden Sie dies nur gegen das lokale Docker-Labor oder explizit autorisierte SMTP-Ziele.
  • Scannen oder senden Sie den Trigger nicht an Exim-Server Dritter.
  • Dieses Repository stellt keine RCE-Exploit-Kette, Persistenz oder Post-Exploitation bereit.
  • Die standardmäßigen Docker-Images sind Debug-Builds, keine ASAN-Builds.
  • Weitere gdb/ASAN-Arbeiten zur internen Aufrufpfadbestätigung werden separat unter debugging/ und notes/source-walkthrough-progress.md verfolgt.

Repository-Struktur

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

Referenzen

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