RHSB-2023-003 HTTP/2 Rapid Reset (CVE-2023-44487 and CVE-2023-39325)
更新
この情報は役に立ちましたか?
エグゼクティブサマリー
Red Hat は、“Rapid Reset Attack” と呼ばれる、DDoS (分散型サービス妨害) 攻撃に対する脆弱性を把握しています。この脆弱性は多数の HTTP/2 実装に影響を及ぼし、CVE-2023-44487 および CVE-2023-39325 が割り当てられています。
この問題の CVSSv3 スコア は 7.5 と評価され、セキュリティーへの影響度は Important (重要) に分類されています。
米国サイバーセキュリティー・社会基盤安全保障庁 (CISA) は、この脆弱性をアクティブエクスプロイトとして宣言しました。また、2023 年 8 月以降において、この脆弱性が実際に能動的に悪用されているとも報告されました。
Red Hat は影響を受ける製品の特定を進めていますが、現時点で確認された影響を受ける製品のリストは CVE-2023-44487 および CVE-2023-39325 で確認できます。
さらに、Red Hat Enterprise Linux でサポートされている Red Hat 製品 (RHEL CoreOS を含む) も影響を受ける可能性があります。具体的には、次の製品が含まれます。
RHEL または UBI コンテナーイメージをベースとする製品コンテナー。この不具合に対する修正が存在するかを示すコンテナーヘルス (Red Hat コンテナーカタログ の コンテナーヘルスインデックスを参照) を含め、これらのイメージは定期的に更新されます。さらに、ベースイメージが更新されるとお客様のコンテナーが再ビルドされるはずです。
RHEL チャネルからパッケージをプルする製品。これには、Red Hat OpenShift Container Platform、Red Hat OpenStack Platform、Red Hat Virtualization などのレイヤー製品も含まれます。これらの製品環境で、影響を受ける RHEL パッケージが最新の状態であることを確認してください。
テクニカルサマリー
HTTP/2 プロトコルは、クライアントとサーバーの間の通信を確立するために一連の多重化ストリームを使用しており、その結果として通信のスループットが向上します。
CVE-2023-44487 および CVE-2023-39325 の攻撃者は、多数のストリームを作成し、その後各ストリームをキャンセルします。この問題が発生するとサーバーはリソース不足に陥り、最終的には他の有効なリクエストを処理できなくなります。
軽減策
ユーザーにおいては、修正が入手可能になり次第、ソフトウェアを更新することが強く推奨されます。
この不具合には、いくつかの軽減策があります。
状況的に可能であれば、ユーザーが http2 エンドポイントを無効にすることで、修正が利用可能になるまでこの不具合を完全に回避できます。
ネットワークエンドポイントで、IP ベースのブロッキングまたはフラッド保護、およびレート制御ツールを使用して、受信トラフィックをフィルタリングできます。
パッケージ固有の軽減策もいくつか利用できます。
nginx: https://www.nginx.com/blog/http-2-rapid-reset-attack-impacting-f5-nginx-products/
netty: https://github.com/netty/netty/security/advisories/GHSA-xpw8-rcwv-8f8p
haproxy: https://www.haproxy.com/blog/haproxy-is-not-affected-by-the-http-2-rapid-reset-attack-cve-2023-44487
nghttp2: https://github.com/nghttp2/nghttp2/security/advisories/GHSA-vx74-f528-fxqg
golang: golang のデフォルトのストリーム同時実行制限は、HTTP/2 接続あたり 250 ストリーム (リクエスト) です。この値は、golang.org/x/net/http2 で入手できる Server.MaxConcurrentStreams 設定と ConfigureServer 関数を使用して、golang.org/x/net/http2 パッケージで調整できます。
技術情報
HTTP/1.1 とは異なり、HTTP/2 プロトコルは一連のデータストリームを使用してクライアントとサーバーの間の通信を確立します。これにより、クライアントは 1 つの接続内で複数のリクエストを送信できるようになり、リクエストはサーバー側でさらに並列処理できます。HTTP/2 には、サーバーに RST_STREAM フレームを送信することで、以前に送信したストリームをクライアントがキャンセルできる機能もあります。クライアントは、サーバーが RST_STREAM フレームを受信した直後にストリームがキャンセルされたと想定する可能性があります。
この脆弱性は両機能を悪用しており、同じ接続内で多数のストリームを作成した後、最初のリクエストに対する応答を受信する前に、RST_STREAM フレームを使用してストリームをキャンセルします。これには、送信されたすべてのフレームを展開および解釈し、大量のリソースを割り当て、最終的にシステムを枯渇させるサーバーも含まれます。この動作を悪用することで、攻撃者はサーバーに設定されている接続上限を超過することなく、標的システムのパフォーマンスに大きなペナルティーを課します。
NGINX は、パフォーマンスとリソース消費を理由に、同時ストリーム数をデフォルトで 128 に制限しています。詳細は、http2_max_concurrent_streams を参照してください。さらに NGINX では、ネットワークとサーバーのパフォーマンスバランスを最適化するために、クライアントは HTTP キープアライブを使用して、デフォルトで 最大 1000 のリクエストの HTTP 接続を維持できます。詳細は、keepalive_requests を参照してください。
影響を受ける製品の更新
Red Hat は影響を受ける製品の特定を進めていますが、現時点で確認された影響を受ける製品のリストは CVE-2023-44487 および CVE-2023-39325 で確認できます。
影響のあるバージョンの Red Hat 製品をご使用のお客様は、エラータが入手可能になり次第、該当製品を更新することが強く推奨されます。
診断
curl は、指定されたサーバーの実際の HTTP プロトコルバージョンを報告して、指定されたサーバーの HTTP バージョンを特定できます。以下のスクリプトを使用してください。https://redhat.com をテストする場合:
$ curl -sl https://redhat.com -o/dev/null -w '%{http_version}\n'
1.1
HTTPS とポート 20346 を使用して、仮定のサーバー 172.16.8.3 をテストする必要がある場合:
$ curl -sl https://172.16.8.3:20346 -o/dev/null -w '%{http_version}\n'
2
1.1 または 1 を返すシステムは、この CVE に対して脆弱ではありません。バージョン 2 を返すシステムは、この脆弱性の影響を受ける可能性があります。
参考資料
https://www.cisa.gov/news-events/alerts/2023/10/10/http2-rapid-reset-vulnerability-cve-2023-44487
https://www.openwall.com/lists/oss-security/2023/10/10/6
GPG を使用して Product Security の署名済みコンテンツを検証する方法
Comments