本文へ移動
English version →
悪用あり 高 8.1 急ぎ度: 至急

Apache Struts 2に任意コード実行の脆弱性、悪用確認

2016年4月に公表されたApache Struts 2.3系の脆弱性が、2026年10月にKEVへ追加され、実際の攻撃での悪用が確認されています。該当版とDynamic Method Invocationの有無を確認し、修正版への更新と侵害の跡の調査を進めてください。

CVE-2016-3081 公開 更新 執筆・監修: 佐々木 航 人が監修しながらAIを活用して執筆
画像は生成 AI で作成したイメージです

急ぎ度: 至急

KEVで悪用が確認され、CVSS v3は8.1、修正版もすでに公開されているため、先送りする理由がありません。

関係があるか

Struts 2.3系の旧版を使うJavaのWebアプリを、自社運用または委託先の運用で抱えている組織が対象です。長く保守されてきた業務システムや社内ポータルが当てはまりやすく、Dynamic Method Invocationを有効にしている場合に限られます。

製品影響を受ける版修正版
Apache Struts 2 2.3.19〜2.3.20.2、2.3.21〜2.3.24.1、2.3.25〜2.3.28(いずれもDynamic Method Invocationが有効な場合) 修正版はS2-032として公開されています。更新先の版はApache Strutsの告知で確認してください。
Strutsを組み込んだ他社製品 同梱しているStrutsの版とDynamic Method Invocationの設定によります。 各ベンダーの告知で、対応版の有無を確認してください。

確かめ方

  1. 1サーバー上のStrutsのJARを探し、版を確認します。struts2-core- で始まるファイル名の末尾が版番号です。
  2. 2struts.xmlやstruts.propertiesで、struts.enable.DynamicMethodInvocation がtrueになっていないかを見ます。
  3. 3インターネットや社外の拠点から、そのアプリに到達できるかを確認します。到達できるものを優先します。
  4. 4自社で開発していない業務パッケージや委託先の納品物は、Strutsを同梱していないか、ベンダーや委託先に問い合わせます。

何が起きたか

2016年4月に公表された脆弱性で、Apache Struts 2.3系の一部の版に存在します。Dynamic Method Invocationを有効にしていると、外部から送られたリクエストによって、サーバー上で任意のコードを実行されるおそれがあります。修正版はそのときから公開されています。

2026年10月にKEVへ追加され、実際の攻撃での悪用が確認されています。

仕組みを短く言うと、リクエストに含まれる method: で始まる指定の処理に問題があります。連なった式の扱いに不備があるため、想定外の処理がサーバー側で実行されます。分類はCWE-77、いわゆるコマンドインジェクションです。公表から約10年たった今回の追加は、古い版を動かし続けている環境が、いまも狙われていることを示しているとみられます。

攻撃の流れ

  1. 1

    外部から到達

    Struts 2.3系で動くアプリが、ネットワーク越しに届く状態にあります。

  2. 2

    細工した要求

    ログインなしで、特殊な形のリクエストがアプリに送られます。

  3. 3

    式が評価される

    連なった式の扱いの不備により、サーバー側で想定外の処理が行われます。

  4. 4

    コード実行

    アプリの実行権限で、任意のコードが動きます。

  5. 5

    被害の拡大

    情報の持ち出しや改ざん、内部ネットワークへの足がかりに使われます。

公開されている情報をもとにした流れの例です。

どう悪用されるか

ログインは要りません。ネットワーク越しに到達できれば、利用者の操作もなしに悪用できます。前提はDynamic Method Invocationが有効なことで、CVSSの攻撃条件の複雑さが高いのは、この設定への依存を反映したものとみられます。

悪用されると、アプリを動かしているアカウントの権限で任意のコードを実行されます。情報の漏えい、データの改ざん、サービスの停止のいずれも起こり得ます。そこから同じネットワークの別のサーバーに広がることも考えられます。

今すぐやること

  1. 1

    版と設定を洗い出す

    Struts 2.3系のアプリを一覧にし、版とDynamic Method Invocationの設定を確認します。インターネットに公開しているものから先に見てください。

    find / -name "struts2-core-*.jar" 2>/dev/null
  2. 2

    修正版へ更新する

    該当するアプリは、Apache Strutsの告知(S2-032)に載っている修正版に更新します。自社で更新できない業務パッケージは、ベンダーに対応版を確認します。

  3. 3

    侵害の跡を調べる

    米国の政府機関に求められた対応期限は2026年10月11日でした。すでに期限を過ぎているため、未適用だった期間は侵害されていた可能性を前提にします。Webサーバーとアプリのログで不審なリクエストを探し、見覚えのないプロセス、ファイル、外部への通信がないかも確認します。

  4. 4

    組み込み製品を確認する

    Strutsを同梱している他社製品は、ベンダーの告知で影響の有無と対応版を確認します。

すぐ更新できないとき

すぐに更新できないときは、struts.xmlなどで struts.enable.DynamicMethodInvocation をfalseにし、Dynamic Method Invocationを無効にします。画面の動きに影響する場合があるので、テスト環境で確認してから本番に反映してください。あわせて、対象のアプリへ外部から届く経路を絞ります。これはつなぎの対応で、更新の代わりにはなりません。

背景

Struts 2は、JavaでWebアプリを作るためのフレームワークです。社内の申請システムや顧客向けのポータルなど、一度作ると長く動かし続ける業務システムの土台によく使われてきました。納品したあとは更新されず、古い版が残りやすい種類のソフトウェアです。

この脆弱性が関わるDynamic Method Invocationは、リクエストの指定でアクションの呼び出し先を切り替える機能です。有効にした環境でだけ問題になります。同じStrutsでは、2017年にも別の脆弱性が大規模な情報流出に使われ、広く知られるようになりました。ただし今回はその件とは別のCVEです。

よくある質問

Q.修正版を適用済みなら、調査は要りませんか。
A.更新で脆弱性はふさがりますが、更新前にすでに侵入されていた場合、仕込まれたものは消えません。未適用だった期間があるなら、ログと不審なファイルやプロセスの確認までが対応の範囲です。
Q.WAFを入れていれば、更新は後回しにできますか。
A.後回しにする理由にはなりません。WAFで防げるかどうかは製品と設定しだいで、回避される余地も残ります。修正版への更新を先に進め、WAFは補助として使ってください。

まだ分かっていないこと

  • 公表から約10年たった2026年10月にKEVへ追加された経緯は分かっていません。
  • KEVの記録では、ランサムウェアの攻撃での利用は不明とされています。

この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。

原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。

Apache Struts 2.3.19 to 2.3.20.2, 2.3.21 to 2.3.24.1, and 2.3.25 to 2.3.28, when Dynamic Method Invocation is enabled, allow remote attackers to execute arbitrary code via method: prefix, related to chained expressions.

出典: OSV.dev (Open Source Vulnerabilities) NVD GitHub Advisory OSV CISA KEV

参照URL

当サイトでは、アクセス解析と広告の効果測定のために Cookie を使います。株式会社Game のサイト共通の設定です。 詳しく