OWASP CRSの脆弱性により、攻撃者が文字セット検証を回避可能に

OWASP Core Rule Set(CRS)における重大なセキュリティ脆弱性が公開され、攻撃者がmultipartフォームデータリクエストにおける文字セット検証を回避できるようになります。

この脆弱性はCVE-2026-21876として追跡され、CVSSスコア9.3(CRITICAL)で、CRSのサポート対象となるすべてのバージョンに影響し、脆弱なルールが初めて導入された時点から存在していました。

デフォルトでParanoia Level 1の保護として有効になっているルール922110の欠陥により、攻撃者はUTF-7でエンコードされた XSSペイロード や、その他の文字セットベースの攻撃をバックエンドアプリケーションに届けることが可能になります。

この脆弱性は、ModSecurityの連鎖ルールがコレクション変数を処理する方法に起因しており、リクエストのすべてのパートではなく、最後のmultipartパートのみを検証してしまいます。

Felipe Zipitria氏とOWASP CRSチームによる脆弱性開示によれば、「これは単純なコーディングミスではなく、ModSecurityの設計、コレクション反復の仕組み、そして連鎖ルールの実行方法の相互作用によるものです」。パッチは2026年1月6日時点で、CRS 4.22.0およびCRS 3.3.8向けにすでにリリースされています。

この脆弱性は、ModSecurityがコレクション変数を反復処理する際に連鎖ルールを処理する方法における根本的な挙動を悪用します。

ルール922110は、multipart/form-dataリクエスト内のContent-Typeヘッダーに含まれる文字セットパラメータを検証するよう設計されており、UTF-7、UTF-16、UTF-32といった、XSS攻撃に悪用され得る危険なエンコーディングをブロックします。

しかし、このルールが検証していたのは最後のmultipartパートの文字セットパラメータのみでした。ModSecurityがルール処理中にMULTIPART_PART_HEADERSを反復する際、各反復でキャプチャ変数(TX:1)が現在の値で上書きされます。

すべての反復が完了した後、連鎖ルールは最後にキャプチャされた値だけを用いて一度だけ実行されるため、先行するパートは未検証のままになります。

攻撃者は、最初のパートにUTF-7でエンコードしたXSSペイロードを入れ、最後のパートに正当なUTF-8文字セットを入れたmultipartリクエストを作成できます。

脆弱なルールは正当な最後のパートのみを検証するため、攻撃はWAFを回避できます:

この脆弱性がCRITICAL評価となったのは、WAFの保護とバックエンドアプリケーションの間にあるセキュリティ境界を越えてしまうためです。

攻撃ベクトルは作成が容易で、認証やユーザー操作を必要とせず、バージョン3.0.0から4.21.0を実行しているすべてのCRSインストールに影響します。

OWASP CRSチームは、最後の要素だけでなくすべての構成要素を検証することで脆弱性に対処したパッチ適用版をリリース しました。

この修正では、更新されたルール922110と連携して動作する2つの新しいヘルパールール(922140および922150)が導入されます:

このパッチは、インクリメンタルなカウンタ機構を用いて、キャプチャした各文字セット値に対して一意の保存キーを作成し、上書きされるキャプチャ変数に依存するのではなく、保存されたすべての値を検証します。

このアプローチにより、ModSecurity v2、v3、およびCoraza WAFエンジン間での互換性が維持されます。

OWASP CRSを導入している組織は、直ちにパッチ適用版へのアップグレードを最優先すべきです。

この脆弱性により、攻撃者はWAFの保護を回避して文字セットでエンコードされた攻撃を脆弱なバックエンドアプリケーションに到達させることができ、近年で最も重大なCRSセキュリティ問題の一つとなっています。

未パッチ版に対する回避策は、ルール922110を完全に無効化する以外に存在せず、その場合アプリケーションは文字セットベースの攻撃ベクトルに対して無防備になります。

翻訳元: https://cyberpress.org/owasp-crs-vulnerability/

ソース: cyberpress.org