ثغرة أمنية في المكتبة مع التنفيذ الرئيسي لخوارزمية SHA-3

تم التعرف على ثغرة أمنية (CVE-3-2022) في تنفيذ وظيفة تجزئة التشفير SHA-37454 (Keccak) المتوفرة في حزمة XKCP (حزمة كود Keccak eXtended) ، والتي يمكن أن تؤدي إلى تجاوز سعة المخزن المؤقت أثناء معالجة تنسيق خاص. بيانات. سبب المشكلة هو خطأ في رمز تنفيذ SHA-3 معين ، وليس ثغرة أمنية في الخوارزمية نفسها. توصف حزمة XKCP بأنها التنفيذ الرسمي لـ SHA-3 ، والتي تم تطويرها بمساعدة فريق تطوير Keccak ، وتستخدم كأساس لوظائف العمل مع SHA-3 بلغات البرمجة المختلفة (على سبيل المثال ، XKCP يتم استخدام الكود في وحدة هاشليب بايثون ، وخاصية هضم حزمة روبي- sha3 و hash_ * PHP).

وفقًا للباحث الذي حدد المشكلة ، فقد تمكن من استخدام الثغرة الأمنية لانتهاك خصائص التشفير لوظيفة التجزئة والعثور على الصور الأولية الأولى والثانية ، وكذلك تحديد التصادمات. بالإضافة إلى ذلك ، تم الإعلان عن إنشاء نموذج أولي لاستغلال ، والذي يسمح بتحقيق تنفيذ الكود عند حساب تجزئة ملف مصمم خصيصًا. من المحتمل أيضًا استخدام الثغرة الأمنية لمهاجمة خوارزميات التحقق من التوقيع الرقمي باستخدام SHA-3 (على سبيل المثال ، Ed448). من المقرر نشر تفاصيل طرق الهجوم لاحقًا ، بعد القضاء على الثغرة الأمنية على نطاق واسع.

لم يتضح بعد كيف تؤثر الثغرة الأمنية على التطبيقات الحالية في الممارسة العملية ، لأنه لكي تظهر المشكلة في الكود ، يجب استخدام حساب التجزئة الدوري في الكتل ، ويجب أن يكون حجم إحدى الكتل المعالجة حوالي 4 جيجابايت (في على الأقل 2 ^ 32 - 200 بايت). عند معالجة بيانات الإدخال دفعة واحدة (بدون الحساب المتسلسل للتجزئة في الأجزاء) ، لا تظهر المشكلة. كأبسط طريقة للحماية ، يُقترح تحديد الحجم الأقصى للبيانات المتضمنة في تكرار واحد لحساب التجزئة.

الثغرة الأمنية ناتجة عن خطأ في كتلة معالجة بيانات الإدخال. نظرًا للمقارنة غير الصحيحة للقيم مع النوع "int" ، يتم تحديد حجم غير صحيح للبيانات المعلقة ، مما يؤدي إلى كتابة الذيل خارج المخزن المؤقت المخصص. على وجه الخصوص ، عند المقارنة ، تم استخدام التعبير "partBlock + مثيل-> byteIOIndex" ، والذي أدى ، مع القيم الكبيرة للأجزاء المكونة ، إلى تجاوز عدد صحيح. بالإضافة إلى ذلك ، كان هناك نوع غير صحيح من النوع "(int) (dataByteLen - i)" غير صحيح في الكود ، مما أدى إلى تجاوز في الأنظمة ذات النوع size_t 64 بت.

مثال على كود تجاوز السعة: import hashlib h = hashlib.sha3_224 () m1 = b "\ x00" * 1؛ م 2 = ب "× 00" * 4294967295 ؛ h.update (m1) h.update (m2) طباعة (h.hexdigest ())

المصدر: opennet.ru

إضافة تعليق