HTTP/2 Rapid Resetのゼロデイ脆弱性(CVE-2023-44487)を検出して修正する
2023年10月11日
0 分で読めます研究者やベンダーが、2023年8月から10月にかけて実際に発生した大規模なDDoS攻撃を調査した結果、広く採用されているHTTP/2プロトコルの機能であるストリーム多重化を悪用する、新たな「Rapid Reset」手法が発見されました。
本日公開されたHTTP/2 Rapid Reset脆弱性は、 CVE-2023-44487 として追跡されており、重大度はHigh、CVSSスコアは7.5(10点満点)と評価されています。
この脆弱性は、HTTP/2を実装するすべてのWebサーバーに影響すると考えられており、悪用された場合、極めて大規模なDDoS攻撃につながる可能性があります。アプリケーションまたはオペレーティングシステムのパッケージにこのCVEの影響があり、かつそのパッケージがインターネットに接続されたアプリケーションに含まれている場合は、次の対応をご検討ください。
インフラストラクチャやCDNのプロバイダー(Cloudflare、Google Cloud、AWS、Akamaiなど)に確認し、この脆弱性への対策が講じられていることを確かめてください。
修正版が提供されている場合は、パッケージをアップグレードしてください。一部のパッケージでは、すでに修正版が公開されています。
Snykはこの脆弱性の影響を受けません
外部からアクセス可能なSnykのサービスはすべて、Akamaiまたはクラウドロードバランサーの背後でホストされており、すでに対策が講じられているため保護されています。
インフラストラクチャプロバイダーによる緩和策
この新たなDDoS攻撃手法への露出を低減するため、必要に応じてインフラストラクチャプロバイダーやCDNを通じて構成変更と緩和策を適用することを、まず組織に推奨します。
Cloudflare:HTTP/2 Rapid Reset:記録破りの攻撃を解説
インフラストラクチャプロバイダーやクラウドロードバランサーを通じてこの脆弱性への露出を効果的に緩和できますが、それだけで終わらせず、このCVEの影響を受ける可能性のあるすべてのパッケージをアップグレードして、根本から修正することが重要です。
パッケージを修正版にアップグレードする
次に、コンテナイメージやオープンソースのエコシステムに影響がないか確認し、アップデートが提供されている場合は適用してください。このCVEに関するすべてのアドバイザリは、パッケージマネージャーまたはコンテナディストリビューションを選択して、Snyk Vulnerability Databaseで確認できます。

SnykでHTTP/2脆弱性を検出する
プロジェクトやアプリケーションへの影響を確認するには、Issue Detailレポートで「CVE-2023-44487」をフィルタリングし、この脆弱性を含むパッケージが使われているプロジェクトを特定できます。

Snyk CLIでプロジェクトをテストする
Snykを使えば、さまざまな方法でHTTP/2脆弱性を検出して修正できます。無料でご利用いただけます。Snyk CLIを使えば、プロジェクトをローカルでテストできます。
パッケージマネージャーを使うプロジェクトのテスト
アプリケーションの場合、Snyk CLIでsnyk testを実行すると、リポジトリ内の依存関係を照合し、個々のパッケージとその脆弱性を検出できます。snyk test --all-projectsで全プロジェクトをテストできます。また、--package-manager=フラグでパッケージマネージャーを指定し、--file=フラグを使って標準以外の要件ファイルを指定できます。
現在、--package-manager=フラグで指定できる引数には、cocoapods、composer、golangdep、maven、npm、pipなどがあります(その他のオプションはCLIを参照してください)。
C++プロジェクトをCLIでテストする
アプリケーションの場合、Snyk CLIでsnyk test --unmanagedを実行すると、リポジトリ内の管理対象外の依存関係を照合し、個々のパッケージとその脆弱性を検出できます。
CLIでコンテナイメージをテストする
コンテナの場合、snyk container testを実行すると、脆弱なバージョンのHTTP/2に依存するオペレーティングシステムのパッケージを検出できます。最良の結果を得るには、イメージ名と、そのイメージの作成に使ったDockerfileへのパスの両方を指定してください。例:
Git/SCMインテグレーションを使ってプロジェクトをテストする
サポート対象のSCMインテグレーション(GitHub、Bitbucket、GitLab、Azure Repos)を使ってプロジェクトをSnykにインポートすると、自動的にテストが開始されます。Snyk UIでプロジェクト内のhttp/2脆弱性を特定、優先順位付けし、修正が提供された場合に対処できます。
HTTP/2脆弱性を修正する
環境内の脆弱なパッケージやコンテナを特定したら、Snykで修正できます。方法は似ていますが、いくつか選択肢があります。
オープンソースコンポーネントの場合
自動修正:SnykをGitリポジトリに接続すると、可能な場合に依存関係グラフを更新するプルリクエストが作成されます。その後、アプリケーションを再ビルドします。
手動修正(方法1):HTTP/2脆弱性の影響を受けるコンポーネントが直接依存関係にある場合は、依存関係ファイルを更新して該当する修正版を指定し、アプリケーションを再ビルドします。
手動修正(方法2):アプリケーションがHTTP/2脆弱性の影響を受けるコンポーネントを間接依存関係または推移的依存関係として使用している場合は、影響を受ける依存関係の更新版を取り込む直接依存関係のバージョンを特定し、アプリケーションを再ビルドします。また、パッケージマネージャーがオーバーライドに対応している場合は、その依存関係を直接依存関係として扱い、要件ファイルに修正版を指定できます。
コンテナイメージの場合
自動修正:SnykをGitリポジトリに接続すると、可能な場合にDockerfileのベースイメージを更新するプルリクエストが作成されます。
https://snyk.io/test/docker/<image_name>を使って、提案されたベースイメージへのアップグレード後も脆弱性が残るか確認してください。適切なアップグレード方法を特定したら、コンテナを再ビルドします。
![ベースイメージのアップグレードに関する推奨事項、脆弱性の件数と深刻度、[修正PRを作成]ボタンを表示するSnykプロジェクトダッシュボード。](https://res.cloudinary.com/snyk/image/upload/f_auto,w_2560,q_auto/v1697061559/blog-http2-vuln-fix.png)
手動修正:イメージに脆弱なパッケージの脆弱なバージョンが含まれていて、ベースイメージをアップグレードできない、またはアップグレードを希望しない場合は、Snyk Containerの修正ガイダンスに従って手動でアップグレードできます。
修正がまだ提供されていない場合
特定のパッケージやコンテナをアップグレードできない場合、この脆弱性は前述のように、呼び出し経路に到達する前に緩和できます。たとえば、この脆弱性の影響を受けるサービスがクラウドロードバランサー経由でインターネットに公開されている場合、主要なクラウドプロバイダーはすでに自社環境でリスクを緩和しているため、影響を受けません。
カスタムポリシーを使ってこの脆弱性の優先度を変更する方法
HTTP/2脆弱性の可視性を高めるために優先度を上げたい場合は、Snykのカスタムポリシーを活用できます。これを使って脆弱性の優先度を変更できます。現在、CVEの重大度はHighに設定されていますが、優先度を変更したい場合は、CVE-2023-44487に適用するポリシーを作成し、重大度をCriticalに変更できます。

反対に、別の方法でリスクを緩和している場合は、レポートに実態を正確に反映するため、重大度をLowに変更できます。
カスタム重大度ポリシーを追加した後に再テスト
カスタム重大度ポリシーを追加した後、重大度の変更を反映するにはプロジェクトを再テストする必要があります。
HTTP/2脆弱性への対応における次のステップ
この新たなDDoS攻撃手法への露出を低減するため、インフラストラクチャプロバイダーやCDNを通じて構成変更と緩和策を適用してください。
この記事で紹介した方法を使って、Snykでプロジェクトをテストしてください。利用を開始するには、Snykの無料アカウントに登録し、インポートウィザードから、影響を受ける可能性のあるプロジェクトをすべてインポートしてスキャンします。
修正が提供されたら、影響を受けるライブラリを修正版に更新し、修正版のベースイメージを使って新しいコンテナイメージをビルドしてください。
今後の状況を継続的に確認し、Twitter/X(@snyksec)をフォローしてください。また、最新情報はSnyk Blogで随時ご確認ください。Snykのセキュリティチームも、最新情報に合わせてリソースを定期的に更新します。
CTFを始めよう
オンデマンドのバーチャル入門ワークショップを視聴して、CTFの課題の解き方を学びましょう。
