CVE-2026-48095: يكشف مختبر أمان GitHub عن تجاوز في كومة الذاكرة المؤقتة في معالج NTFS الخاص بـ 7-Zip، مما يسمح بتنفيذ أي كود عبر أي امتداد ملف

نشر الباحث في مختبر أمان GitHub، ياروسلاف لوباتشيفسكي، إرشادًا فنيًا في 22 مايو بخصوص الثغرة CVE-2026-48095 (GHSL-2026-140)، وهي ثغرة تجاوز سعة المخزن المؤقت في معالج الأرشيفات من نوع NTFS ضمن برنامج 7-Zip، والتي قد تؤدي إلى تنفيذ كود عشوائي. السبب الجذري لهذه الثغرة هو سلوك غير محدد في دالة GetCuSize() التي تحسب حجم مخزن البيانات الخاص بالتدفقات المضغوطة من نوع NTFS عبر عملية إزاحة أرقام ثنائية باستخدام 32 بت؛ عندما تُعدّ صورة NTFS بواسطة مهاجم بحيث تكون قيمة ClusterSizeLog = 28 وقيمة CompressionUnit = 4، تصل درجة الإزاحة إلى 32، وهو سلوك غير محدد في لغة C++. على أنظمة x86 وx64 على حد سواء، تتسبب آلية تمويه عدد الإزاحة في الأجهزة في أن تعيد هذه العملية قيمة 1، مما يؤدي إلى تخصيص مساحة تخزينية بحجم بايت واحد فقط للمتغير _inBuf. الدالة التالية في الكود، ReadStream_FALSE، تقوم بعد ذلك بكتابة ما يصل إلى 256 ميجابايت من بيانات التدفق التي يتحكم بها المهاجم في هذا المخزن المؤقت الذي لا يتجاوز حجمه بايتًا واحدًا. تؤكد تحليلات أداة التصحيح البرمجي أن كائن التدفق (CInStream) يقع على بعد 304 بايت فقط من المتغير _inBuf في ذاكرة الوصول العشوائي؛ الكتابة الأولى التي تبلغ حجمها 64 كيلوبايت تطمس مؤشر جدول الوظائف الافتراضية (vtable)، بينما تؤدي الكتابة اللاحقة إلى استدعاء دوال برمجية عبر هذا الجدول المشوه، وهو ما يمثل هجومًا كلاسيكيًا لاختطاف جدول الوظائف الافتراضية يمنح المهاجم القدرة على تنفيذ كود خبيث. تحمل هذه الثغرة درجة تقييم CVSS 3.1 بقيمة 8.8 (مرتفعة): لا يتطلب استغلالها أي مصادقة أو امتيازات خاصة، ويكفي فقط تفاعل المستخدم الواحد المتمثل في فتح الملف المعيب.

من التفاصيل الهامة المتعلقة بسطح الهجوم: يستخدم برنامج 7-Zip آلية كشف تستند إلى التوقيعات، لذا فإن أي صورة NTFS مصممة خصيصًا تحتوي على سلسلة الأحرف الثمانية "NTFS " بدءًا من البايت رقم 3 ستُوجه تلقائيًا إلى معالج الأرشيفات من نوع NTFS بغض النظر عن امتداد الملف؛ أي ملف خبيث يتم إرساله بامتداد .7z أو .zip أو .rar أو حتى بدون أي امتداد سيؤدي إلى تشغيل نفس المسار البرمجي. جميع إصدارات برنامج 7-Zip حتى الإصدار 26.00 متأثرة بهذه الثغرة سواء على أنظمة 32 بت أو 64 بت؛ أما على أنظمة 64 بت التي تقل مساحة الذاكرة الحرة فيها عن 16 جيجابايت تقريبًا، فقد يفشل تخصيص مساحة تخزينية بحجم 8 جيجابايت للمتغير _outBuf، مما يحد من تأثير الثغرة إلى حدوث تعطل للبرنامج فقط. أبلغ لوباتشيفسكي عن هذه المشكلة سرًا في 24 أبريل، وسرعان ما أصدر إيغور بافلوف تصحيحًا لها في الإصدار 26.01 بعد ثلاثة أيام، أي في 27 أبريل. يُنصح جميع المستخدمين الذين ما زالوا يعتمدون على الإصدار 26.00 أو إصدارات أقدم بتحديث برامجهم فورًا.

مختبر أمان GitHub | SOC Prime