HeadlinesBriefing favicon HeadlinesBriefing.com

تم إصلاح خطأ الأمن فيـ str.lower() لـ IDNA في Python

Hacker News •
×

بعض المعايير الإنترنتية تدعم فقط أحرف ASCII، لكن العالم يستخدم أكثر مما هو مقبول بالأبجدية اللاتينية. لذلك، يتطلب تمثيل Unicode إلى ASCII لاستخدامه في أسماء النطاقات. كان Name Prep جزءًا من هذا الحل، المُعرّف في RFC 3491 كملف اصطنافي لـ String Prep، وهو مكون حيوي لـ Internationalizing Domain Names in Applications (IDNA)، المعروف أيضًا بـ "IDNA 2003". تم تعريف خوارزمية String Prep في RFC 3454. تمت إبطال IDNA 2003 بواسطة IDNA 2008 المُعرّفة في RFC 5890 و5891 و5892 و5893. يدعم Python IDNA 2003 من خلال مشفر idna (str.encode('idna')) ويدعم IDNA 2008 حزمة idna في فهرس حزم Python. تم تنفيذ تنفيذ Python لـ String Prep في وحدة stringprep الموجودة في المكتبة القياسية.

بشكل عام، يجب أن تكون تستخدم حزمة idna (IDNA 2008) وليس .encode("idna") (IDNA 2003)، لكن أحيانًا تحتاج إلى السلوك القديم. يُعرّف String Prep خطوة "case folding" (تقليل القيمة الحالية) في القسم 3.2، مما يتيح مقارنات السلاسل غير حساسة لحالة الأحرف، من خلال توجيه جميع الأحرف عبر جداول الربط B.2 وB.3. B.2 هو في الواقع str.lower()، مما يحول جميع الأحرف إلى حروف صغيرة وفقًا لقواعد Unicode وB.3 يحتوي على الاستثناءات.

استدعاء str.lower() في هذه الدالة هو ثغرة! لأن str يستخدم أي بيانات Unicode يأتي مع المترجم Python المحدد، يمكنك معرفة إصدار Unicode المُستخدم من المترجم Python الخاص بك من خلال الوصول إلى unicodedata.unidata_version. هناك أيضًا قاعدة بيانات لبيانات Unicode 3.2.0 متوفرة في كل إصدار من إصدارات Python (unicodedata.ucd_3_2_0) خاصة لخوارزميات String Prep وIDNA. يعتمد String Prep على هذا الإصدار المحدد من Unicode للعمل بشكل متسق، حيث تم ترميز جداول B.2 وB.3 في RFC 3454 بشكل أساسي قواعد Unicode 3.2.0 لتقليل القيمة الحالية في جدول. لذلك، نحن بحاجة إلى استخدام قواعد تقليل القيمة الحالية لـ Unicode 3.2.0، وليس قواعد Unicode الحديثة لتقليل القيمة الحالية.

كانت الإصلاحات هي إنشاء استثناءات جديدة بحيث يتصرف str.lower() كأنه يستخدم Unicode 3.2.0 فقط للوظيفة المحددة. شكرًا لـ Bitshift على الإبلاغ عن الثغرة، وشكرًا لـ Stan Ulbrych على تطوير الإصلاح بالمشاركة، وشكرًا لـ Marc-Andre Lemburg وـ Petr Viktorin على مراجعة الإصلاح. راجع CVE-2026-17084 لمزيد من التفاصيل.

الكيانات الرئيسية: الشركات: Python Software Foundation، Alpha-Omega | الناس: Seth Larson، Bitshift، Stan Ulbrych، Marc-Andre Lemburg، Petr Viktorin