← كل الأخبار
الذكاء الاصطناعي٢٦ أغسطس ٢٠٢٦

مقال تقني: ثغرات أمنية في دالة تحويل النصوص للحروف الصغيرة

شارك
مقال تقني: ثغرات أمنية في دالة تحويل النصوص للحروف الصغيرة

كشف مطوّرو بايثون أن استدعاء ‎str.lower()‎ داخل تنفيذ خوارزمية StringPrep قد يسبب ثغرة أمنية في دعم IDNA 2003. السبب أن الدالة تستخدم بيانات يونيكود المضمّنة في نسخة مفسّر بايثون، بينما تتطلب المواصفة قواعد Unicode 3.2.0 الثابتة. ويؤدي اختلاف القواعد إلى ترميز مختلف للنص نفسه؛ إذ تحوّل السلسلة «ᎠᎠ» إلى ‎xn--58da‎ وفق المواصفة، وإلى ‎xn--kz9aa‎ باستخدام قواعد Unicode 17.0.0. عولجت المشكلة بإضافة استثناءات تجعل ‎str.lower()‎ تحاكي قواعد Unicode 3.2.0 في هذه الوظيفة، وتحمل الثغرة المعرّف CVE-2026-17084.

الحقائق الأساسية

  • تستخدم خوارزمية StringPrep جداول طيّ الأحرف المبنية على قواعد Unicode 3.2.0، لا القواعد الأحدث.

    «This is important! StringPrep depends on this specific version of Unicode to operate consistently, the B.2 and B.3 tables in RFC 3454 are essentially Unicode 3.2.0 case-folding rules encoded into a table.»
    عرض المصدر ←
  • الترميز الناتج للسلسلة «ᎠᎠ» يختلف بين تطبيق قواعد المواصفة وتطبيق قواعد Unicode 17.0.0.

    «# RFC 3454 compliant value ('Ꭰ' is U+13A0) >>> "ᎠᎠ".encode("idna") 'xn--58da' # Value if using Unicode 17.0.0 case-folding >>> "ᎠᎠ".encode("idna") 'xn--kz9aa'»
    عرض المصدر ←
  • أُصلحت المشكلة بإضافة استثناءات تجعل التحويل متوافقًا مع Unicode 3.2.0 في الوظيفة المعنية.

    «The fix was to create new exceptions so that str.lower() would behave as if it was using Unicode 3.2.0 for only particular function.»
    عرض المصدر ←

المصادر

شفت معلومة تحتاج تصحيح؟ بلّغنا ونتحقق ونصحّح — سياسة التصحيح

صحّح هذا الخبر