Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2019-11933 — WhatsApp के मीडिया पिकर में हीप करप्शन | Kitploit
उपकरण/GitHubGitHub/natleoj/cve-2019-11933
एंड्रॉइड सुरक्षामेमोरी फोरेंसिकभेद्यता विश्लेषणशोषणमोबाइल सुरक्षाबाइनरी शोषण
GitHubnatleoj/cve-2019-11933

CVE-2019-11933

WhatsApp के मीडिया पिकर में हीप करप्शन

रिपॉजिटरी देखें
6 साल पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

CVE-2019-11933

व्हाट्सएप के मीडिया पिकर में हीप भ्रष्टाचार (heap corruption), जो संस्करण 2.19.291 से पहले के एंड्रॉइड के लिए व्हाट्सएप को प्रभावित करता है।

पृष्ठभूमि

एक GIF फ़ाइल खंडों में विभाजित होती है, जिन्हें एक विशिष्ट बाइट द्वारा चिह्नित किया जाता है:

  • Image (0x2C)
    • छवि अनुभाग GIF फ़ाइल में एक एकल फ़्रेम का वर्णन करता है, और इसमें ऊँचाई, चौड़ाई, साथ ही संपीड़ित छवि जैसी जानकारी होती है। एक GIF में कई फ़्रेम हो सकते हैं और इस प्रकार कई छवि अनुभाग हो सकते हैं।
  • Extension (0x21)
    • एक्सटेंशन अनुभाग में वह डेटा होता है जिसका उपयोग किसी छवि को संशोधित करने के लिए किया जाता है।
  • Terminate (0x3B)
    • GIF फ़ाइल के अंत को चिह्नित करता है।

स्रोत कोड के अनुसार, renderFrame एक GIF को पार्स करने के लिए DDGifSlurp को कॉल करता है, और GIF प्रदर्शित करने के लिए getBitmap को। एक rasterBits बफ़र फ़ंक्शन द्वारा आवंटित किया जाता है, और इसका आकार वर्तमान में संसाधित की जा रही छवि की चौड़ाई को ऊँचाई से गुणा करके गणना की जाती है। शायद मेमोरी स्थान और समय बचाने के लिए, GIF में सभी फ़्रेमों/छवियों के लिए एक ही rasterBits बफ़र का उपयोग किया जाएगा। इसलिए, यह आवश्यक है कि बफ़र फ़ाइल में वर्णित सबसे बड़ी छवि को समाहित करने में सक्षम हो। इस प्रकार, यदि उसी GIF के भीतर कोई अन्य छवि अनुभाग एक बड़ी छवि का वर्णन करता है (अधिक स्थान की आवश्यकता होती है), तो बफ़र को तदनुसार पुनः आवंटित किया जाता है।

भेद्यता

DDGifSlurp GIF फ़ाइल को एक लूप में पार्स करता है, फ़ाइल में प्रत्येक छवि/फ़्रेम को संसाधित करता है, और समाप्ति (terminate) रिकॉर्ड मिलने पर समाप्त हो जाता है। जब DGifGetImageDesc GIF_ERROR लौटाता है (a), तो यह (switch case में) जल्दी समाप्ति का कारण बनता है, जिसके परिणामस्वरूप rasterBits बफ़र को पुनः आवंटित करने वाला कोड छोड़ दिया जाता है। DDGifSlurp का एक स्निपेट नीचे दिखाया गया है:

root@kitploit:~
void DDGifSlurp(GifInfo *info, bool decode, bool exitAfterFrame) {
    ...
    do {
        ...
        switch (RecordType) {
            case IMAGE_DESC_RECORD_TYPE:
             
                if (DGifGetImageDesc(gifFilePtr, isInitialPass) == GIF_ERROR) {   <-- [a]
                    break;
                }
                ...
                if (decode) {
                    ...
                    const uint_fast32_t newRasterSize = gifFilePtr->Image.Width * gifFilePtr->Image.Height;
                    if (newRasterSize > info->rasterSize || widthOverflow > 0 || heightOverflow > 0) {
                        void *tmpRasterBits = reallocarray(info->rasterBits, newRasterSize, sizeof(GifPixelType));
                        ...
                    }
    }while (RecordType != TERMINATE_RECORD_TYPE);
}

निम्नलिखित प्रारूप वाली एक GIF छवि क्रैश का कारण बनेगी:

  • मान्य छवि (10 x 10)
  • अमान्य छवि डिस्क्रिप्टर के साथ बड़ी छवि (10000 x 10000)

क्रैश की ओर ले जाने वाले चरण

  1. पार्सिंग चरण
    1. पहली छवि पार्स करें (छोटी)
    2. rasterBits बफ़र को आकार के साथ आवंटित करें (छोटी ऊँचाई * छोटी चौड़ाई)
    3. दूसरी छवि पार्स करें (बड़ी)
    4. DGifSetupDecompress/DGifGetImageDesc GIF_ERROR लौटाता है
    5. पुनः आवंटन छोड़ें
  2. रेंडरिंग चरण
    1. पहली छवि रेंडर करें (सफल)
    2. दूसरी छवि रेंडर करें (OOB)
टूल डाउनलोड करें