人気のPythonライブラリurllib3にサービス拒否の脆弱性
Hayley Denbraver
2020年3月9日
0 分で読めますUrllib3は、高機能で広く利用されているPython用HTTPクライアントですが、新たに発見されたサービス拒否の脆弱性の影響を受けます。urllib3はPythonエコシステム全体で利用されており、requests、selenium、kubernetesなどの人気パッケージを含む1,200以上のパッケージが依存関係として登録しています。Pythonプロジェクトをお使いの場合、urllib3を利用している可能性は非常に高いでしょう。
昨年、urllib3のCRLFインジェクションの脆弱性について報告しました。
サービス拒否の脆弱性
バージョン1.25.2では、リクエストターゲット内の無効な文字をパーセントエンコードするロジックが追加されました。util/url.pyにある_encode_invalid_charsメソッドには、サービス拒否攻撃を可能にする問題があります。percent_encodings配列には、パーセントエンコードの一致箇所がすべて格納されますが、重複は排除されません。長さNのURLの場合、percent_encodingsのサイズに比例して処理時間が増加します。次の処理(既存のパーセントエンコード済みバイトの正規化)も、各パーセントエンコードに対して線形時間を要するため、処理時間は多項式時間(O(n2))になります。この非効率性を意図的に悪用するとCPUを消費させ、サービス拒否を引き起こす可能性があります。percent_encodingsの重複を排除すれば、_encode_invalid_charsの計算時間は、より効率的な線形時間になります。
脆弱性のあるメソッドは、効率を高めるためバージョン1.25.8で更新され、このサービス拒否の脆弱性は解消されています。
自分のプロジェクトは脆弱性の影響を受けますか?
urllib3はPythonエコシステムで広く利用されているため、Pythonプロジェクトで脆弱なバージョンを使用していないか確認することをおすすめします。問題を解決するには、urllib3を最新バージョン(1.25.8)に更新してください。多くのPythonパッケージがurllib3に依存しているため、この脆弱性は間接的な依存関係としてプロジェクトに含まれている可能性があります。その場合、最上位の依存関係によっては、常にアップグレードできるとは限りません。
SnykならPythonの依存関係を簡単にチェックできます。無料プランでは、オープンソースプロジェクトを無制限にスキャンできるほか、プライベートリポジトリも毎月200回スキャンできます。Snykは最近、Snyk Open SourceでのPythonサポートを強化しました。自動修正プルリクエストを活用して、開発者が依存関係の脆弱性を修正できます。今すぐプロジェクトをスキャンしましょう。
SnykはPythonが大好きです
Snykはオープンソースを愛し、できる限り健全な状態に保ちたいと考えています。そのため、新たな脆弱性を報告するのは、パッケージに問題があるからではありません(問題はありません)。開発者がオープンソースソフトウェアを安全に利用できるよう支援するためです。また、新しい脆弱性を発見した方が責任ある方法で報告できるよう支援したいと考えています。発見した脆弱性やSnykのSnyk Vulnerability Databaseに掲載されていない脆弱性を報告いただければ、脆弱性の検証やメンテナーへの連絡をサポートします。詳しくはこちらをご覧ください。
CTFを始めよう
オンデマンドのバーチャル入門ワークショップを視聴して、CTFの課題の解き方を学びましょう。
