<p>طلبات [الأمان] / لا يجعل PyOpenSSL الطلبات أكثر أمانًا ولكنها أكثر هشاشة</p>

تم إنشاؤها على ١٨ نوفمبر ٢٠١٩  ·  3تعليقات  ·  مصدر: psf/requests

أضافت الطلبات التبعية requests[security] منذ عدة سنوات لأن وحدة ssl في Python stdlib كانت تفتقر إلى بعض الميزات. منذ أن تم تنفيذ PEP 466 في Python 2.7.9 ، تدعم وحدة ssl التحقق من اسم المضيف و SNI. تم إصدار 2.7.9 في عام 2014. قامت Python 3.7.0 بتحسين الوضع أكثر من خلال تفويض التحقق من اسم المضيف لـ OpenSSL. تستخدم طبقة التوافق PyOpenSSL في urllib3 الوظيفة ssl.match_hostname الموقوفة أو المنفذ الخلفي.

يتسبب التصحيح غير المشروط للقرد لـ urllib3 بـ urllib3.contrib.pyopenssl.inject_into_urllib3 حدوث مشكلات أيضًا.

يستخدم PyOpenSSL عمليات نداء libffi الديناميكية (المعروفة أيضًا باسم عمليات استدعاء النمط القديم cffi). يتم تنفيذ عمليات الاسترجاعات باستخدام الترامبولين والإنشاء الديناميكي لرمز الآلة الأصلي. يستخدم هذا إما صفحات ذاكرة قابلة للتنفيذ وقابلة للكتابة أو بعض الاختراقات مع مناطق mmap () المشتركة. عمليات الاستدعاء الديناميكية هي مخاطرة أمنية وتم حظرها بواسطة أطر الأمان مثل SELinux لأسباب وجيهة (deny_execmem). استكشفنا أنا وأرمين ريغو طرقًا مختلفة للتغلب على هذه المشكلات ، ولكن هناك حلًا بسيطًا. في النهاية طبق Armin نظام رد اتصال جديد لـ cffi. تم توثيق بعض مشكلات عمليات الاسترجاعات القديمة على https://cffi.readthedocs.io/en/latest/using.html#callbacks -old-style.

تقوم PyOpenSSL حاليًا بسحب إصدارات التشفير ، والتي تعتمد في حد ذاتها على asn1crypto. تتسبب مشكلة في asn1crypto و ctypes في قيام Python بالتوقف على نظام macOS الأخير ، https://github.com/pyca/pyopenssl/issues/874 و https://github.com/wbond/asn1crypto/issues/158 .

بسبب أخطاء مثل https://bugzilla.redhat.com/show_bug.cgi؟id=1535689 أقنعت المشرفين على Fedora و RHEL بطلبات التصحيح وإسقاط inject_into_urllib3 منذ فترة. كانت التوزيعات تعمل مع التصحيح https://src.fedoraproject.org/rpms/python-requests/blob/master/f/Don-t-inject-pyopenssl-into-urllib3.patch لأكثر من عام دون الإبلاغ عن أي مشاكل .

أقترح:

1) يتطلب إزالة requests[security] إضافي.
2) إزالة رقعة القرد من urllib3 دون قيد أو شرط من الطلبات.

التعليق الأكثر فائدة

يبدو أنه لم يتم إغلاق هذا بعد دمج # 5443. أعتقد أن العنصر المعلق الوحيد هو requests[security] . أنا أميل إلى تركها الآن لمن لا يزال موجودًا باستخدام <Python 2.7.9. نظرًا لأننا سنصدر على الأرجح إصدارًا ثانويًا جديدًا هذا الأسبوع مع urllib3 ، يمكننا إضافة إشعار إيقاف على العنصر الإضافي للإصدار الثانوي التالي.

سأمضي قدمًا وأقوم بحل هذا غدًا ما لم يكن لدى أي شخص المزيد من التعليقات. أعتقد أن الطلب الأولي قد تم حله الآن.

ال 3 كومينتر

نقطة بيانات لدعم هذا الاتجاه للطلبات و urllib3: 91٪ (7،298،352 / 7،993،356) من تنزيل Python 2.7.X لـ urllib3 كانت على Python 2.7.9+. مأخوذة من مجموعة بيانات التنزيل العامة لهذا اليوم.

النسبة أكبر. تحتوي Python 2.7.5 على أجهزة RHEL 7 على منفذ خلفي لـ PEP 466 أيضًا.

$ rpm -qa python
python-2.7.5-88.el7.x86_64
$ python
Python 2.7.5 (default, Sep 26 2019, 13:23:47) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>> ssl.SSLContext(ssl.PROTOCOL_SSLv23).check_hostname
False

يبدو أنه لم يتم إغلاق هذا بعد دمج # 5443. أعتقد أن العنصر المعلق الوحيد هو requests[security] . أنا أميل إلى تركها الآن لمن لا يزال موجودًا باستخدام <Python 2.7.9. نظرًا لأننا سنصدر على الأرجح إصدارًا ثانويًا جديدًا هذا الأسبوع مع urllib3 ، يمكننا إضافة إشعار إيقاف على العنصر الإضافي للإصدار الثانوي التالي.

سأمضي قدمًا وأقوم بحل هذا غدًا ما لم يكن لدى أي شخص المزيد من التعليقات. أعتقد أن الطلب الأولي قد تم حله الآن.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

jake491 picture jake491  ·  3تعليقات

Matt3o12 picture Matt3o12  ·  3تعليقات

remram44 picture remram44  ·  4تعليقات

everping picture everping  ·  4تعليقات

ReimarBauer picture ReimarBauer  ·  4تعليقات