مؤخرا تم نشر أنباء عن وجود ثغرة أمنية في مكتبة zlib تم فهرستها بالفعل ضمن CVE-2018-25032 مما تسبب في تجاوز سعة المخزن المؤقت عند محاولة ضغط تسلسل أحرف مُعد خصيصًا في البيانات الواردة.
في شكله الحالي ، فإن أظهر الباحثون إمكانية استدعاء إنهاء غير طبيعي من العملية ، لذلك لم يتم دراسة ما إذا كانت المشكلة قد يكون لها عواقب أكثر خطورة.
يذكر أن الضعف لقد تجلى منذ zlib 1.2.2.2 ويؤثر على الإصدار الحالي من zlib 1.2.11. من الجدير بالذكر أنه تم اقتراح تصحيح لإصلاح الثغرة الأمنية في عام 2018 ، لكن المطورين لم يهتموا به ولم يصدروا نسخة تصحيحية (تم تحديث مكتبة zlib آخر مرة في عام 2017).
تم الإبلاغ عن هذا الخطأ بواسطة Danilo Ramos من Eideticom، Inc الذي لقد كان يجول لمدة 13 عامًا قبل أن يتم العثور عليه! تم إدخال الخطأ في zlib 1.2.2.2 ، مع إضافة خيار Z_FIXED. يفرض الخيار استخدام أكواد Huffman الثابتة. للإدخالات النادرة مع
الكثير من التطابقات البعيدة ، المخزن المؤقت الذي فيه يمكن الكتابة فوق البيانات المضغوطة. ينتج عن ذلك إخراج تالف بسبب مسافات غير صالحة ، وقد تؤدي إلى الوصول خارج الحدود ، تعطل التطبيق.
عالي التأثر يظهر إذا كان تدفق الإدخال يحتوي على عدد كبير من التطابقات لحزم التي يتم تطبيق التغليف على أساس أكواد هوفمان مثبت. في ظل ظروف معينة ، قد تتداخل محتويات المخزن المؤقت الوسيط الذي يتم وضع النتيجة المضغوطة فيه مع الذاكرة التي يتم تخزين جدول تكرار الرمز بها. نتيجة لذلك ، يتم ملاحظة تكوين بيانات مضغوطة غير صحيحة وانهيار بسبب الكتابة خارج حدود المخزن المؤقت.
عالي التأثر لا يمكن استغلاله إلا من خلال استراتيجية ضغط تعتمد على أكواد هوفمان الثابتة. يتم اختيار إستراتيجية مماثلة عندما يتم تضمين خيار Z_FIXED بشكل صريح في الكود (مثال على التسلسل الذي يتسبب في حدوث عطل عند استخدام خيار Z_FIXED). انطلاقًا من الكود ، يمكن أيضًا اختيار إستراتيجية Z_FIXED تلقائيًا إذا كانت الأشجار المثلى والثابتة المحسوبة للبيانات لها نفس الحجم.
يجمع الحل هنا بين مسافة المخزن المؤقت والحرفي / الطول المخازن المؤقتة في مخزن رمز واحد. الآن ثلاثة بايت ديتم فتح مساحة المخزن المؤقت لكل حرف أو طول / مسافة الزوج المستهلك ، بدلاً من البايتين السابقتين وهذا يضمن
أن المخزن المؤقت المعلق لا يمكنه الكتابة فوق جدول الرموز ، منذ ذلك الحين الحد الأقصى لطول / مسافة الشفرة الثابتة المضغوطة هو 31 بتة ، و نظرًا لوجود أربعة بايت من المساحة المعلقة لكل ثلاثة بايت من مساحة الرمز.
لم يتضح بعد ما إذا كانت شروط استغلال الثغرة الأمنية يمكن أن تتطابق مع استراتيجية الضغط Z_DEFAULT_STRATEGY ، والتي يتم تطبيقها افتراضيًا.
خلاف ذلك ، ستقتصر الثغرة الأمنية على أنظمة محددة معينة حيث يتم تطبيق خيار Z_FIXED بشكل صريح. إذا كان الأمر كذلك ، فقد يكون الضرر الناجم عن الثغرة الأمنية كبيرًا جدًا ، حيث أن مكتبة zlib هي المعيار الفعلي وتستخدم في العديد من المشاريع الشائعة ، بما في ذلك Linux kernel و OpenSSH و OpenSSL و apache httpd و libpng و FFmpeg و rsync و dpkg. ، rpm ، Git ، PostgreSQL ، MySQL ، إلخ.
كما يذكر أن المعلمات المحددة التي بموجبها تظهر الثغرة الأمنية نفسها عند اختيار استراتيجية الضغط الافتراضية Z_DEFAULT_STRATEGY. في ظل ظروف حقيقية ، الهجوم لا يزال يعتبر غير مرجحنظرًا لأن الاستغلال باستخدام التسلسل الذي تم الكشف عنه يتطلب ضبط معلمة memLevel على 1 ، بينما يتم تحديد المستوى 8 افتراضيًا.
مثال على تسلسل القفل عندما يتم استدعاء "deflateInit2 (& strm، 7، Z_DEFLATED، 15، 1، Z_DEFAULT_STRATEGY)" (المستوى = 7 ، windowBits = 15 ، memLevel = 1).
أخيرا وتجدر الإشارة إلى أن الحل ليس مدرجًا أيضًا لا يزال في الحزم التي تقدمها التوزيعات ، بحيث يمكنك تتبع إصدار الإصلاحات عن طريق التوزيعات على هذه الصفحات: ديبيان, RHEL, فيدورا, SUSE, أوبونتو، قوس لينكس, اكبر برهان فري, نت بي، بالإضافة إلى مكتبة zlib-ng لا تتأثر بالمشكلة.
إذا كنت مهتمًا بمعرفة المزيد عنها ، يمكنك الرجوع إلى التفاصيل في الرابط التالي.