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

● CVE-2014-0160 · CVSS 9.8 · अति गंभीर
सुरक्षा अनुसंधान · FlawOpen

तकनीकी विश्लेषण: CVE-2014-0160: OpenSSL Heartbleed Buffer Overread

CVE-2014-0160 (Heartbleed) का पंक्ति-दर-पंक्ति तकनीकी पैच विश्लेषण: OpenSSL के tls1_process_heartbeat में गायब सीमा जांच जिसने प्रति अनुरोध 64KB सर्वर मेमोरी उजागर कर दी थी।

💡 आसान भाषा में (ELI5)

कल्पना कीजिए कि आप एक प्रशिक्षित तोते को 4 अक्षरों का शब्द 'BIRD' भेजते हैं और कहते हैं: 'मेरे इस शब्द को दोहराओ, लेकिन अपने जवाब को 64,000 अक्षरों जितना लंबा बनाओ।' तोता 'BIRD' बोलता है और तुरंत अपनी हालिया याददाश्त में जमा अगले 63,996 अक्षरों को बड़बड़ाना शुरू कर देता है—जिसमें अन्य आगंतुकों द्वारा बोले गए गुप्त पासवर्ड, निजी चाबियां (private keys) और बैंक खाते शामिल हैं। Heartbleed में, OpenSSL ने पैकेट के वास्तविक आकार की जांच किए बिना क्लाइंट द्वारा बताए गए संदेश आकार पर भरोसा कर लिया, जिससे सर्वर की संवेदनशील मेमोरी सीधे हमलावर के पास लीक हो गई।

इस पेज के मुख्य शब्द

Open Source Systems
सुरक्षा अवधारणा (Open Source Systems): Core architecture component affected by CWE-Security.
CWE-Security
सुरक्षा अवधारणा (CWE-Security): Standard Common Weakness Enumeration classification for cve-2014-0160-heartbleed.
Defense-in-Depth
सुरक्षा अवधारणा (Defense-in-Depth): Multi-layered engineering verification and runtime boundary isolation.

मूल कारण विश्लेषण (Root Cause)

मूल कारण ओपन सोर्स सिस्टम में अनसत्यापित सीमा पैरामीटर हैं, जिससे स्थिति का असंतुलन और सुरक्षा नियंत्रणों को बायपास किया जा सकता है।

हमले का चरण-दर-चरण प्रवाह

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.

सोर्स कोड: कमज़ोर बनाम सुरक्षित कार्यान्वयन

✕ कमज़ोर कार्यान्वयन
/* 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);
✓ सुरक्षित और सुदृढ़ फ़िक्स
/* 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);

इंजीनियरिंग और सिस्टम सुरक्षा चेकलिस्ट