ModSecurity WAFの脆弱性、細工したHTTPリクエストでファイルアップロード制限を回避される恐れ

オープンソースのWebアプリケーションファイアウォール(WAF)「ModSecurity」で、深刻度「高」の脆弱性が2件見つかりました。攻撃者は細工したHTTPリクエストを1回送るだけで、アップロードフィルターをすり抜けたり、サーバーのワーカープロセスをクラッシュさせたりできます。メンテナーは2026年9月30日に両方のセキュリティアドバイザリを公開しました。今回は、WAFのバイパスを可能にする複数のModSecurity脆弱性を含む、大規模な修正の一環です。

StudySecurity

ModSecurity WAFの脆弱性

1件目の脆弱性はGHSA-5pww-8rfg-9crfで、CVE-2026-104269として管理されています。CVSSスコアは8.6(高)です。ModSecurity 3.0.0以降が影響を受けますが、アドバイザリには修正済みバージョンが記載されていません。

原因は、パーサー間の解釈の不一致です。ModSecurityのマルチパートパーサーは、Content-Dispositionヘッダーの拡張パラメーターfilename*を定めるRFC 2231に対応していません。そのため、920120、922100、922110といったOWASP CRSのルールは、通常のfilenameの値しか検査しません。

RFCに準拠した多くのバックエンドは、両方のパラメーターが存在する場合にfilename*を優先します。アドバイザリでは、Go(net/http)、Python(Flask/WerkzeugおよびFastAPI/Starlette)、Node.js(busboyおよび@fastify/multipart)、Java(Spring)で、この挙動を確認したとしています。一方、PHPのネイティブなマルチパート処理はfilename=のみを読み取るため、影響を受けません。

攻撃者は、filename=”safe.jpg”; filename*=UTF-8”shell.phpというヘッダーを送信します。CRSは無害な.jpgファイルと判断してアップロードを許可しますが、バックエンドはshell.phpにデコードしてディスクに書き込みます。

このファイルがWebからアクセス可能なディレクトリに置かれると、リモートコード実行につながります。CVSSベクターはAV:N/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:Nで、認証もユーザー操作も必要ありません。この脆弱性は研究者の0xkalawy氏とZeyadZonkorany氏が発見し、B0YK4氏が調整のうえ開示しました。

これは、WAFとWebフレームワークが同じリクエストを異なる形で解釈する問題を扱ったWAFFLED研究で示されたパーサー差異問題の、新たな事例といえます。

2件目の脆弱性はGHSA-jx3r-phvx-2jmjで、CVE-2026-73857として管理されています。CVSSスコアは7.5(高)です。ModSecurity v3のXMLリクエストボディプロセッサーにおける未初期化ポインターの参照が原因で、CWE-787とCWE-824に分類されています。

この脆弱性は、Tobias Klein氏がメールで報告しました。攻撃者は1回のリクエストでワーカープロセスを操作し、自身が制御するメモリアドレスに定数値を書き込めます。これにより、制限付きのwrite-what-where状態が生じます。想定される影響は、サービス拒否(DoS)やメモリ内容の漏えいから、コード実行の可能性にまで及びます。

StudySecurity

この不具合を悪用できるのは、SecParseXmlIntoArgsディレクティブが「On」または「OnlyArgs」に設定されている場合に限られます。デフォルトでは無効です。影響を受けるのは、3.0.15、3.0.16、および現行のv3/masterブランチです。それより前の3.0.xリリースとModSecurity v2.xは影響を受けません。アドバイザリでは、修正済みバージョンを3.0.17としています。

管理者はlibmodsecurity3をバージョン3.0.17にアップグレードしてください。XML引数の解析が必要な場合を除き、SecParseXmlIntoArgsディレクティブはOffのままにしておくことを推奨します。

ファイル名の回避への対策として、アプリケーションがファイルの保存に使うのと同じデコード後のファイル名で、サーバー側の拡張子とコンテンツを検証する必要があります。あわせて、アップロードされたファイルはWebルートの外に保存し、アップロード用ディレクトリではスクリプトの実行をブロックしてください。

最後に、filename*を含むペイロードでアップロードルールをテストし、filenameとfilename*の両方のパラメーターを含むリクエストがないか、ログを確認することも重要です。

SOCにアラートの文脈を提供し、インシデントを迅速に止めましょう。16K SOCの脅威インテリジェンスを統合。

翻訳元: https://gbhackers.com/modsecurity-waf-vulnerability-2/

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