Java / JVMApache Strutsコード実行深刻度 高悪用確認

Apache Strutsの脆弱性CVE-2016-3081|S2-032のKEV追加と確認方法・移行先

公開 2026-11-09公表 2016-04-19資料確認 2026-11-09Java / JVMの脆弱性 53件のまとめ
起きること外からサーバーを乗っ取られるおそれ(米国の政府機関が悪用を確認)
使われている所Javaで作られた古い業務システム・会員サイト(Struts 2の2.3系)
対象製品Apache Struts
識別番号CVE-2016-3081・GHSA-8c6j-ffmf-q6vm
影響範囲Struts 2.3.20〜2.3.28(2.3.20.3と2.3.24.3を除く、提供元の告知)。NVD・GitHub Advisoryでは2.3.19以上。動的メソッド呼び出し(DMI)を有効にしている場合
修正情報2.3.20.3・2.3.24.3・2.3.28.1(2.3系は2019年9月にサポート終了。上げるなら6.8.0以上か7.1.1以上)
次にやること①Strutsの版と設定を確かめる ②攻撃の痕跡を確かめる ③サポート中の版へ移行する

JavaのフレームワークApache Struts 2の脆弱性S2-032(CVE-2016-3081)を、米CISAが2026年10月8日に「悪用が確認された脆弱性の一覧(KEV)」へ追加しました。2016年4月に公表された件で、動的メソッド呼び出し(DMI)を有効にした2.3系では、細工したリクエストでサーバー上のコードを実行されるおそれがあります。2.3系はサポートが終わっているため、版と設定を確かめ、6系・7系への移行を進めます。[1][3][5]

この記事の要点
  • 対象は2.3.20〜2.3.28(2.3.20.3・2.3.24.3を除く)のうちstruts.enable.DynamicMethodInvocationをtrueにしている場合です。2.3系の既定値はfalseです。[1][7]
  • KEVへの追加は2026年10月8日で、対応の期限は10月11日でした。今後30日に悪用される見込みの推定(EPSS)は96.5%です(11月8日時点)。[5][6]
  • 修正版は2.3.20.3・2.3.24.3・2.3.28.1ですが、2.3系は2019年9月12日にサポートが終わり、その後の脆弱性はこの系列で直っていません。[1][9][11]
  • アクセスログで、名前がmethod:で始まるパラメータを含むリクエストを探し、更新前に攻撃を受けていないかを確かめます。[1][3]

01S2-032で起きること

Struts 2には、URLやパラメータで呼び出すメソッドを指定できる「動的メソッド呼び出し(DMI)」という機能があります。S2-032は、この機能が有効なときに、名前がmethod:で始まるパラメータに細工した式を入れると、サーバー側で任意のコードを実行できるという脆弱性です。[1][8]

提供元のApache Strutsは深刻度を「Important」とし、影響を「コード実行のおそれ」としています。NVDの評価はCVSS 3.1で8.1(高)で、攻撃の難しさは「高」、認証は不要です。[1][3]

DMIが有効な2.3系で、method:のパラメータからコードが実行される

提供元の告知にある仕組みを、入口・脆弱な部品・起きることの順に並べる。

攻撃者のリクエスト名前がmethod:で始まるパラメータに細工した式を入れる
リクエストを送る

Apache Struts 2.3.20〜2.3.28

動的メソッド呼び出し(DMI)struts.enable.DynamicMethodInvocationがtrue
式の評価つないだ式がサーバー側で評価される
サーバー上で実行
任意のコード実行アプリの実行ユーザーの権限で動く

出典 Apache Struts「S2-032」、NVD「CVE-2016-3081」

02Strutsのアプリが対象になる条件

  • 版:提供元の告知では2.3.20〜2.3.28(2.3.20.3と2.3.24.3を除く)。NVDとGitHub Advisoryは2.3.19からとしています。[1][3][4]
  • 設定:DMIが有効なこと。2.3.20・2.3.28のdefault.propertiesではstruts.enable.DynamicMethodInvocation = falseが既定で、struts.xmlやstruts.propertiesでtrueにしたアプリが対象です。[1][7]
  • 経路:Strutsのアクション(.actionなど)に、外からリクエストが届くこと。認証の有無は条件にありません。[1][3]

2.5系・6系・7系は、この件の影響範囲に入っていません。[4]

03悪用の状況

米CISAは2026年10月8日、CVE-2016-3081をKEVに追加し、連邦政府機関に10月11日までの対応を求めました。KEVのこの項目には、CISAの「フォレンジックのトリアージ要件」の対象である印も付いています。[5]

公表は2016年4月で、GitHub Advisoryの参照には、Exploit-DBの攻撃コードとMetasploitのモジュールが挙がっています。EPSSは96.5%で、上位0.2%に入ります(11月8日時点)。[4][6]

2016年の公表から10年後の2026年10月にKEVへ追加

公表、データベースへの登録、サポート終了、KEVへの追加の日付を並べる。

2016年4月19日

Apache StrutsがS2-032を修正2.3.20.3・2.3.24.3・2.3.28.1を公開

2016年4月26日

NVDに登録
8.1NVDの評価(CVSS 3.1)

2019年9月12日

2.3系のサポート終了

2026年10月8日

CISAがKEVに追加対応の期限は10月11日
KEV悪用が確認された脆弱性の一覧

11月8日

EPSSの推定
96.5%今後30日に悪用される見込み

出典 Apache Struts「Announcements 2016」「End-of-Life versions」、NVD「CVE-2016-3081」、米CISA「Known Exploited Vulnerabilities Catalog」(2026-11-06版)、FIRST「EPSS」(2026-11-08)

04攻撃を受けていないかの確認

KEVに載った脆弱性は、更新に加えて、更新前に攻撃を受けていないかを確かめます。S2-032の攻撃は、名前がmethod:で始まるパラメータで届きます。[1][3][5]

  1. Webサーバー・Tomcatのアクセスログで、クエリ文字列にmethod:(URLエンコードではmethod%3A)を含むリクエストを探します。
    ターミナル
    grep -i -E "method(:|%3A)" /var/log/httpd/access_log* $CATALINA_BASE/logs/localhost_access_log*
  2. POSTの本文はアクセスログに残らないことが多いので、WAFやロードバランサーに本文の記録があれば同じ文字列を探します。
  3. アプリの実行ユーザーで起動した見覚えのないプロセス、Webアプリの配置先(webappsなど)に増えたJSPなどのファイル、見覚えのない宛先への通信がないかを確かめます。
  4. 痕跡が見つかった場合は、ログとサーバーの状態を保全し、専門の窓口に相談します。

05Strutsの対象の版と推奨する版

推奨する版は、提供元の告知、GitHub Advisory、Maven Centralに公開済みの版から出しました(11月9日確認)。上げる前に移行の手引きとリリースノートを確かめてください。[1][9][10][11][12][14]

系列この件推奨する版補足
2.3系2.3.20〜2.3.28が対象2.3.20.3・2.3.24.3・2.3.28.1で直る2019年9月12日にサポート終了。2025年以降の脆弱性はこの系列で直っていない
2.5系範囲外6系・7系へ移行2023年10月30日にサポート終了
6系範囲外6.8.0以上(6系の最新は6.11.0)2025年12月公表の脆弱性2件が6.8.0で直る
7系範囲外7.1.1以上(最新は7.4.0)Java 17以上とJakarta Servlet 6以上が必要

2.3系の修正版に上げてもS2-032は直りますが、GitHub Advisoryでは、2.3.37以前・2.5.33以前に影響するCVE-2025-64775(サービス停止)とCVE-2025-68493(XMLの検証漏れ)に、この2つの系列の修正版が載っていません。提供元はサポート中の版への移行を勧めています。[9][11][12]

2.3系は修正版があっても終了済み。6.8.0以上か7.1.1以上へ移る

系列ごとに、この件の対象とサポート、移る先を並べる。

2.3系
この件2.3.20〜2.3.28が対象
サポート2019年9月12日に終了
推奨する版6系・7系へ移行
2.5系
この件範囲外
サポート2023年10月30日に終了
推奨する版6系・7系へ移行
6系・7系
この件範囲外
サポート終了の案内なし
推奨する版6.8.0以上・7.1.1以上最新は6.11.0・7.4.0
だから 2.3系の修正版で止めず、サポート中の6系・7系へ移る。

出典 Apache Struts「S2-032」「End-of-Life versions」「Releases」、GitHub Advisory「GHSA-xx7v-hqxh-cjr9」(2026-11-09確認)

06Strutsの版と設定を確かめて上げる手順

  1. ソースのあるアプリは、依存関係からstruts2-coreの版を確かめます。Gradleでは./gradlew dependencyInsight --dependency struts2-coreです。

    ターミナル
    mvn dependency:tree -Dincludes=org.apache.struts:struts2-core
  2. 配置済みのWARしか無い場合は、WEB-INF/libのJARの名前で版を確かめます。

    ターミナル
    find $CATALINA_BASE/webapps -name "struts2-core-*.jar"
  3. DMIを有効にしているかを確かめます。trueの行があれば対象の設定です。[7][8]

    ターミナル
    grep -rn "DynamicMethodInvocation" src/main/resources WEB-INF/classes
  4. 6系か7系に上げます。pom.xmlの版を変え、テストで動作を確かめます。7系ではJava 17以上と、Jakarta Servlet 6以上に対応したサーブレットコンテナが必要です。[13]

    pom.xml
    <dependency>
      <groupId>org.apache.struts</groupId>
      <artifactId>struts2-core</artifactId>
      <version>7.4.0</version>
    </dependency>
  5. ビルドして配置し直したあと、配置先のWEB-INF/libに古いstruts2-coreのJARが残っていないかを、手順2のコマンドで確かめます。

脆弱性の公表・更新一覧 2026年10月版の表紙
資料(無料)脆弱性の公表・更新一覧 2026年10月版60日間の公表・更新と、悪用が確認された脆弱性を分析し、どこから直すかの考え方と確認の手順をまとめた資料です。

07すぐ上げられないとき

提供元の告知は、DMIを無効にすること、または推奨する版のソースをもとに独自のActionMapperを実装することを回避策として挙げています。DMIを無効にするには、struts.xmlで次のように設定します。[1][8]

struts.xml
<constant name="struts.enable.DynamicMethodInvocation" value="false" />

DMIで呼び出しているメソッドがあると、その画面は動かなくなります。アクションの定義でmethod属性を指定する書き方に直してから無効にします。あわせて、WAFで名前がmethod:で始まるパラメータを含むリクエストを止めると、攻撃の入口を狭められます。

08サポートが終わった2.3系が残っている場合

2.3系のサポートは2019年9月12日、2.5系は2023年10月30日に終わっていて、提供元はセキュリティの修正を出しません。提供元のサポート終了の案内は、移行を強く勧め、すぐ移行できない場合は第三者の有償の延長サポートがあるとしています。[9]

2.3系から6系・7系へは、設定や書き方の変更が多くなります。7系ではcom.opensymphony.xwork2のパッケージがorg.apache.struts2に移りました。移行の間はDMIの無効化とアクセスログの確認を続けます。[13]

よくある質問

2016年の脆弱性が、なぜ今KEVに載ったのですか?

KEVの項目には追加の理由が書かれていません。KEVは悪用が確認された脆弱性を載せる一覧で、追加は2026年10月8日です。古い版のStrutsが今も攻撃の対象になっていることを示します。[5]

DMIの設定を書いていなければ対象外ですか?

2.3.20・2.3.28の既定値はfalseなので、どこにもtrueと書いていなければ、この件の条件には当たりません。ただし2.3系には直っていない別の脆弱性があるので、移行は必要です。[7][11]

Struts 1を使っています。対象ですか?

S2-032はStruts 2の脆弱性で、Struts 1は影響範囲に入っていません。Struts 1は2013年4月5日にサポートが終わっています。[1][9]

出典・参考資料

  1. Apache Struts公式:S2-032(CVE-2016-3081)2016-04-19 / 対象2.3.20〜2.3.28(2.3.20.3・2.3.24.3を除く)、DMIとmethod:の条件、深刻度Important、修正版、DMIの無効化と独自ActionMapperの回避策
  2. Apache Struts公式:Announcements 20162016-04-19 / 2.3.28.1・2.3.20.3・2.3.24.3の公開日とS2-032の修正
  3. NVD:CVE-2016-30812016-04-26 / 対象2.3.19〜2.3.20.2・2.3.21〜2.3.24.1・2.3.25〜2.3.28、CVSS 3.1 8.1(NVD)、KEVへの追加日
  4. GitHub Advisory Database:GHSA-8c6j-ffmf-q6vm2022-05-14 / Maven struts2-core の影響範囲と修正版、Exploit-DB・Metasploitの参照
  5. 米CISA:Known Exploited Vulnerabilities Catalog(CVE-2016-3081)2026-10-08 / KEVへの追加日、対応の期限10月11日、フォレンジックのトリアージ要件の印
  6. FIRST:EPSS(CVE-2016-3081)2026-11-08 / EPSS 96.5%、上位0.2%
  7. Apache Struts:2.3.28のdefault.properties2016-03-18 / struts.enable.DynamicMethodInvocationの既定値false
  8. Apache Struts公式:Action Configuration(Dynamic Method Invocation)2026-11-09 / DMIの仕組み、method:のパラメータ、無効にする設定
  9. Apache Struts公式:End-of-Life versions2026-11-09 / Struts 1・2.3系・2.5系のサポート終了日、移行の勧めと延長サポート
  10. Apache Struts公式:Releases2026-11-09 / 7.4.0が推奨のGA版、6.11.0などの公開日
  11. GitHub Advisory Database:GHSA-xx7v-hqxh-cjr9(CVE-2025-64775)2025-12-01 / 2.3.37以前・2.5.33以前に修正版の記載がないこと、6.8.0・7.1.1で修正
  12. GitHub Advisory Database:GHSA-qcfc-hmrc-59x7(CVE-2025-68493)2026-01-11 / 2.3系・2.5系に修正版の記載がないこと、6.1.1で修正
  13. Apache Struts公式:Struts 6.x.x to 7.x.x migration2026-11-09 / 7系はJava 17以上とJakarta Servlet 6以上が必要、パッケージの移動
  14. Maven Central:org.apache.struts:struts2-core2026-11-09 / 6.11.0・7.4.0などの公開済みの版

あわせて読みたい記事

Java / JVM公開 2026-11-01

Apache Tomcatの脆弱性8件(2026年10月)|対応と系列ごとの修正版

Apache Tomcatで10月20日に公表された8件の脆弱性(CVE-2026-101356ほか)は、HTTP/2・JNDIRealm・AJPなどの使い方で該当が分かれます。自分の版と設定が対象かの確かめ方、系列ごとの修正版、Spring Bootでの扱い、9.0系のサポート終了(2027年3月31日)を説明します。

Java / JVM公開 2026-11-01

snappy-javaの脆弱性CVE-2026-93451|Kafka・Sparkでの確認方法と修正版

Java向けの圧縮ライブラリsnappy-javaの脆弱性CVE-2026-93451(GHSA-gwq9-9ffj-mvrv)は、uncompressIntArrayなどで配列の末尾を越えて書き込みます。上げる先は1.1.10.10以上です。Kafka・Spark・Hadoopが古い版を指定している場合の確かめ方と、版の指定の仕方を説明します。