Trusted Design

CVE-2017-9791 の詳細

CVEの情報

説明:
The Struts 1 plugin in Apache Struts 2.1.x and 2.3.x might allow remote code execution via a malicious field value passed in a raw message to the ActionMessage.

CVE更新日: 2017-07-10 16:29:00.277000

CVSSバージョン: 3.1

CVSSスコア: 9.8

KEVの情報

KEV更新日: 2022-02-10

EPSSの情報

EPSSは脆弱性が今後30日以内に悪用される確率を予測するスコアリングシステムで、FIRST(Forum of Incident Response and Security Teams)が提供しています。
EPSSのスコアが高いということは、攻撃されるリスクが高いことを意味するので、早めの対策が必要です。

EPSSスコア: 0.989080000

EPSS更新日: 2026-10-19 00:00:00

SSVCの情報

SSVCはカーネギーメロン大学ソフトウェア工学研究所が提案する脆弱性の評価手法です。ステークホルダーごとに脆弱性対応の優先度を決定することを支援します。
本サイトでは、CVE、KEV、EPSSの内容からExploitation(悪用状況)、Technical Impact(技術的影響)、Automatable(自動攻撃の可否)を判定します。

Exploitation: active

Technical Impact: high

Automatable: True

AIを使った解説

解説:

CVE-2017-9791に関する脆弱性調査結果を以下に解説します。

1. 脆弱性の概要

CVE-2017-9791 (S2-048) は、Apache Struts 2.1.x および 2.3.x の Struts 1 プラグインにおけるリモートコード実行 (RCE) の脆弱性です。 悪意のあるフィールド値が ActionMessage に生 (raw) のメッセージとして渡されることで発生します。 この脆弱性は、Object Graph Navigation Language (OGNL) 式の評価を悪用して、アプリケーションがユーザーから提供された入力値を適切に処理しない場合に、任意のコードが実行される可能性があります。

1.1 影響

本脆弱性が悪用された場合、遠隔の攻撃者によって、Apache Struts 2 が動作するサーバー上で任意のコードが実行される可能性があります (リモートコード実行)。 攻撃者は、特別に細工されたリクエストを脆弱なサーバーに送信することで、標的のサーバーを乗っ取ることが可能になります。

1.2 深刻度

Apache Software Foundation は、本脆弱性の重要度を「高 (high)」としています。 NVD (National Vulnerability Database) のCVSS v3.1スコアは 9.8 (Critical) です。 CVSS v3.1 ベクターは (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) です。

2. 対象となる環境

2.1 影響を受けるOSバージョン

特定のOSバージョンに限定されず、Apache Struts 2 が動作する環境全般に影響があります。

2.2 影響を受ける設定

以下の条件を満たす環境が本脆弱性の影響を受けます。

  • Apache Struts 2.1.x および 2.3.x シリーズ (具体的には 2.3.32 以前のバージョン)。 (なお、Struts 2.5.x シリーズは影響を受けません。)
  • Struts 1 Plugin を利用している Struts 2 アプリケーション。
  • アプリケーションコード内で ActionMessage に直接文字列(ユーザー入力などの「生(raw)」のメッセージ)を渡している場合。
  • 特に、Apache Struts 2.3.x のサンプルアプリケーションである Showcase に含まれる Struts 1 プラグインの例で本脆弱性の影響が指摘されています。

3. 影響を受けた時の兆候

本脆弱性が悪用された場合、以下のような兆候が現れる可能性があります。

  • 予期せぬ出力や挙動: 攻撃者が細工したOGNLコードが実行されることで、アプリケーションの応答に通常では現れない情報(例: コマンド実行結果)が表示されることがあります。例えば、OGNL式のテストとして ${1+1} を入力すると、結果として 2 が表示されることで、OGNL式の実行が確認できます。
  • サーバーリソースの異常な消費: 不審なプロセスがバックグラウンドで実行され、CPUやメモリの使用率が急増する可能性があります。
  • ファイルシステムの変更: サーバー上に不審なファイルが作成されたり、既存のファイルが改ざんされたりする可能性があります。
  • ネットワーク通信の異常: 外部への不審な通信(データ流出やC2サーバーへの接続など)が発生する可能性があります。

4. 推奨対策

4.1 本対策

  • Apache Struts 2 のアップグレード: 脆弱性が修正されたバージョン、具体的には Apache Struts 2.3.33 以降にアップグレードしてください。
  • アプリケーションコードの修正: ActionMessage に直接文字列を渡す代わりに、リソースキーを使用するようにアプリケーションコードを修正してください。
    • 修正前 (脆弱なコードの例): messages.add("msg", new ActionMessage("Gangster " + gform.getName() + " added successfully"));
    • 修正後 (推奨されるコードの例): messages.add("msg", new ActionMessage("struts1.gangsterAdded", gform.getName())); ここで、struts1.gangsterAdded はリソースバンドルで定義されたキーです。

4.2 暫定回避策(緩和策)

  • ActionMessageへの直接メッセージ渡しの停止: ActionMessage クラスにユーザーからの入力を含む値を直接渡すことを避け、代わりにリソースキーを使用するようにコードを変更する。
  • Struts 1 Plugin の削除: アプリケーションで Struts 1 Plugin を使用していない場合は、プラグインをサーバーから削除することを検討してください。

他に解説すべき観点

  • 実証コードの公開: 本脆弱性を悪用する実証コード (PoC) が既に公開されています。 これにより、攻撃が容易になるため、早急な対策が必要です。
  • 関連する注意喚起: JPCERT/CCからも本脆弱性に関する注意喚起 (JPCERT-AT-2017-0025) が行われています。

参照したサイト

NVDサイト

NVDでCVEの詳細を見る

戻る