<p>requests [security] / PyOpenSSLは、リクエストをより安全にするのではなく、より脆弱にします</p>

作成日 2019年11月18日  ·  3コメント  ·  ソース: psf/requests

Pythonのstdlibのsslモジュールにいくつかの機能が欠けていたため、リクエストは何年も前にrequests[security]依存関係を追加しました。 PEP466はPython2.7.9で実装されているため、sslモジュールはホスト名の検証とSNIをサポートしています。 2.7.9は2014年にリリースされました。Python3.7.0は、ホスト名の検証をOpenSSLに委任することで、状況をさらに改善しました。 urllib3のPyOpenSSL互換性レイヤーは、非推奨のssl.match_hostname関数またはバックポートを使用します。

urllib3.contrib.pyopenssl.inject_into_urllib3を使用したurllib3の無条件のモンキーパッチも問題を引き起こしています。

PyOpenSSLは、動的なlibffiコールバック(cffiの古いスタイルのコールバックとも呼ばれます)を使用します。 コールバックは、トランポリンとネイティブマシンコードの動的作成で実装されます。 これは、実行可能で書き込み可能なメモリページ、または共有mmap()領域を使用したいくつかのハックのいずれかを使用します。 動的コールバックはセキュリティリスクであり、正当な理由(deny_execmem)のためにSELinuxなどのセキュリティフレームワークによってブロックされます。 アーミンリゴと私はこれらの問題を回避するためのさまざまな方法を模索しましたが、解決策はあります。 最終的に、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年以上実行されており、問題は報告されていません。 。

私は提案します:

1) requests[security]余分な要件を削除します。
2)リクエストからurllib3の無条件のモンキーパッチを削除します。

最も参考になるコメント

#5443をマージした後、これは閉じられなかったようです。 唯一の傑出したアイテムはrequests[security]だと思います。 <Python 2.7.9を使用してまだそこにいる人のために、今のところそれを残す傾向があります。 今週、urllib3を使用して新しいマイナーバージョンをリリースする可能性が高いため、次のマイナーリリースのエクストラに非推奨の通知を追加できます。

誰かがより多くのフィードバックを持っていない限り、私は先に進んでこれを明日解決します。 これで最初のリクエストは解決したと思います。

全てのコメント3件

リクエストとurllib3のこの方向をサポートするデータポイント:urllib3のPython 2.7.Xダウンロードの91%(7,298,352 / 7,993,356)はPython2.7.9 +でした。 今日の公開ダウンロードデータセットから取得。

比率はさらに大きくなります。 RHEL7マシン上のPython2.7.5には、PEP466のバックポートもあります。

$ 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 評価