flawopen.com/Teardowns/cve-2014-0160-heartbleed

● CVE-2014-0160 · CVSS 9.8 · Kritisch
Sicherheitsforschung · FlawOpen

CVE-2014-0160: OpenSSL Heartbleed Buffer Overread

Detaillierte Zeile-für-Zeile-Patch-Analyse von CVE-2014-0160 (Heartbleed): Die fehlende Grenzprüfung in tls1_process_heartbeat von OpenSSL, die 64 KB Speicher pro Anfrage offenlegte.

💡 Einfache Erklärung (ELI5)

Stellen Sie sich vor, Sie schicken einem trainierten Papagei ein 4-Buchstaben-Wort 'BIRD' und sagen: 'Wiederhole mein 4-Buchstaben-Wort, aber mache deine Antwort 64.000 Buchstaben lang'. Der Papagei krächzt 'BIRD' und plappert sofort die nächsten 63.996 Buchstaben aus seinem Kurzzeitgedächtnis heraus – einschließlich geheimer Passwörter, privater Schlüssel und Bankdaten anderer Besucher. Bei Heartbleed vertraute OpenSSL der vom Client behaupteten Nachrichtenlänge, ohne die tatsächliche Paketgröße zu prüfen, und kopierte rohen Serverspeicher direkt zurück zum Angreifer.

Kernkonzepte & Begriffe

Open Source Systems
Kernkomponente der Architektur, die von CWE-Security betroffen ist.
CWE-Security
Standardmäßige Common Weakness Enumeration (CWE)-Klassifizierung für cve-2014-0160-heartbleed.
Defense-in-Depth
Mehrschichtige technische Verifikation und Laufzeit-Grenzenisolation.

Ursachenanalyse

Die Grundursache liegt in nicht validierten Grenzparametern in Open-Source-Systemen, die eine Zustandsdesynchronisation und die Umgehung von Sicherheitskontrollen ermöglichen.

Schritt-für-Schritt Angriffsablauf

Step 1

Malformed Heartbeat Request

Attacker connects to a TLS server and sends a Heartbeat Request containing a 1-byte payload ('A').

Step 2

Length Header Manipulation

Attacker sets the length field to the maximum possible value: 0xFFFF (65,535 bytes).

Step 3

Unbounded Heap Buffer Allocation

The server allocates a 64KB response buffer based on the client's claimed size and calls memcpy().

Step 4

Adjacent Memory Exfiltration

The memory copy overreads past the end of the packet, dumping private SSL keys, user passwords, and active session tokens.

Quellcode: Verwundbar vs. Sicher

✕ VERWUNDBARE IMPLEMENTIERUNG
/* Read 16-bit length directly from client packet without bounds check */
n2s(p, payload);
pl = p;

/* Allocate reply buffer based on client's claimed size */
buffer = OPENSSL_malloc(1 + 2 + payload + padding);
bp = buffer;

/* BUG: Copies up to 64KB of adjacent server heap memory! */
memcpy(bp, pl, payload);
r = ssl3_write_bytes(s, TLS1_RT_HEARTBEAT, buffer, 3 + payload + padding);
✓ GEHÄRTETER SICHERHEITS-PATCH
/* Read 16-bit length from packet */
n2s(p, payload);
pl = p;

/* FIX: Validate that claimed payload does not exceed actual received record length */
if (1 + 2 + payload + 16 > s->s3->rrec.length)
    return 0; /* Silently discard malformed heartbeat */

buffer = OPENSSL_malloc(1 + 2 + payload + padding);
bp = buffer;
memcpy(bp, pl, payload);

Checkliste für Engineering & Systemsicherheit