
انحدارات مستقلة دون اتصال عند حدود البروتوكول لإصلاحات urllib3 المنشورة، مع إصدارات مثبتة وإسناد إلى المصدر الأصلي.
نُشر سابقًا باسم CVE Replay. تغيّر اسم المستودع والعرض التقديمي؛ لكن الإصدارات المثبّتة، وإسناد المُبلِّغ الأصلي، ومسارات ملفات الاختبار، والنتائج المسجّلة تحتفظ بهويتها الأصلية.
تقارن دراسات مستقلة دون اتصال الإصلاحات المنشورة باستخدام إصدارات محددة وملفات اختبار محدودة النطاق. تحافظ كل دراسة على السلوك المقاس وحد النقل والإسناد بشكل صريح.
CVE-2026-44431 · urllib3 2.6.3 → 2.7.0 · أُعيد إنتاجه في 27 سبتمبر 2026
يحمل الطلب ثلاث ترويسات حساسة إلى أصل واحد. تغيّر إعادة التوجيه الوجهة. فهل لا يزال الطلب التالي يحملها؟
يشغّل هذا الاختبار الانحداري المستقل تنفيذ إعادة التوجيه الفعلي من إصدارين محددين من urllib3. يحتفظ الإصدار 2.6.3 بالترويسات الثلاث جميعها عبر واجهة برمجة التطبيقات المنخفضة المستوى المتأثرة. يزيلها الإصدار 2.7.0. تبقى ترويسة حميدة، ولا تزال الطلبات العادية تعمل.
| ملف الاختبار | urllib3 2.6.3 | urllib3 2.7.0 |
|---|---|---|
| إعادة توجيه منخفضة المستوى عبر أصل مختلف | الاحتفاظ بـ 3 ترويسات حساسة | الاحتفاظ بـ 0 |
| الحالة نفسها بأسماء بحروف صغيرة | الاحتفاظ بـ 3 | الاحتفاظ بـ 0 |
| ضابط واجهة برمجة التطبيقات عالية المستوى | الاحتفاظ بـ 0 | الاحتفاظ بـ 0 |
| استجابة 200 مباشرة | الاحتفاظ بـ 3 كما هو مقصود | الاحتفاظ بـ 3 كما هو مقصود |
| إعادة التوجيه معطّلة صراحةً | استدعاء واحد؛ إرجاع 302 | استدعاء واحد؛ إرجاع 302 |
| مجموعة إزالة مخصصة تضيف علامة حميدة | الاحتفاظ بالترويسات الأربع جميعها | إزالة الأربع جميعها |
اجتازت 12/12 من توقعات السيناريو. يتحقق كل سيناريو أيضًا من حالة الاستجابة، وعدد استدعاءات النقل، ومجموعة الترويسات الأولية، ونتيجة الترويسة الحميدة، وعدم تحوّل ترويسات المستدعي. النتيجة القابلة للاستغلال هي نتيجة أساس متوقعة، وليست فحصًا أمنيًا ناجحًا.
تتضمن النتائج القابلة للقراءة آليًا الوسائط الملتقطة، وتجزئات العجلات الدقيقة، وبيئة التشغيل، وتجزئات مصدر الاختبار، والإسناد، ووقت إعادة الإنتاج.
تحدد الاستشارة الأصلية، المنشورة في 7 مايو 2026، مشكلة تعرّض للمعلومات في مسار إعادة التوجيه منخفض المستوى عبر الوكيل في urllib3. وتُدرج الإصدارات >=1.23, <2.7.0 كمتأثرة. قد يؤدي استدعاء ProxyManager.connection_from_url(...).urlopen(..., assert_same_host=False) إلى نقل ترويسات حساسة مُهيّأة إلى طلب مُعاد توجيهه إلى أصل آخر. كانت واجهة برمجة التطبيقات عالية المستوى للمدير تزيلها بالفعل.
يطبّق الإصلاح الأصلي الدالة Retry.remove_headers_on_redirect قبل الطلب المنخفض المستوى التكراري. تتبع حالة الترويسات ذات الحروف الصغيرة لدينا اهتمام الاختبار الانحداري الأصلي بحالة أحرف اسم الترويسة. تتحقق حالة الإزالة المخصصة من أن القاعدة تحترم المجموعة المُهيّأة، بما يتجاوز الأسماء الثلاثة الافتراضية فقط.
تنسب الاستشارة إلى christos-cantina-security كمُبلِّغ، وillia-v كمنسّق، وsethmlarson كمراجع للإصلاح. مساهمة Sergio Rodriguez هنا هي أداة الاختبار المستقلة دون اتصال وتحليل ما قبل/بعد. هذا إعادة إنتاج لـ CVE المنشور الخاص بهم.
استخدم Python 3.10 أو أحدث. لا حاجة إلى pip install أو بيئة افتراضية: يُستورد كل إصدار مباشرةً من عجلته المكتوبة بلغة Python الخالصة في عملية فرعية معزولة جديدة.
من جذر مستودع المحفظة:
python -B ./labs/cve-replay/run_replay.py --fetch
python -B ./labs/cve-replay/run_replay.py
يقوم الأمر الأول بتنزيل العجلتين الدقيقتين إلى دليل .cache/wheels/ المتجاهَل في المختبر ويتحقق من تجزئات SHA-256 الخاصة بهما مقابل البيان. يستخدم الأمر الثاني ذاكرة التخزين المؤقت تلك دون تنزيل. لنسخة مصدرية مستقلة، شغّل python -B run_replay.py --fetch، ثم الأمر نفسه بدون --fetch. يقبل --cache دليل ذاكرة تخزين مؤقت محلي مختلف.
يُستبدل HTTPConnectionPool._make_request بنقل ذي استجابتين: 302 بموقع ثابت، ثم 200. يلتقط ملف الاختبار الوسائط الواصلة إلى ذلك الحد. يُنفَّذ تحليل urllib3، وسياسة إعادة المحاولة، وتصفية الترويسات، ومعالجة إعادة التوجيه التكرارية دون تغيير من العجلة المختارة.
جميع الوجهات أسماء .invalid محجوزة وثابتة؛ وجميع قيم الترويسات تبدأ بـ DUMMY. يرفع إنشاء المقبس ودوال DNS الاستثناء فورًا. يُرفض فحص قدرة IPv6 عند الاستيراد في المكتبة ويُسجَّل بشكل منفصل؛ ولا تحاول سيناريوهات إعادة التشغيل أي عمليات شبكية. لا يوجد خادم يستمع أو هدف حي.
يتحقق هذا من معالجة وسائط إعادة التوجيه. ولا يقيس حركة الوكيل من طرف إلى طرف. الإصدار 2.7.0 هو أول إصلاح لهذا الـ CVE تحديدًا؛ هذه المقارنة التاريخية ليست توصية باختياره على الإصدارات المدعومة الأحدث.
نصوص ملفات الاختبار والتحليل هي عمل أصلي ضمن المحفظة. urllib3 مشروع أصلي موزّع بموجب رخصة MIT الخاصة به؛ لا يُعاد توزيع شيفرته وعجلات إصداراته في الأرشيف المصدري للمحفظة. تُنزَّل بشكل منفصل من PyPI وتُستورد دون تغيير للتجربة.