Apache Struts 2におけるリモートコード実行に関する脆弱性(CVE-2018-11776)(S2-057)についての検証レポート

2018/08/30 初版
2018/09/03 更新
2018/09/11 更新
NTTデータ先端技術株式会社
加地 弘樹

2018年8月22日にApache Software Foundationから公表された、Apache Struts 2におけるリモートからの任意のコード実行が行われる脆弱性(CVE-2018-11776)(S2-057)についての検証を実施し、脆弱性の悪用が可能であることを確認しました。

1. 本脆弱性の概要

2018年8月22日にApache Software Foundationから以下の条件下においてApache Struts 2リモートからの任意のコード実行が行われる脆弱性(CVE-2018-11776)(S2-057)が存在することが公表されました。

条件

  • 「alwaysSelectFullNamespace」が「true」に設定されている。
  • Strutsの設定ファイルでnamespaceの値が指定されていないか、ワイルドカードnamespaceが指定されている場合に「value」か「action」が設定されていない「URL」タグを使用している。

本脆弱性は、上記の条件を満たす場合にユーザー指定のnamespaceを使用され、それがOGNL式として評価されることに起因しています。

Apache Software Foundation は本脆弱性の深刻度を「Critical」と評価しています。

図1. 本脆弱性を悪用した攻撃の例

図1. 本脆弱性を悪用した攻撃の例

図1は、本脆弱性に対する攻撃の一例として、インターネットから脆弱性を含むWebアプリケーションサーバーへ攻撃者が攻撃コードを含んだHTTPリクエストを送信する例を示しています。

2. 本脆弱性の影響を受ける環境

本脆弱性の影響を受ける可能性があるApache Struts 2のバージョンは以下の通りです。

  • 2.3系 2.3.34以前のバージョン
  • 2.5系 2.5.16以前のバージョン
  • その他サポート外の旧バージョン

3. 本脆弱性を利用した攻撃の検証

攻撃コードとして、CVE-2018-11776の概念実証(PoC)コードを用いて本脆弱性に対する攻撃を試行し、脆弱性の悪用が可能であることを検証しました。

3.1. 検証環境

表1. 検証に使用した環境
  疑似攻撃者 疑似被害者
OS Kali Linux 2017.01 64bit CentOS 7.4 64bit
アプリケーション 概念実証コード Apache Struts 2.3.12
Apache Tomcat 7.0.59
OpenJDK Runtime Environment 1.8.0_161

3.2. 攻撃手法

Apache Struts 2を使用したWebアプリケーションに対して、任意のOSコマンド実行を試みる攻撃を行います。

図2. 攻撃コード

図2. 攻撃コード

攻撃方法として、上図に示すHTTPリクエストを使用し、ブラウザよりアクセスします。
標的サーバー上で実行させるOSコマンドを、攻撃コード内に記述し、HTTPリクエストとして送信します。これにより、攻撃者は実行させたい任意のOSコマンドをWebアプリケーションが動作するサーバーの権限(本検証環境においてはroot)によって攻撃対象サーバー上で動作させることが可能です。
本検証では、攻撃対象のサーバーにおいてOSコマンドの「cat /etc/passwd」を実行させています。

3.3. 検証結果

図3に示す結果の通り、攻撃コードの実行に成功しました。

図3. 攻撃対象のサーバー上で「cat /etc/passwd」を実行させた結果を確認

図3. 攻撃対象のサーバー上で「cat /etc/passwd」を実行させた結果を確認

4. 本脆弱性に対する対策

4.1. 現在推奨されている対策

Apache Software Foundationより、本脆弱性が修正されたバージョンが公開されており、当該バージョンへのアップデートが推奨されています。

  • 2.3系 2.3.35
  • 2.5系 2.5.17

ワークアラウンドとして、Strutsの設定ファイルでnamespaceを設定し、JSPのすべてのURLタグに対してvalueまたはActionを設定することで本脆弱性を回避することが可能です。

4.2. 不正アクセス監視機器による対策

4.2.1. 当社が確認している不正アクセス監視機器の対応状況

各製品ベンダーの本脆弱性への対応状況に関する情報、及び本検証による各製品での検知結果は以下の通りです。表2に公式シグネチャーの提供状況、表3に当社のカスタムシグネチャー提供状況、また、本検証によって得られた各製品のシグネチャー検知可否の結果を記載します。

表2. 製品ベンダーによるシグネチャー提供状況(2018年09月11日時点)
種別 製品ベンダー/
製品
製品ベンダー提供のシグネチャー 検知
結果
IDS/IPS IBM
QRader
Network Security
GX/XGS Series
XPU 3808.28174:
HTTP_Apache_Struts2_Ognl_Namespace_Exec [2104470]
※検証したPoC 3パターンの内1パターンのみ検知
McAfee
Network
Security Platform
NS/M Series
Signature Set 9.8.28.2:
HTTP: Apache Struts Remote Code Execution Vulnerability (CVE-2018-11776) [0x45249b00]
WAF Imperva
SecureSphere
メーカからのシグネチャーは現在未提供ですが、 既存シグネチャーで通信を検知することが可能です。
・CVE-2013-2134:Apache Struts Code Execution
NGFW Palo Alto
PA Series
Application and Threat Content:
・Apache Struts 2 Remote Code Execution Vulnerability [33948]
Check Point
NGFW Series
IPS Software Blade:
・Apache Struts Remote Code Execution (CVE-2018-11776)
表3. 当社によるカスタムシグネチャー提供状況(2018年09月11日時点)
種別 製品ベンダー/
製品
当社カスタムシグネチャーの提供状況 検知
結果
IDS/IPS IBM
QRader
Network Security
GX/XGS Series
- -
McAfee
Network
Security Platform
NS/M Series
- -
WAF Imperva
SecureSphere
- -
NGFW Palo Alto
PA Series
- -
Check Point
NGFW Series
- -

参考文献

機器別当社対応サービス

IDS/IPS

WAF

NGFW

更新履歴

2018/08/30 初版作成
2018/09/03 IBM、McAfeeのシグネチャー提供状況更新
2018/09/11 Palo Altoのシグネチャー提供状況更新

本件に関するお問い合わせ先

NTTデータ先端技術株式会社
お問い合わせフォーム

  • ※ 各規格名、会社名、団体名、製品名は、各社の商標または登録商標です。

Apache Struts 2におけるリモートコード実行に関する脆弱性(CVE-2018-11776)(S2-057)についての検証レポート