---
title: "Apache Struts 2 の REST プラグインで、@JsonAnySetter への入力が @StrutsParameter の認可チェックを通らない問題（JVN#82782759・7.2.1〜7.3.0・7.4.0 で修正）"
url: https://n-t-p.io/worldsecurity/articles/apache-struts2-rest-plugin-jsonanysetter-strutsparameter-bypass-jvn82782759
lang: ja
kind: 速報
category: 脆弱性・CVE
author: World Security 編集部
published: 2026年11月7日
updated: 2026年11月7日
severity: 中
---

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

> **TL;DR:** Apache Struts 2 の REST プラグイン 7.2.1〜7.3.0 で、@JsonAnySetter への入力が @StrutsParameter の認可チェックを通らず、データを改ざんされる恐れ（JVN#82782759）。any-setter を自作クラスで使っている場合のみ。7.4.0 で修正（設定の有効化が必要）。

**要点**
- JVN#82782759（2026-10-29 公開）: Apache Struts 2 の REST プラグインで、Jackson の @JsonAnySetter が付いたメンバーに @StrutsParameter の認可チェックが行われない。対象は 7.2.1〜7.3.0。
- 発生条件は、struts.parameters.requireAnnotations=true が有効で、アプリ自身が REST のリクエストボディを受けるクラスに @JsonAnySetter を宣言していること。影響はデータの改ざん（JVN）。
- CVE 番号と CVSS は JVN に記載なし。severity 案は medium（条件が限られ、影響が改ざんにとどまるため）。CISA KEV 掲載なし。
- 修正は 7.4.0 以降（2026-10-02 公開）。更新後に struts.rest.anySetter.requireAnnotations=true を設定し、各 any-setter に @StrutsParameter(allowDynamicKeys = true) を付ける。初期値は false。
- 悪用の有無、改ざんできる範囲の具体例、6.x 系などへの影響は未確認。本稿は公開情報の読み取りで、再現はしていない。

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 の検索でも該当を確認できず） |
| CVSS | JVN に記載なし |
| 影響（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 が調整したとしています。報告者の個人名と所属は本稿に載せていません。


## 出典
- [JVN#82782759 Apache Struts 2 RESTプラグインにおける、@StrutsParameterの制限が@JsonAnySetterに適用されない問題](https://jvn.jp/jp/JVN82782759/) — JPCERT/CC（JVN）
- [WW-5712 ParameterAuthorizingModule does not wrap the Jackson any-setter in the REST plugin](https://issues.apache.org/jira/browse/WW-5712) — Apache Struts（Jira）
- [Apache Struts 7.4.0 General Availability（2026-10-02）](https://struts.apache.org/announce-2026) — Apache Struts
- [NVD（CVE 番号の該当なしを確認）](https://nvd.nist.gov/vuln/search) — NIST NVD
- [CISA KEV カタログ（掲載なし）](https://www.cisa.gov/known-exploited-vulnerabilities-catalog) — CISA

---
出典: World Security（株式会社NTP） https://n-t-p.io/worldsecurity/articles/apache-struts2-rest-plugin-jsonanysetter-strutsparameter-bypass-jvn82782759