人気のPython依存パッケージurllib3でCRLFインジェクションが発見される
Hayley Denbraver
2019年5月15日
0 分で読めます2019年4月18日、人気のPythonライブラリurllib3でCRLFインジェクションの脆弱性が発見されました。urllib3はPython向けのHTTPクライアントで、スレッドセーフ、コネクションプーリング、クライアント側のSSL/TLS検証など、便利な機能を備えています。Pythonエコシステムで広く利用されており、人気ライブラリのrequestsにも含まれています。実際、urllib3は500を超えるオープンソースライブラリで使用されています。Pythonプロジェクトをお持ちの場合、依存関係ツリーにurllib3が含まれている可能性は非常に高いでしょう。
この脆弱性はすでにデータベースに追加されています。Snykでプロジェクトを監視していて、脆弱なパッケージが含まれていることが確認された場合は、定期アラートですでに通知されています。そうでない場合は、アプリケーションのコードリポジトリを無料でテストし、脆弱なバージョンのurllib3の影響を受けるかどうかをご確認ください。
Pythonアプリケーションで脆弱なライブラリが使われていることがわかった場合は、すぐに対応し、依存関係ツリーを通じてSnykが推奨する、修正済みの最も近いバージョンにアップグレードしてください。
CRLFインジェクションの脆弱性
CRLFは「Carriage Return, Line Feed(キャリッジリターン、ラインフィード)」の略で、行の終端を示す用語です。CRLFインジェクションは、アプリケーションに行終端を挿入する攻撃です。urllib3の脆弱性では、リクエスト先アドレスのパラメーターを操作できる攻撃者がHTTPヘッダーを改ざんし、内部サービスを攻撃する可能性があります。
この脆弱性は当初、urllib2/urllibライブラリ(それぞれPython 2およびPython 3の標準ライブラリ)で発生した類似の問題を扱うPython Bug Trackerの報告で取り上げられました。コメント投稿者のAlvin Chang(ユーザー名alvinchang)は、urllib3ライブラリでもエクスプロイトを再現できたと指摘しました。
その後、urllib3のGitHubリポジトリで問題が報告され、1.24.xおよび1.25.xのリリース系列で修正が提供されました。
この脆弱性の概念実証コードは次のとおりです。Python Bug Trackerでユーザーragdollが公開し、alvinchangがurllib3向けに応用したものです。
この例では、ncサーバーに改ざんされたヘッダー内容「X-injected:header」を含むHTTPリクエストが表示され、HTTPヘッダーのインジェクションが成功したことがわかります。
自分のプロジェクトは脆弱でしょうか?
自分のプロジェクトが脆弱かどうか気になりませんか?今すぐSnykの無料アカウントを作成して、プロジェクトの脆弱性を確認しましょう。Snykは、オープンソース依存関係に含まれる既知の脆弱性をすべてレポートします。影響を受けるバージョンを使用している場合は、urllib3ライブラリの脆弱性も確認できます。
urllib3は間接依存関係として含まれていることが多く、気づかないうちにプロジェクトにインストールされている場合があります。urllib3を使用する直接依存関係の中には、ライブラリの脆弱な機能を実際には利用していないものもあります。たとえば、現時点では、依存関係にurllib3を含むrequestsライブラリは脆弱ではないようです。ただし、urllib3に依存するすべてのプロジェクトがそうとは限りません。そのため、依存関係ツリーにurllib3が含まれているかどうかを確認することをおすすめします。
プロジェクトを保護するには?
脆弱なバージョンのurllib3がプロジェクトで使われている場合は、urllib3をバージョン1.24.3以降にアップグレードすることをおすすめします。これにより、urllib3ライブラリで見つかったほかのいくつかの脆弱性からも保護できます。また、Python 2およびPython 3のプロジェクトで、それぞれurllib2またはurllibが使われていないか、コードを確認することをおすすめします。これらの標準ライブラリの脆弱性はまだ修正されていないため、コードを見直して、個々のプロジェクトがどの程度影響を受けるかを評価することが重要です。
CTFを始めよう
オンデマンドのバーチャル入門ワークショップを視聴して、CTFの課題の解き方を学びましょう。
