<p>solicitações [segurança] / PyOpenSSL não torna as solicitações mais seguras, mas mais frágeis</p>

Criado em 18 nov. 2019  ·  3Comentários  ·  Fonte: psf/requests

As solicitações adicionaram a dependência requests[security] muitos, muitos anos atrás, porque o módulo ssl no stdlib do Python carecia de alguns recursos. Como o PEP 466 foi implementado no Python 2.7.9, o módulo ssl oferece suporte à verificação de nome de host e SNI. 2.7.9 foi lançado em 2014. O Python 3.7.0 melhorou ainda mais a situação, delegando a verificação do nome do host ao OpenSSL. A camada de compatibilidade PyOpenSSL em urllib3 usa a função obsoleta ssl.match_hostname ou uma porta traseira.

O monkey-patching incondicional de urllib3 com urllib3.contrib.pyopenssl.inject_into_urllib3 está causando problemas.

PyOpenSSL usa callbacks libffi dinâmicos (também conhecidos como callbacks cffi de estilo antigo). Os callbacks são implementados com trampolins e criação dinâmica de código de máquina nativo. Isso usa páginas de memória executáveis ​​e graváveis ​​ou alguns hacks com regiões mmap () compartilhadas. Callbacks dinâmicos são um risco de segurança e são bloqueados por estruturas de segurança como o SELinux por boas razões (deny_execmem). Armin Rigo e eu exploramos várias maneiras de contornar esses problemas, mas há uma solução simples. Eventualmente, Armin implementou um novo sistema de retorno de chamada para cffi. Alguns dos problemas com retornos de chamada antigos estão documentados em https://cffi.readthedocs.io/en/latest/using.html#callbacks -old-style.

PyOpenSSL atualmente puxa em uma versão de criptografia, que depende de asn1crypto. Um problema com asn1crypto e ctypes faz com que o Python falhe em segfault em macOS recentes, https://github.com/pyca/pyopenssl/issues/874 e https://github.com/wbond/asn1crypto/issues/158 .

Devido a bugs como https://bugzilla.redhat.com/show_bug.cgi?id=1535689 , convenci os mantenedores do Fedora e do RHEL a corrigir solicitações e descartar inject_into_urllib3 um tempo atrás. As distros têm funcionado com o patch https://src.fedoraproject.org/rpms/python-requests/blob/master/f/Don-t-inject-pyopenssl-into-urllib3.patch por mais de um ano sem nenhum problema relatado .

Eu proponho:

1) Remova requests[security] extra requer.
2) Remova incondicionalmente o patch monkey de urllib3 das solicitações.

Comentários muito úteis

Parece que não foi fechado após a fusão # 5443. Acho que o único item pendente é requests[security] . Estou inclinado a deixá-lo por enquanto para quem ainda está usando o <Python 2.7.9. Dado que provavelmente iremos lançar uma nova versão secundária esta semana com urllib3, podemos adicionar um aviso de depreciação no extra para o próximo lançamento secundário.

Vou resolver isso amanhã, a menos que alguém tenha mais feedback. Acho que o pedido inicial já foi resolvido.

Todos 3 comentários

Um ponto de dados para apoiar essa direção para solicitações e urllib3: 91% (7.298.352 / 7.993.356) dos downloads do Python 2.7.X para urllib3 foram no Python 2.7.9+. Retirado do conjunto de dados de download público de hoje.

A proporção é ainda maior. O Python 2.7.5 em máquinas RHEL 7 também tem um 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 não foi fechado após a fusão # 5443. Acho que o único item pendente é requests[security] . Estou inclinado a deixá-lo por enquanto para quem ainda está usando o <Python 2.7.9. Dado que provavelmente iremos lançar uma nova versão secundária esta semana com urllib3, podemos adicionar um aviso de depreciação no extra para o próximo lançamento secundário.

Vou resolver isso amanhã, a menos que alguém tenha mais feedback. Acho que o pedido inicial já foi resolvido.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

iLaus picture iLaus  ·  3Comentários

8key picture 8key  ·  3Comentários

Matt3o12 picture Matt3o12  ·  3Comentários

mitar picture mitar  ·  4Comentários

remram44 picture remram44  ·  4Comentários