CVE-2021-41117
असुरक्षित यादृच्छिक संख्या उत्पादन
- प्रकाशित
- 11 अक्टू॰ 2021
- अद्यतन
- 4 अग॰ 2024
- सीएनए असाइन करना
- GitHub_M
- साक्ष्य देखे गए
- 8 अग॰ 2026
प्राथमिक सीवीएसएस
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:Nकम · अगले 30 दिन
- प्रतिशत
- 87.1%
- मॉडल दिनांक
- 21 सित॰ 2026
ईपीएसएस एक सांख्यिकीय अनुमान है, कोई निश्चितता या प्रभाव का माप नहीं। इसे सीवीएसएस, केईवी स्थिति, एक्सपोज़र और अपने वातावरण के साथ मिलाएं।
सारांश
keypair एक RSA PEM कुंजी जनरेटर है जो javascript में लिखा गया है। keypair बहुत सारे क्रिप्टोग्राफ़िक प्राइमिटिव को स्वयं या जहाँ संभव हो अन्य लाइब्रेरीज़ से उधार लेकर लागू करता है, जिसमें node-forge भी शामिल है। एक समस्या खोजी गई थी जिसमें यह लाइब्रेरी SSH में उपयोग होने वाली समान RSA कुंजियाँ उत्पन्न कर रही थी। इसका मतलब होगा कि लाइब्रेरी समान P, Q (और इस प्रकार N) मान उत्पन्न कर रही है, जो व्यावहारिक रूप से RSA-2048 कुंजियों के साथ असंभव है। बार-बार समान मान उत्पन्न करना आमतौर पर खराब रैंडम नंबर जनरेशन, या CSPRNG आउटपुट के खराब प्रबंधन की समस्या को इंगित करता है। समस्या 1: खराब रैंडम नंबर जनरेशन (`GHSL-2021-1012`)। लाइब्रेरी पूरी तरह से प्लेटफ़ॉर्म द्वारा प्रदान किए गए CSPRNG पर निर्भर नहीं करती है, बल्कि यह अपना स्वयं का काउंटर-आधारित CMAC दृष्टिकोण उपयोग करती है। गलती उस जगह होती है जहाँ `defaultSeedFile` फ़ंक्शन में CMAC इम्प्लीमेंटेशन को "वास्तविक" रैंडम डेटा से सीड किया जाता है। AES-CMAC जनरेटर को सीड करने के लिए, लाइब्रेरी JavaScript निष्पादन वातावरण के आधार पर दो अलग-अलग दृष्टिकोण अपनाएगी। ब्राउज़र में, लाइब्रेरी [`window.crypto.getRandomValues()`](https://github.com/juliangruber/keypair/blob/87c62f255baa12c1ec4f98a91600f82af80be6db/index.js#L971) का उपयोग करेगी। हालाँकि, nodeJS निष्पादन वातावरण में, `window` ऑब्जेक्ट परिभाषित नहीं है, इसलिए यह एक बहुत कम सुरक्षित समाधान की ओर जाता है, जिसमें भी एक बग है। ऐसा लगता है कि लाइब्रेरी संभव होने पर नोड के CSPRNG का उपयोग करने की कोशिश करती है, दुर्भाग्य से, ऐसा प्रतीत होता है कि `crypto` ऑब्जेक्ट null है क्योंकि एक वेरिएबल उसी नाम से घोषित किया गया था और उसे `null` पर सेट किया गया था। इसलिए नोड CSPRNG पथ कभी नहीं लिया जाता। हालाँकि, जब `window.crypto.getRandomValues()` उपलब्ध नहीं होता है, तो CMAC काउंटर को सीड करने के लिए एक Lehmer LCG रैंडम नंबर जनरेटर उपयोग किया जाता है, और LCG को `Math.random` के साथ सीड किया जाता है। हालाँकि यह खराब है और संभवतः अपने आप में एक सुरक्षा बग के रूप में योग्य है, यह डुप्लिकेट कुंजियों के अत्यधिक लगातार उत्पन्न होने की व्याख्या नहीं करता है। मुख्य दोष: Lehmer LCG का आउटपुट गलत तरीके से एन्कोड किया गया है। दोष वाली विशिष्ट [पंक्ति][https://github.com/juliangruber/keypair/blob/87c62f255baa12c1ec4f98a91600f82af80be6db/index.js#L1008] है: `b.putByte(String.fromCharCode(next & 0xFF))` `putByte` की [परिभाषा](https://github.com/juliangruber/keypair/blob/87c62f255baa12c1ec4f98a91600f82af80be6db/index.js#L350-L352) है `util.ByteBuffer.prototype.putByte = function(b) {this.data += String.fromCharCode(b);};`. सरलीकृत रूप में, यह `String.fromCharCode(String.fromCharCode(next & 0xFF))` है। दोहरा `String.fromCharCode` लगभग निश्चित रूप से अनजाने में हुआ है और यह कमजोर सीडिंग का स्रोत है। दुर्भाग्य से, इससे त्रुटि उत्पन्न नहीं होती है। बल्कि, इसके परिणामस्वरूप अधिकांश बफर में शून्य होते हैं। चूँकि हम 0xFF के साथ मास्किंग कर रहे हैं, हम निर्धारित कर सकते हैं कि LCG का 97% आउटपुट शून्य में परिवर्तित हो जाता है। केवल वे आउटपुट जो अर्थपूर्ण मान देते हैं, वे आउटपुट 48 से 57, समावेशी हैं। प्रभाव यह है कि RNG सीड के प्रत्येक बाइट में गलत रूपांतरण के कारण 97% संभावना है कि वह 0 है। जब ऐसा नहीं होता है, तो बाइट 0 से 9 होते हैं। संक्षेप में, तीन तत्काल चिंताएँ हैं: 1. लाइब्रेरी के पास एक असुरक्षित रैंडम नंबर फ़ॉलबैक पथ है। आदर्श रूप से लाइब्रेरी को LCG और `Math.random` का उपयोग करने का प्रयास करने के बजाय एक मजबूत CSPRNG की आवश्यकता होनी चाहिए। 2. NodeJS में चलने पर लाइब्रेरी एक मजबूत रैंडम नंबर जनरेटर का सही ढंग से उपयोग नहीं करती है, भले ही एक मजबूत CSPRNG उपलब्ध हो। 3. फ़ॉलबैक पथ के इम्प्लीमेंटेशन में एक समस्या है जहाँ अधिकांश सीड डेटा प्रभावी रूप से शून्य हो जाएगा। खराब रैंडम नंबर जनरेशन के कारण, keypair RSA कुंजियाँ उत्पन्न करता है जिनका अनुमान लगाना अपेक्षाकृत आसान है। यह किसी हमलावर को गोपनीय संदेशों को डिक्रिप्ट करने या पीड़ित के खाते तक अधिकृत पहुंच प्राप्त करने में सक्षम बना सकता है।
जिम्मेदारीपूर्ण उपयोग
भेद्यता जानकारी का उपयोग केवल उन प्रणालियों पर करें जिनके मालिक आप हैं या परीक्षण के लिए अधिकृत हैं। किटप्लॉइट सार्वजनिक अनुसंधान मेटाडेटा से लिंक करता है और शोषण कोड या दुर्भावनापूर्ण पेलोड को संग्रहीत नहीं करता है।