公開日:2026/10/29 最終更新日:2026/10/29

JVN#82782759
Apache Struts 2 RESTプラグインにおける、@StrutsParameterの制限が@JsonAnySetterに適用されない問題

概要

The Apache Software Foundationが提供するApache Struts 2のRESTプラグインには、Jacksonの@JsonAnySetterが指定されたフィールドやメソッドに対して@StrutsParameterの制限が行われない問題が存在します。

影響を受けるシステム

  • Apache Struts 2 バージョン7.2.1から7.3.0

詳細情報

Apache Struts 2 RESTプラグインに含まれるParameterAuthorizingModuleは、JSONやXMLのリクエストボディからオブジェクトへのデシリアライズを行う際に、@StrutsParameterの指定を参照して、許可されていないパラメータがセットされないように検証・ブロックを行います。また、RESTプラグインはデシリアライズを行うエンジンとしてJacksonを内包しています。Jacksonには、動的キーを受け取りマッピングを行う@JsonAnySetterアノテーションという機能があります。

このParameterAuthorizingModuleには、@JsonAnySetterが指定されたフィールドやメソッドに対して、上記の認可処理(検証・ブロック)が行われない問題が存在します。

この問題は、@StrutsParameterが有効化されており(struts.parameters.requireAnnotations=true)、アプリケーションがRESTリクエストのボディからバインドされるアクションまたはモデルクラスにおいて@JsonAnySetterを宣言している場合にのみ発生します。

想定される影響

@JsonAnySetterが指定されたメンバーへの入力値に対して@StrutsParameterによる認可チェックが行われず、データの改ざんにつながる可能性があります。

対策方法

アップデートする
開発者が提供する情報をもとに、バージョン7.4.0およびそれ以降の最新版にアップデートしてください。
そのうえで、struts.rest.anySetter.requireAnnotations=trueを設定し、any-setterとして利用する各メソッドに @StrutsParameter(allowDynamicKeys = true)アノテーションを付与してください。 こうすることで、アノテーションが付与されていないany-setterには、値が設定されなくなります。

ワークアラウンドを実施する

  • RESTのパラメータが注入されるActionやModelクラスでは@JsonAnySetterアノテーションを用いない
  • @JsonAnySetterが必要な場合は、値を格納する前にアプリケーション側で検証する

参考情報

JPCERT/CCからの補足情報

JPCERT/CCによる脆弱性分析結果

謝辞

この情報は、情報セキュリティ早期警戒パートナーシップに基づき下記の方がIPAに報告しました。
報告者:三井物産セキュアディレクション株式会社 小河哲之 氏

本製品の開発者は、上記の方から報告を受けるより前にDarren Carreras, GitHub: carrerasdarren-cell 氏から報告を受け、対応を進めました。
JPCERT/CCは開発者との調整を行い、JVN公表に至りました。

関連文書

JPCERT 緊急報告
JPCERT REPORT
CERT Advisory
CPNI Advisory
TRnotes
CVE
JVN iPedia