React Server Componentsの脆弱性、1回のリクエストでNext.jsサーバーを停止させる恐れ

React Server Componentsに、深刻度「高」のサービス拒否(DoS)の脆弱性が見つかりました。細工したHTTP POSTリクエストを1回送るだけで、脆弱なNext.jsサーバーを停止させられる恐れがあります。

この脆弱性は「CVE-2026-23870」として追跡されており、CVSSスコアは7.5です。React 19アプリケーションが使用するReact Server Componentのパッケージが影響を受けます。Server Actionsに到達可能な状態のNext.jsの導入環境も、多くが該当します。

問題は、ReactがServer Actionsに送信されたフォームデータをサーバー側で再構築する処理にあります。Reactはアクションを実行する前に、ユーザーが制御できるマルチパートのフォームデータを解析し、リクエストに埋め込まれた参照を解決します。

参照の種類の一つに、内部的に$Kと表されるものがあり、入れ子になったフォームデータの構造を示します。脆弱なパーサーは$K参照ごとに、リクエストに含まれるすべてのフィールドを列挙し、該当するプレフィックスに一致する名前がないかを確認します。

その結果、計算量が二次式になります。O(n2)O(n^2)O(n2)です。攻撃者は、数千個の$K参照と、数千個の無害な埋め草フィールドを併せて送信できます。参照とフィールドがそれぞれ1万個あれば、Reactは1回のリクエストを処理する間に、約1億回の文字列プレフィックス照合を実行する可能性があります。

この処理はNode.jsのイベントループ上で同期的に実行されるため、解析が終わるまでプロセスが事実上ブロックされます。正規のリクエストは悪意あるリクエストの後ろで待たされ、アプリケーションのタイムアウトやサービス障害を招きます。

React Server Actionsを使うと、開発者はフォームをサーバー側の関数に直接バインドできます。アカウント情報の更新、問い合わせフォーム、購入、コンテンツの投稿といった用途で、最新のReactやNext.jsのアプリケーションに広く使われています。

問題のあるリクエスト解析は、Server Actionのアプリケーションロジックに到達する前に実行されます。そのため、アクション内に実装された認証チェック、CSRF検証、オリジンチェック、認可ロジックといった一般的な防御策では、解析処理そのものの負荷を抑えられません。

攻撃者は通常、Server Actionのエンドポイントとアクション識別子を特定する必要があります。ただし、公開されているアプリケーションでは、配信されるページの内容やJavaScriptバンドルからアクションのメタデータが分かる場合があります。特権的なアクセスがなくても、特定は十分に可能です。

Simonkoeck氏は、影響は可用性に限られると述べています。割り当てられたCVSSベクターでは、ネットワーク経由で到達可能、攻撃の複雑さは低く、必要な権限やユーザー操作はなく、可用性への影響が高いと評価されています。

Metaのアドバイザリーは、次のパッケージが脆弱であるとしています。

上流の修正では、CPU使用率の急上昇を招いていた、リクエスト全体の繰り返しスキャンを取り除きました。修正版の実装は、入れ子の参照ごとにフォームデータの先頭からやり直すのをやめ、解析の進捗を追跡します。各フィールドは共通の走査で処理されます。

これにより、攻撃者が制御できる負荷は、繰り返しの再スキャンから線形の解析モデルへと変わります。小さなリクエスト1つが数百万回もの比較処理に膨れ上がる事態を防げます。

Next.jsやその他のReact Server Componentを導入している組織は、最上位のreactパッケージだけでなく、推移的依存関係も直ちに監査してください。そのうえで、該当するreact-server-dom-*パッケージ群をReact 19.0.6、19.1.7、19.2.6、またはそれ以降にアップグレードする必要があります。

パッチの適用が完了するまでは、リバースプロキシやWebアプリケーションファイアウォール(WAF)で、リクエストサイズとマルチパートのフィールド数に制限を設けるとよいでしょう。ただし、これらは暫定的な緩和策にすぎず、上流の修正の代わりにはなりません。

1万6,000以上のSOCチームがANY.RUNを活用し、脅威調査の効率化と手作業の削減を実現しています。チームでの利用を検討する

翻訳元: https://cyberpress.org/react-server-components-flaw-2/

本記事は cyberpress.org の記事を翻訳・要約したものです。