
KeePass 2.X dumper (CVE-2023-32784)
यह CVE-2023-32784 के लिए मेरा PoC कार्यान्वयन है।
मेरा संस्करण @vdohney के PoC का एक पायथन पोर्ट है, जिसमें कुछ बदलाव और अतिरिक्त सुविधाएँ हैं।
एक बदलाव डंप फ़ाइल में पाए जाने वाले ज्ञात स्ट्रिंग्स का उपयोग करना था ताकि मास्टरकी वर्णों के स्थान पर अधिक सटीक रूप से जाया जा सके। इसके परिणामस्वरूप कम गलत सकारात्मक वर्ण होते हैं और फ़ाइल को स्कैन करने में लगने वाले समय में काफी कमी आती है। यदि डंप फ़ाइल में स्ट्रिंग्स नहीं मिलती हैं, तो स्कैन शुरू से शुरू होगा। यह विकल्प डिफ़ॉल्ट रूप से सक्षम है, लेकिन यदि आप इसके बजाय पूर्ण स्कैन करना चाहते हैं, तो आप --full-scan का उपयोग कर सकते हैं। इन उदाहरणों के लिए, मैंने स्कैन को गति देने में मदद के लिए एक --skip फ्लैग भी जोड़ा है। यह पॉइंटर को ऑफसेट करके अगले 1000 बाइट्स पर कूदने के लिए किया जाता है, क्योंकि उनमें आमतौर पर एक ही वर्ण बार-बार दोहराया जाता है। उदाहरण के लिए, यदि डंप फ़ाइल में वर्ण ●e पाया गया, तो यह इस प्रकार दिखाई देगा:
●e
●e
●e
●e
●e
●e
●e
●e
●e
●e
●●c
--skip फ्लैग का उपयोग करके, इन दोहराए गए बाइट्स पर कूदना संभव है ताकि स्कैन को गति दी जा सके, हालांकि जंप पॉइंट्स का उपयोग करते समय यह आवश्यक नहीं है।
[*] 15567777 | Found: ●e
[*] 15568797 | Found: ●e
[*] 15570355 | Found: ●●c
[*] 15571375 | Found: ●●c
[*] 15572925 | Found: ●●●r
[*] 15573973 | Found: ●●●r

इस संस्करण में एक पुनर्प्राप्ति कार्यक्षमता शामिल है जो कुंजी के लिए शेष अज्ञात वर्णों को खोजने का प्रयास करती है। यह डंप के अंदर पाए गए वर्णों के विभिन्न संभावित संयोजनों का पता लगाने का प्रयास करके किया जाता है; यदि कोई मिलान मिलता है, तो शेष वर्णों को डंप से तब तक खींचा जाता है जब तक कि अगला गैर-ASCII वर्ण न मिल जाए।
यह तब काम करता है जब पूर्ण प्लेनटेक्स्ट पासवर्ड डंप फ़ाइल में संग्रहीत होता है (ऐसा तब होता है जब उपयोगकर्ता तारांकन का उपयोग करके छिपाने को निष्क्रिय करके मास्टरकी प्रदर्शित करता है)।
आप --recover फ्लैग का उपयोग करके इस व्यवहार को सक्षम कर सकते हैं।

आप -o का उपयोग करके एक आउटपुट फ़ाइल भी निर्दिष्ट कर सकते हैं ताकि पाए गए विभिन्न संयोजनों को निर्यात किया जा सके। यहाँ आप देख सकते हैं, भले ही डंप में किसी अन्य मास्टरकी के वर्ण मिले हों, और प्लेनटेक्स्ट पासवर्ड डंप में संग्रहीत नहीं था, कॉम्बो सूची में फिर भी हम नीचे पाए गए अंतिम संयोजन में कुंजी के 23/24 वर्ण प्राप्त करने में सक्षम हैं।

इस मामले में, पहली प्रविष्टि वास्तव में दूसरी कुंजी ducks के लिए 4/5 वर्ण भी दिखाती है, जो डंप के अंदर भी थी, हालांकि यह दूसरी कुंजी के वर्णों के साथ जुड़कर ucks|tMasterPassword123! उत्पन्न करती है। इसके लिए संभावित रूप से एक समाधान है, हालांकि यह अभी भी WIP है।
मैंने -w के साथ एक वर्डलिस्ट प्रदान करके डंपफ़ाइल के अंदर संभावित पासवर्ड खोजने की क्षमता भी जोड़ी है। यह फ्लैग सूची में पाए गए शब्दों के वर्णों वाले स्ट्रिंग्स उत्पन्न करेगा ताकि डंप फ़ाइल के अंदर खोजा जा सके। आप -p या --padding फ्लैग का उपयोग करके बनाए गए स्ट्रिंग्स के लिए पैडिंग भी निर्दिष्ट कर सकते हैं।
उदाहरण: --padding 2 => ●●a | --padding 3 => ●●●a

उपरोक्त उदाहरण के लिए, पासवर्ड डंप के अंदर प्लेनटेक्स्ट में संग्रहीत था। इसलिए अतिरिक्त वर्णों को खींचने के लिए पाए गए स्ट्रिंग का मिलान करना संभव था। हालांकि, ऐसे मामले में जहां प्लेनटेक्स्ट पासवर्ड डंप के अंदर प्लेनटेक्स्ट में संग्रहीत नहीं है, शेष वर्णों को निकालना अभी भी संभव है:

इस मामले में, भले ही डंप में प्लेनटेक्स्ट मिलान खोजने में सक्षम नहीं था, फिर भी यह सभी अतिरिक्त वर्णों को निकालने में सक्षम था।
श्रेय @vdohney को जाता है जिन्होंने मूल रूप से इस कमजोरी की खोज की थी। उनके प्रोजेक्ट का लिंक यहाँ है।
CVE विवरण: CVE-2023-32784