脆弱性・CVE速報深刻度: 中

Apache Struts 2 の REST プラグインで、@JsonAnySetter への入力が @StrutsParameter の認可チェックを通らない問題(JVN#82782759・7.2.1〜7.3.0・7.4.0 で修正)

目次(6)

Apache Struts 2 の REST プラグインに、Jackson の @JsonAnySetter が付いたフィールドやメソッドへの入力が、@StrutsParameter による認可チェックの対象にならない問題があります。JPCERT/CC は JVN#82782759 として 2026-10-29 に公開しました。対象は Struts 2 の 7.2.1 から 7.3.0 で、JVN は 7.4.0 以降への更新を案内しています。JVN には CVE 番号も CVSS も載っていません。

内容

REST プラグインの ParameterAuthorizingModule は、JSON や XML のリクエストボディをオブジェクトに変換するとき、@StrutsParameter の指定を見て、許可されていないパラメーターが設定されないようにします。ところが、Jackson の @JsonAnySetter(名前が決まっていないキーを受け取る仕組み)が付いたメンバーには、この確認が行われません。JVN は、データの改ざんにつながる可能性があるとしています。

Apache の課題票(WW-5712)によると、原因は、通常のプロパティだけを認可の部品で包み、any-setter を包んでいなかったことです。メソッド、フィールド、@JsonCreator の引数の 3 つの形がすべて対象で、JSON と XML のどちらのボディでも同じ動きになります。

発生する条件は限られます。

  • @StrutsParameter の強制が有効(struts.parameters.requireAnnotations=true)。
  • アプリケーション自身が、REST のリクエストボディから値を受け取るアクションまたはモデルのクラスで @JsonAnySetter を宣言している。

このため、any-setter を使っていないアプリケーションには影響しません。具体的にどのデータをどこまで書き換えられるかは、アプリケーションの作りで変わり、JVN には書かれていません(未確認)。本稿は公開情報を読んだだけで、再現はしていません。

影響を受ける範囲

  • Apache Struts 2 の 7.2.1 から 7.3.0(REST プラグインを使い、上の条件を満たす場合)。
  • 7.2.1 より前や 6.x 系への影響は、JVN に記載がありません(未確認)。

評価

指標値
CVE 番号なし(JVN・Apache の課題票に記載なし。NVD の検索でも該当を確認できず)
CVSSJVN に記載なし
影響(JVN)データの改ざん
CISA KEV掲載なし(11/7 確認。Struts 関連は過去の別の脆弱性のみ)
  • 数値の評価がないため、当サイトの基準では、利用者の組み立てに依存する条件があり影響がデータの改ざんにとどまることから、medium を案とします。
  • 認証が不要かどうかは、アプリケーションの REST 入口がどう守られているかで変わるため、本稿では判断していません(未確認)。

修正と回避策

  • 修正: 7.4.0 以降(Apache の発表では 2026-10-02 公開)。課題票は 2026-09-11 に解決済みです。
  • 更新後の設定: struts.rest.anySetter.requireAnnotations=true を設定し、any-setter として使う各メソッドに @StrutsParameter(allowDynamicKeys = true) を付けます。付いていない any-setter には値が入らなくなります。この設定の初期値は false で、更新しただけでは動きが変わらないとされています。
  • 回避策: REST のパラメーターが入るアクションやモデルのクラスで @JsonAnySetter を使わない。使う場合は、値を保存する前にアプリケーション側で検証します。

利用者が考えられること

  1. REST プラグインを使っているなら、Struts のバージョンが 7.2.1〜7.3.0 かを確認します。
  2. 自分のコードで、リクエストボディを受けるクラスに @JsonAnySetter があるかを検索します。無ければ影響は出ません。
  3. 7.4.0 以降へ更新し、上の設定と @StrutsParameter(allowDynamicKeys = true) の付与を行います。更新だけでは確認が有効にならない点に注意してください。

未確認の点

  • CVE 番号と CVSS の有無(JVN の公開時点では記載なし)。
  • 悪用の有無(CISA KEV に掲載なし。JVN にも悪用の記載なし)。
  • 書き換えられる範囲の具体例、7.2.1 より前や 6.x 系への影響。
  • JVN は、報告が情報セキュリティ早期警戒パートナーシップに基づいて IPA に届けられ、JPCERT/CC が調整したとしています。報告者の個人名と所属は本稿に載せていません。

この記事について

AI の利用
本記事は AI が JVN・Apache Struts の課題票と発表・CISA などの公開情報をもとに作成しました。数値は取得時点(2026-11-07)のもので、未確認の点は本文に明記しています。

出典

この記事を共有