<p>Anfragen[Sicherheit] / PyOpenSSL macht Anfragen nicht sicherer, sondern brüchiger</p>

Erstellt am 18. Nov. 2019  ·  3Kommentare  ·  Quelle: psf/requests

Requests hat vor vielen, vielen Jahren die requests[security] Abhängigkeit hinzugefügt, weil dem SSL-Modul in Pythons stdlib einige Funktionen fehlten. Da PEP 466 in Python 2.7.9 implementiert wurde, unterstützt das SSL-Modul die Überprüfung von Hostnamen und SNI. 2.7.9 wurde 2014 veröffentlicht. Python 3.7.0 verbesserte die Situation noch weiter, indem es die Überprüfung des Hostnamens an OpenSSL delegierte. Die PyOpenSSL-Kompatibilitätsschicht in urllib3 verwendet die veraltete ssl.match_hostname Funktion oder einen Backport.

Bedingungsloses Monkey-Patching von urllib3 mit urllib3.contrib.pyopenssl.inject_into_urllib3 verursacht ebenfalls Probleme.

PyOpenSSL verwendet dynamische libffi-Callbacks (auch bekannt als cffi-Callbacks im alten Stil). Die Callbacks werden mit Trampolinen und dynamischer Erstellung von nativem Maschinencode implementiert. Dies verwendet entweder ausführbare und beschreibbare Speicherseiten oder einige Hacks mit gemeinsam genutzten mmap()-Regionen. Dynamische Callbacks sind ein Sicherheitsrisiko und werden aus guten Gründen von Sicherheitsframeworks wie SELinux blockiert (deny_execmem). Armin Rigo und ich haben verschiedene Möglichkeiten untersucht, um diese Probleme zu umgehen, aber es gibt einfach eine Lösung. Schließlich implementierte Armin ein neues Callback-System für cffi. Einige der Probleme mit alten Rückrufen sind unter https://cffi.readthedocs.io/en/latest/using.html#callbacks -old-style dokumentiert.

PyOpenSSL zieht derzeit eine Version der Kryptographie ein, die selbst von asn1crypto abhängt. Ein Problem mit asn1crypto und ctypes führt dazu, dass Python unter dem aktuellen macOS https://github.com/pyca/pyopenssl/issues/874 und https://github.com/wbond/asn1crypto/issues/158 einen Segfault verursacht.

Aufgrund von Fehlern wie https://bugzilla.redhat.com/show_bug.cgi?id=1535689 habe ich die Fedora- und RHEL-Maintainer vor einiger Zeit davon überzeugt, Requests zu patchen und inject_into_urllib3 zu lassen. Die Distributionen laufen seit über einem Jahr mit dem Patch https://src.fedoraproject.org/rpms/python-requests/blob/master/f/Don-t-inject-pyopenssl-into-urllib3.patch ohne gemeldete Probleme .

Ich schlage vor:

1) Entfernen von requests[security] extra erfordert.
2) Entfernen Sie unbedingt den Monkey-Patch von urllib3 aus den Anforderungen.

Hilfreichster Kommentar

Es sieht so aus, als ob dies nach dem Zusammenführen von #5443 nicht geschlossen wurde. Ich denke, der einzige ausstehende Posten ist requests[security] . Ich neige dazu, es vorerst denjenigen zu überlassen, die noch < Python 2.7.9 verwenden. Da wir wahrscheinlich diese Woche eine neue Nebenversion mit urllib3 veröffentlichen werden, können wir für die nächste Nebenversion einen Hinweis zur Einstellung des Extras hinzufügen.

Ich werde das Problem morgen lösen, es sei denn, jemand hat mehr Feedback. Ich denke, die ursprüngliche Anfrage ist jetzt gelöst.

Alle 3 Kommentare

Ein Datenpunkt zur Unterstützung dieser Richtung für Anfragen und urllib3: 91% (7.298.352 / 7.993.356) der Python 2.7.X-Downloads für urllib3 waren auf Python 2.7.9+. Aus dem öffentlichen Download-Datensatz für heute entnommen.

Das Verhältnis ist noch größer. Python 2.7.5 auf RHEL 7-Maschinen hat auch einen Backport von 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

Es sieht so aus, als ob dies nach dem Zusammenführen von #5443 nicht geschlossen wurde. Ich denke, der einzige ausstehende Posten ist requests[security] . Ich neige dazu, es vorerst denjenigen zu überlassen, die noch < Python 2.7.9 verwenden. Da wir wahrscheinlich diese Woche eine neue Nebenversion mit urllib3 veröffentlichen werden, können wir für die nächste Nebenversion einen Hinweis zur Einstellung des Extras hinzufügen.

Ich werde das Problem morgen lösen, es sei denn, jemand hat mehr Feedback. Ich denke, die ursprüngliche Anfrage ist jetzt gelöst.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

NoahCardoza picture NoahCardoza  ·  4Kommentare

jakul picture jakul  ·  3Kommentare

cnicodeme picture cnicodeme  ·  3Kommentare

mitar picture mitar  ·  4Kommentare

eromoe picture eromoe  ·  3Kommentare