
CVE-2026-48095
7-Zip هو برنامج أرشفة ملفات بنسبة ضغط عالية. تحتوي الإصدارات 26.00 وما قبلها على ثغرة تجاوز سعة المخزن المؤقت في الكومة (heap buffer overflow) ناتجة عن نقص في تخصيص المخزن المؤقت لتدفق بيانات NTFS المضغوط (GetCuSize shift UB)، مما قد يسمح للمهاجمين بتنفيذ تعليمات برمجية عشوائية أو التسبب في تعطل التطبيق.
تقوم الدالة CInStream::GetCuSize() في معالج NTFS بحساب حجم المخزن المؤقت لوحدة الضغط بالشكل (UInt32)1 << (BlockSizeLog + CompressionUnit)، وتؤدي صورة معدّة خصيصًا بقيمة ClusterSizeLog >= 28 وCompressionUnit == 4 إلى رفع الأس إلى 32، وهو سلوك غير محدد (undefined behavior) ينهار على معماريتي x86/x64، لذا يتم تخصيص _inBuf كبايت واحد فقط. بعد ذلك، تقوم الدالة ReadStream_FALSE بكتابة ما يصل إلى 256 ميغابايت من البيانات التي يتحكم بها المهاجم داخل هذا المخزن المؤقت الذي يبلغ حجمه بايتًا واحدًا وبعدد تكرارات مقدارها 64 كيلوبايت. ونظرًا لأن كائن CInStream يقع بعد _inBuf بـ304 بايت فقط، يتم استبدال مؤشر جدول الوظائف الافتراضية (vtable pointer) الخاص به، وبذلك تحقق الاستدعاءات التالية اختطافًا لجدول الوظائف الافتراضية (vtable hijack). وفي البنيات ذات 32 بت يُصل إلى تجاوز السعة بشكل غير مشروط؛ أما في بنيات 64 بت فيتطلب نجاح التخصيص المتوازي للمخزن _outBuf بحجم 8 غيغابايت، وإلا فسيفشل النظام مغلقًا في حالة رفض الخدمة (denial of service).
معالج NTFS مُفعّل افتراضيًا في 7z.dll القياسي، وعبر آلية التراجع القائمة على التوقيع التي تطابق السلسلة "NTFS " عند الإزاحة 3، سيفتح صورة معدّة خصيصًا بغض النظر عن امتداد الملف أثناء الاستخراج أو الاختبار. الإصدار 26.01 يصلح هذه المشكلة.
استخدم هذا المشروع فقط في بيئات آمنة ومصرّح بها مثل:
مثال على الإعداد:
git clone <repository-url>
cd <repository-name>
مثال على الاستخدام:
# Install dependencies
# Run the project
python cve-2026-48095.py
# Specify output file name
python cve-2026-48095.py poc_ntfs_sparse.zip
مستودع للتعلّم والاختبار والبحث في مفاهيم الأمن السيبراني ضمن بيئات خاضعة للتحكم.
هذا المستودع مخصص لأغراض البحث الأمني التعليمي والمصرّح به فقط.
وهو مصمم لمساعدة المستخدمين على التعرّف على:
استخدم هذا المستودع فقط في البيئات التي لديك إذن باستخدامها، مثل:
الاستخدام غير المصرّح به أو غير القانوني ممنوع منعًا باتًا.
المؤلف والمساهمون غير مسؤولين عن أي ضرر أو إساءة استخدام أو مشكلات قانونية أو خسائر ناجمة عن هذا المشروع.
باستخدامك لهذا المستودع، فأنت توافق على أن:
هذا المشروع مخصص لـ:
يرجى اتباع ممارسات الإفصاح المسؤول والامتثال لجميع القوانين السارية.
للإفصاح المسؤول أو التعاون، تواصل مع مشرف المستودع عبر GitHub.