<p>requêtes[sécurité] / PyOpenSSL ne rend pas les requêtes plus sécurisées mais plus fragiles</p>

Créé le 18 nov. 2019  ·  3Commentaires  ·  Source: psf/requests

Les requêtes ont ajouté la dépendance requests[security] il y a de nombreuses années, car le module ssl de la stdlib de Python manquait de certaines fonctionnalités. Depuis que PEP 466 a été implémenté dans Python 2.7.9, le module ssl prend en charge la vérification du nom d'hôte et SNI. 2.7.9 a été publié en 2014. Python 3.7.0 a encore amélioré la situation en déléguant la vérification du nom d'hôte à OpenSSL. La couche de compatibilité PyOpenSSL dans urllib3 utilise la fonction obsolète ssl.match_hostname ou un rétroportage.

Le patch singe inconditionnel de urllib3 avec urllib3.contrib.pyopenssl.inject_into_urllib3 cause également des problèmes.

PyOpenSSL utilise des rappels libffi dynamiques (également appelés rappels cffi à l'ancienne). Les rappels sont implémentés avec des trampolines et une création dynamique de code machine natif. Cela utilise soit des pages de mémoire exécutables et inscriptibles, soit des hacks avec des régions mmap () partagées. Les rappels dynamiques constituent un risque de sécurité et sont bloqués par des frameworks de sécurité comme SELinux pour de bonnes raisons (deny_execmem). Armin Rigo et moi avons exploré différentes manières de contourner ces problèmes, mais il existe simplement une solution. Finalement, Armin a mis en place un nouveau système de rappel pour cffi. Certains des problèmes avec les anciens rappels sont documentés sur https://cffi.readthedocs.io/en/latest/using.html#callbacks -old-style .

PyOpenSSL extrait actuellement une version de la cryptographie, qui elle-même dépend d'asn1crypto. Un problème avec asn1crypto et ctypes provoque une erreur de segmentation de Python sur macOS récent, https://github.com/pyca/pyopenssl/issues/874 et https://github.com/wbond/asn1crypto/issues/158 .

En raison de bogues comme https://bugzilla.redhat.com/show_bug.cgi?id=1535689, j'ai convaincu les responsables de Fedora et RHEL de corriger les demandes et de supprimer inject_into_urllib3 quelque temps. Les distributions fonctionnent avec le correctif https://src.fedoraproject.org/rpms/python-requests/blob/master/f/Don-t-inject-pyopenssl-into-urllib3.patch depuis plus d'un an sans aucun problème signalé .

Je propose de :

1) Supprimer requests[security] supplémentaire requis.
2) Supprimer inconditionnellement le patch singe de urllib3 des requêtes.

Commentaire le plus utile

Il semble que cela n'ait pas été fermé après la fusion du #5443. Je pense que le seul élément en suspens est requests[security] . Je suis enclin à le laisser pour le moment à quiconque utilise encore < Python 2.7.9. Étant donné que nous publierons probablement une nouvelle version mineure cette semaine avec urllib3, nous pouvons ajouter un avis de dépréciation sur l'extra pour la prochaine version mineure.

Je vais aller de l'avant et résoudre ce problème demain, à moins que quelqu'un n'ait plus de commentaires. Je pense que la demande initiale est maintenant résolue.

Tous les 3 commentaires

Un point de données pour prendre en charge cette direction pour les requêtes et urllib3 : 91 % (7 298 352 / 7 993 356) des téléchargements Python 2.7.X pour urllib3 étaient sur Python 2.7.9+. Tiré de l'ensemble de données de téléchargement public pour aujourd'hui.

Le rapport est encore plus grand. Python 2.7.5 sur les machines RHEL 7 a également un backport de 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

Il semble que cela n'ait pas été fermé après la fusion du #5443. Je pense que le seul élément en suspens est requests[security] . Je suis enclin à le laisser pour le moment à quiconque utilise encore < Python 2.7.9. Étant donné que nous publierons probablement une nouvelle version mineure cette semaine avec urllib3, nous pouvons ajouter un avis de dépréciation sur l'extra pour la prochaine version mineure.

Je vais aller de l'avant et résoudre ce problème demain, à moins que quelqu'un n'ait plus de commentaires. Je pense que la demande initiale est maintenant résolue.

Cette page vous a été utile?
0 / 5 - 0 notes