Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2019-11933 — تلف الكومة في منتقي الوسائط في واتساب | Kitploit
أدوات/GitHubGitHub/natleoj/cve-2019-11933
أمان أندرويدتحليل الذاكرة الجنائيتحليل الثغرات الأمنيةالاستغلالأمن الجوالاستغلال الملفات الثنائية
GitHubnatleoj/cve-2019-11933

CVE-2019-11933

تلف الكومة في منتقي الوسائط في واتساب

عرض المستودع
منذ 6 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2019-11933

فساد الكومة (Heap corruption) في منتقي الوسائط في واتساب يؤثر على واتساب للأندرويد قبل الإصدار 2.19.291

الخلفية

يتم تقسيم ملف GIF إلى أجزاء، يتم تمييز كل جزء ببايت محدد:

  • الصورة (0x2C)
    • يصف قسم الصورة إطارًا واحدًا في ملف GIF، ويحتوي على معلومات مثل الارتفاع والعرض، بالإضافة إلى الصورة المضغوطة نفسها. يمكن أن يحتوي GIF على عدة إطارات وبالتالي أقسام صور متعددة.
  • الامتداد (0x21)
    • يحتوي قسم الامتداد على بيانات تُستخدم لتعديل الصورة.
  • الإنهاء (0x3B)
    • يحدد نهاية ملف GIF

وفقًا للكود المصدري، تستدعي renderFrame الدالة DDGifSlurp لتحليل ملف GIF، والدالة getBitmap لعرض ملف GIF. يتم تخصيص مخزن مؤقت rasterBits بواسطة الدالة، ويُحسب حجمه بضرب العرض في الارتفاع للصورة التي تتم معالجتها حاليًا. ربما لتوفير مساحة الذاكرة والوقت، سيتم استخدام نفس المخزن المؤقت rasterBits لجميع الإطارات/الصور في ملف GIF. لذلك، من المطلوب أن يكون المخزن قادرًا على احتواء أكبر صورة موصوفة في الملف. وعلى هذا النحو، يتم إعادة تخصيص المخزن وفقًا لذلك إذا كان قسم صورة آخر داخل نفس ملف GIF يصف صورة أكبر (تتطلب مساحة أكبر).

الثغرة

يقوم DDGifSlurp بتحليل ملف GIF في حلقة، معالجةً كل صورة/إطار في الملف، وينتهي عند مواجهة سجل الإنهاء. عندما يُرجع DGifGetImageDesc القيمة GIF_ERROR (a)، سيؤدي ذلك إلى إنهاء مبكر (في حالة switch)، مما يتسبب في تخطي الكود الذي يعيد تخصيص المخزن المؤقت 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 × 10)
  • صورة أكبر (10000 × 10000) مع واصف صورة غير صالح

المراحل المؤدية إلى الانهيار

  1. مرحلة التحليل
    1. تحليل الصورة الأولى (صغيرة)
    2. تخصيص مخزن مؤقت rasterBits بحجم (الارتفاع الصغير * العرض الصغير)
    3. تحليل الصورة الثانية (كبيرة)
    4. يُرجع DGifSetupDecompress/DGifGetImageDesc القيمة GIF_ERROR
    5. تخطي إعادة التخصيص
  2. مرحلة العرض
    1. عرض الصورة الأولى (نجاح)
    2. عرض الصورة الثانية (خارج الحدود)
تنزيل الأداة