\n\n\n\n\n\n\n\n\n\n\n

flawopen.com/सिमुलेटर/हार्टब्लीड बफर ओवररीड

मेमोरी सुरक्षा / OpenSSL TLS

ओपनएसएसएल हार्टब्लीड बफर ओवररीड इंटरैक्टिव सिमुलेटर (CVE-2014-0160)

ब्राउज़र-आधारित इंटरैक्टिव मेमोरी मॉडल और पैकेट सिमुलेटर जो दर्शाता है कि अमान्य टीएलएस हार्टबीट लंबाई हेडर सर्वर हीप मेमोरी से संवेदनशील डेटा कैसे लीक करता है।

💡 सरल भाषा में व्याख्या (ELI5)

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

मुख्य अवधारणाएं और तकनीकी शब्द

TLS Heartbeat Extension
RFC 6520 कीप-अलाइव तंत्र जो बिना पुन: बातचीत के सक्रिय कनेक्शन की जांच करता है।
\n
Payload Length Field
हार्टबीट हेडर में 16-बिट पूर्णांक जो पेलोड के बाइट आकार की घोषणा करता है (65,535 बाइट तक)।
\n
Buffer Overread
मेमोरी सुरक्षा भेद्यता जहां सॉफ़्टवेयर बफर सीमा से आगे प्रोसेस मेमोरी को पढ़ लेता है।
\n
अनियंत्रित memcpy()
मेमोरी कॉपी ऑपरेशन जो इनपुट सीमा की पुष्टि किए बिना अनधिकृत मेमोरी कॉपी करता है।

चरण-दर-चरण हमला और निष्पादन प्रक्रिया

1

विकृत हार्टबीट अनुरोध भेजा गया

हमलावर केवल 1 बाइट ('A') का पेलोड भेजता है लेकिन लंबाई हेडर 65,535 बाइट (0xFFFF) घोषित करता है।

\n
2

पैकेट सीमा सत्यापन की अनुपस्थिति

OpenSSL n2s(p, payload) के जरिए लंबाई पढ़ता है लेकिन यह नहीं जांचता कि 1 + 2 + payload + 16 <= rrec.length है या नहीं।

\n
3

64KB उत्तर बफर आवंटन

सर्वर क्लाइंट के दावे पर भरोसा करके मेमोरी में पूरा 64KB बफर आरक्षित कर लेता है।

\n
4

मेमोरी ओवररीड और गुप्त डेटा चोरी

memcpy() कॉल 1-बाइट पैकेट के आगे बढ़कर सर्वर हीप से निजी कुंजियां और टोकन हमलावर को वापस भेज देता है।

सोर्स कोड तुलना: tls1_process_heartbeat() में सीमा सत्यापन

असुधारित भेद्यता: OPENSSL 1.0.1f में पेलोड सीमा जांच का अभाव
/* बिना सीमा जांच के सीधे पैकेट से 16-बिट लंबाई पढ़ें */
n2s(p, payload);
pl = p;

/* क्लाइंट द्वारा दावा किए गए आकार पर उत्तर बफर आवंटित करें */
buffer = OPENSSL_malloc(1 + 2 + payload + padding);
bp = buffer;

/* खामी: सर्वर हीप से 64KB तक निकटवर्ती मेमोरी को कॉपी कर देता है! */
memcpy(bp, pl, payload);
r = ssl3_write_bytes(s, TLS1_RT_HEARTBEAT, buffer, 3 + payload + padding);
सुरक्षित पैच: वास्तविक प्राप्त रिकॉर्ड लंबाई की सख्त जांच (RFC 6520)
/* पैकेट से 16-बिट लंबाई पढ़ें */
n2s(p, payload);
pl = p;

/* सुधार: जांचें कि दावा किया गया पेलोड वास्तविक प्राप्त रिकॉर्ड से अधिक न हो */
if (1 + 2 + payload + 16 > s->s3->rrec.length)
    return 0; /* विकृत पैकेट को चुपचाप त्याग दें */

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

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

← सभी सिमुलेटर CVE-2014-0160 हार्टब्लीड का पूरा विश्लेषण पढ़ें →