
CVE-2023-32784 के लिए मूल PoC
यह भेद्यता CVE-2023-32784 को सौंपी गई थी और इसे KeePass 2.54 में ठीक कर दिया गया है। त्वरित प्रतिक्रिया और रचनात्मक समाधान के लिए Dominik Reichl को फिर से धन्यवाद!
स्पष्टीकरण: पासवर्ड को कीबोर्ड पर टाइप किया जाना चाहिए, क्लिपबोर्ड से कॉपी नहीं किया जाना चाहिए (अनुभाग "यह कैसे काम करता है" देखें)।
सबसे पहले, KeePass 2.54 या उससे नए संस्करण में अपडेट करें।
दूसरा, यदि आप लंबे समय से KeePass का उपयोग कर रहे हैं, तो आपका मास्टर पासवर्ड (और संभावित रूप से अन्य पासवर्ड) आपकी pagefile/swapfile, hibernation फ़ाइल और क्रैश डंप में मौजूद हो सकता है। अपनी पैरानोया के स्तर के आधार पर, आप समस्या हल करने के लिए इन चरणों पर विचार कर सकते हैं:
C:\Windows\memory.dmp, लेकिन शायद अन्य भी हों)/w के साथ Cipher)या फिर अपनी HDD को ओवरराइट कर दें और अपने OS की नई इंस्टॉलेशन कर लें।
प्रभावित नहीं होने वाले उत्पादों की अधूरी सूची (कृपया और जोड़ने के लिए pull request या issue बनाएं)। सामान्य नियम यह है कि यदि यह .NET में लिखा गया मूल KeePass 2.X ऐप नहीं है, तो संभवतः यह प्रभावित नहीं है।
KeePass Master Password Dumper एक सरल proof-of-concept उपकरण है जिसका उपयोग KeePass की मेमोरी से मास्टर पासवर्ड निकालने के लिए किया जाता है। पहले पासवर्ड अक्षर को छोड़कर, यह अधिकतर पासवर्ड को सादे पाठ (plaintext) में पुनर्प्राप्त करने में सक्षम है। लक्ष्य सिस्टम पर कोई कोड निष्पादन आवश्यक नहीं है, केवल मेमोरी डंप चाहिए। इससे कोई फर्क नहीं पड़ता कि मेमोरी कहाँ से आती है - यह प्रोसेस डंप, स्वैप फ़ाइल (pagefile.sys), hibernation फ़ाइल (hiberfil.sys), विभिन्न क्रैश डंप या पूरे सिस्टम की RAM डंप हो सकती है। इससे कोई फर्क नहीं पड़ता कि workspace लॉक है या नहीं। KeePass के बंद होने के बाद भी RAM से पासवर्ड निकालना संभव है, हालाँकि उसके काम करने की संभावना तब से बीते समय के साथ घटती जाती है।
KeePass 2.53.1 को Windows (English) पर और KeePass 2.47 को Debian (keepass2 पैकेज) पर परीक्षण किया गया है। यह macOS संस्करण के लिए भी काम करना चाहिए। दुर्भाग्य से, Enter master key on secure desktop विकल्प सक्षम करने से हमले को रोकने में मदद नहीं मिलती। PoC को KeePass के पुराने संस्करणों द्वारा बनाए गए डेटाबेस के साथ समस्या हो सकती है, लेकिन मैं इसे दोहरा नहीं पाया (देखें issue #4)।
इस खोज की पुष्टि KeePass के लेखक Dominik Reichl ने यहाँ की। Dominik की त्वरित प्रतिक्रिया की सराहना करता हूँ। उम्मीद है कि इसे जल्द ही ठीक कर दिया जाएगा!
git clone https://github.com/vdohney/keepass-password-dumper या GitHub से डाउनलोड करेंcd keepass-password-dumperdotnet run PATH_TO_DUMPWindows पर इसका परीक्षण करने का सबसे आसान तरीका है टास्क मैनेजर में KeePass प्रोसेस पर राइट-क्लिक करके "Create dump file" चुनकर प्रोसेस डंप बनाना।

dotnet run PATH_TO_DUMP PATH_TO_PWDLIST जोड़ सकते हैं।यह आपके थ्रेट मॉडल पर निर्भर करता है। यदि आपका कंप्यूटर पहले से ही मैलवेयर से संक्रमित है जो आपके उपयोगकर्ता के विशेषाधिकारों के साथ पृष्ठभूमि में चल रहा है, तो यह खोज आपकी स्थिति को अधिक खराब नहीं करती है। हालाँकि, मैलवेयर के लिए चुपके से काम करना और एंटीवायरस से बचना आसान हो सकता है, क्योंकि KeeTheft या KeeFarce के विपरीत, किसी प्रोसेस इंजेक्शन या अन्य प्रकार के कोड निष्पादन की आवश्यकता नहीं होती है।
यदि आपको उचित संदेह है कि कोई आपके कंप्यूटर तक पहुँच प्राप्त कर सकता है और फोरेंसिक विश्लेषण कर सकता है, तो यह बुरा हो सकता है। सबसे खराब स्थिति यह है कि मास्टर पासवर्ड पुनर्प्राप्त कर लिया जाएगा, भले ही KeePass लॉक हो या बिल्कुल नहीं चल रहा हो।
यदि आप मजबूत पासवर्ड के साथ full disk encryption का उपयोग करते हैं और आपका सिस्टम साफ है, तो आपको ठीक रहना चाहिए। अकेले इस खोज से कोई भी इंटरनेट के माध्यम से दूरस्थ रूप से आपके पासवर्ड चुरा नहीं सकता।
KeePass 2.X पासवर्ड प्रविष्टि के लिए एक कस्टम-विकसित टेक्स्ट बॉक्स SecureTextBoxEx का उपयोग करता है। यह टेक्स्ट बॉक्स न केवल मास्टर पासवर्ड प्रविष्टि के लिए उपयोग किया जाता है, बल्कि KeePass में अन्य स्थानों पर भी, जैसे पासवर्ड संपादन बॉक्स (इसलिए हमले का उपयोग उनकी सामग्री को पुनर्प्राप्त करने के लिए भी किया जा सकता है)।
यहाँ जिस दोष का फायदा उठाया गया है वह यह है कि प्रत्येक टाइप किए गए अक्षर के लिए, मेमोरी में एक अवशिष्ट स्ट्रिंग बनाई जाती है। .NET के काम करने के तरीके के कारण, एक बार बन जाने पर इसे हटाना लगभग असंभव है। उदाहरण के लिए, जब "Password" टाइप किया जाता है, तो ये अवशिष्ट स्ट्रिंग बनेंगी: •a, ••s, •••s, ••••w, •••••o, ••••••r, •••••••d। POC एप्लिकेशन डंप में इन पैटर्नों की खोज करता है और पासवर्ड में प्रत्येक स्थिति के लिए एक संभावित पासवर्ड अक्षर प्रदान करता है।
इस हमले की विश्वसनीयता इस बात पर निर्भर करती है कि पासवर्ड कैसे टाइप किया गया था और प्रति सत्र कितने पासवर्ड टाइप किए गए थे। हालाँकि, मैंने पाया है कि भले ही प्रति सत्र कई पासवर्ड या टाइपो हों, .NET CLR इन स्ट्रिंग्स को जिस तरह आवंटित करता है, उसका मतलब है कि वे मेमोरी में अच्छी तरह से क्रमबद्ध होने की संभावना रखते हैं। इसलिए यदि तीन अलग-अलग पासवर्ड टाइप किए गए थे, तो आपको उस क्रम में प्रत्येक वर्ण स्थिति के लिए तीन उम्मीदवार मिलने की संभावना है, जिससे तीनों पासवर्ड पुनर्प्राप्त करना संभव हो जाता है।
यह एक त्वरित POC है, इसलिए संभवतः बहुत विश्वसनीय और मजबूत नहीं है। यदि आपको कोई समस्या मिले और उसे ठीक करें, तो कृपया pull request बनाएं।
अनुमत पासवर्ड वर्ण वर्तमान में इस प्रकार हार्डकोडेड हैं: ^[\x20-\x7E]+$ (सभी प्रिंट करने योग्य ASCII वर्ण और स्पेस)।
पासवर्ड सूची को स्वतः-जनरेट करने की संभावना जोड़ने के लिए adridlug को धन्यवाद, और कोड को रीफैक्टर करने के लिए ynuwenhof को धन्यवाद।
मैंने अभी तक उनमें से किसी की जाँच नहीं की है।