<p>solicitudes [seguridad] / PyOpenSSL no hace que las solicitudes sean más seguras sino más frágiles</p>

Creado en 18 nov. 2019  ·  3Comentarios  ·  Fuente: psf/requests

Las solicitudes agregaron la dependencia requests[security] muchos, muchos años porque el módulo ssl en stdlib de Python carecía de algunas características. Dado que PEP 466 se implementó en Python 2.7.9, el módulo ssl admite la verificación del nombre de host y SNI. 2.7.9 se lanzó en 2014. Python 3.7.0 mejoró la situación aún más al delegar la verificación del nombre de host a OpenSSL. La capa de compatibilidad PyOpenSSL en urllib3 usa la función obsoleta ssl.match_hostname o un backport.

El parche de mono incondicional de urllib3 con urllib3.contrib.pyopenssl.inject_into_urllib3 está causando problemas.

PyOpenSSL usa devoluciones de llamada dinámicas de libffi (también conocidas como devoluciones de llamada de estilo antiguo cffi). Las devoluciones de llamada se implementan con trampolines y creación dinámica de código de máquina nativo. Esto usa páginas de memoria ejecutables y grabables o algunos trucos con regiones compartidas mmap (). Las devoluciones de llamada dinámicas son un riesgo de seguridad y están bloqueadas por marcos de seguridad como SELinux por buenas razones (deny_execmem). Armin Rigo y yo exploramos varias formas de solucionar estos problemas, pero simplemente hay una solución. Finalmente, Armin implementó un nuevo sistema de devolución de llamada para cffi. Algunos de los problemas con las devoluciones de llamada antiguas están documentados en https://cffi.readthedocs.io/en/latest/using.html#callbacks -old-style.

PyOpenSSL actualmente extrae una versión de criptografía, que a su vez depende de asn1crypto. Un problema con asn1crypto y ctypes hace que Python genere errores de segmentación en macOS recientes, https://github.com/pyca/pyopenssl/issues/874 y https://github.com/wbond/asn1crypto/issues/158 .

Debido a errores como https://bugzilla.redhat.com/show_bug.cgi?id=1535689 , convencí a los mantenedores de Fedora y RHEL de parchear las solicitudes y eliminar inject_into_urllib3 un tiempo. Las distribuciones se han estado ejecutando con el parche https://src.fedoraproject.org/rpms/python-requests/blob/master/f/Don-t-inject-pyopenssl-into-urllib3.patch durante más de un año sin ningún problema informado .

Propongo:

1) Eliminar requests[security] adicionales requeridos.
2) Elimine incondicionalmente el mono-parche de urllib3 de las solicitudes.

Comentario más útil

Parece que esto no se cerró después de fusionar # 5443. Creo que el único elemento pendiente es requests[security] . Me inclino a dejarlo por ahora para quien todavía esté usando <Python 2.7.9. Dado que es probable que lancemos una nueva versión menor esta semana con urllib3, podemos agregar un aviso de obsolescencia adicional para la próxima versión menor.

Seguiré adelante y resolveré esto mañana a menos que alguien tenga más comentarios. Creo que la solicitud inicial ya está resuelta.

Todos 3 comentarios

Un punto de datos para respaldar esta dirección para las solicitudes y urllib3: el 91% (7,298,352 / 7,993,356) de las descargas de Python 2.7.X para urllib3 estaban en Python 2.7.9+. Tomado del conjunto de datos de descarga pública de hoy.

La proporción es aún mayor. Python 2.7.5 en máquinas RHEL 7 también tiene 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

Parece que esto no se cerró después de fusionar # 5443. Creo que el único elemento pendiente es requests[security] . Me inclino a dejarlo por ahora para quien todavía esté usando <Python 2.7.9. Dado que es probable que lancemos una nueva versión menor esta semana con urllib3, podemos agregar un aviso de obsolescencia adicional para la próxima versión menor.

Seguiré adelante y resolveré esto mañana a menos que alguien tenga más comentarios. Creo que la solicitud inicial ya está resuelta.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

avinassh picture avinassh  ·  4Comentarios

ReimarBauer picture ReimarBauer  ·  4Comentarios

eromoe picture eromoe  ·  3Comentarios

everping picture everping  ·  4Comentarios

Matt3o12 picture Matt3o12  ·  3Comentarios