Azure WAF のマネージドルールセットが Apache Struts の脆弱性 CVE-2023-50164 に対応したので試してみた

2023.12.31

いわさです。

2023 年 12 月上旬に Apache Struts 2 の脆弱性として CVE-2023-50164 開示されました。

An attacker can manipulate file upload params to enable paths traversal and under some circumstances this can lead to uploading a malicious file which can be used to perform Remote Code Execution. Users are recommended to upgrade to versions Struts 2.5.33 or Struts 6.3.0.2 or greater to fix this issue.

攻撃を防ぎ対策としては上記バージョンまで Struts のバージョンを上げる必要があります。
一方で、ミドルウェアで対策済みだとしても、余計な攻撃リクエストはその前段で検知してバックエンドまで流したくないところです。

Microsoft Azure ではエッジやリバーシプロキシで Azure Web Application Firewall (WAF) を構成することが出来ます。
その Azure WAF のマネージドルールで上記 CVE に関するルールが追加されました。

12 月 24 日 に Application Gateway をターゲットにしたアップデートが、12 月 29 日に Azure Front Door のプレミアムとクラシックをターゲットにしたアップデートが公開されました。

今回は Azure Front Door でマネージドルールを有効化してリクエストがブロックされる様子を観察してみましたので紹介します。

Azure WAF のマネージドルールを確認してみる

今回使用したいのは Azure が提供するマネージドルールセットです。
Azure WAF のマネージドルールは Front Door のプレミアムもしくはクラシックで利用可能なのでスタンダードを利用中の場合は Front Door のアップグレードが必要です。

Front Door のアップグレードは構成メニューから実行が可能です。

Azure Front Door はスタンダード、プレミアム、クラシックで料金がかなり違うので必要な機能にあわせてよく検討しましょう。

サポートされている場合 Azure WAF はマネージドルールとしていくつかのコアルールセットを選択することが出来ます。
Azure Front Door プレミアムの場合は本日時点では Microsoft Default Rule Set (DRS) 2.1 が最新で、クラシックの場合は DRS 1.1 が最新です。
Application Gateway の場合は DRS 2.1 と OWASP 3.2 が最新です。

DRS の場合は99001017というルール ID で CVE-2023-50164 向けのルールが追加されています。
なお、追加されたルールは、Azure Front Door 向けの場合デフォルトで無効状態となっているので有効化操作が必要です。

一方で Application Gateway 向けの場合はデフォルトでルールが有効状態となっていました。

OWASP 3.2 の場合もデフォルトでルールが有効状態です。また、OWASP の場合はルール ID が800114に変わります。

Azure Front Door で有効化してブロックさせてみる

ルール ID 99001017を選択し有効化します。

また、Azure WAF のデフォルト挙動は検出モードになっているので今回は防止(ブロック)モードに変更します。

ルール個別にアクションの変更も可能なので、運用環境では誤ブロックを避けるために検出モードで一定期間運用して、検出状況を判断のうえ防止モードへの変更を検討しましょう。

実際に攻撃を想定したリクエストを送信してテストしたいのですが、次の Akamai のレポートページがとてもわかりやすかったです。

上記を参考に、パスを指定したクエリパラメータを送信してみます。

期待どおりブロックされました。
ちなみにルール ID 99001017 を無効化した場合はオリジンまでリクエストが送信されました。
なお、オリジンは Amazon CloudFront で配信される Web ページだったのですが、CloudFront 側でもブロックされていることを確認しました。AWS WAF の構成状況などは確認していませんが。

-2423, 102, -1962

ブロックログを確認

Azure Front Door はオプションでアクセスログや WAF の検出ログを出力することが出来ます。(デフォルトは無効)

上記手順に従って Log Analytics へ出力してみます。
診断設定を新規作成しました。

ログの配信が開始されるまでタイムラグがありましたが次のようにブロックアクションのログが出力されていました。

さいごに

本日は、Azure WAF のマネージドルールセットが Apache Struts の脆弱性 CVE-2023-50164 に対応したので試してみました。

古いマネージドルールは今回のアップデートの対象外なので、マネージドルールのバージョンに気をつけましょう。冒頭のアップデートアナウンスに対象ルールセットのバージョンは記載されています。
また、Application Gateway と Front Door でルールセットのデフォルトルールの有効化状態が異なっているとは、気をつける必要がありますね。