Apache Tomcatにおける情報漏えいの脆弱性(CVE-2020-1938)についての検証レポート

2020/03/09
2020/03/11 更新
2020/03/16 更新
松本 拓也、上原 渓一郎

2020年2月24日にApache Software Foundationが公表した、Apache Tomcatにおける脆弱性(CVE-2020-1938)についての検証を実施し、脆弱性の悪用が可能であることを確認しました。

1. 本脆弱性の概要

「Apache Tomcat」は、Apache Software Foundationによって提供されている、オープンソースのサーブレットコンテナです。Apache Software Foundationにより、Apache Tomcatには、悪意のあるAJP(Apache JServ Protocol)リクエストを送信することで、リモートからの情報窃取が可能となる脆弱性(CVE-2020-1938)が存在することが報告されました。[1]

本脆弱性は、AJPにおけるAttributeに関する適切な処理が行われないことに起因します。この脆弱性が悪用された場合、リモートの攻撃者が任意のファイルを窃取できる可能性があります。
また、Webアプリケーションがサーバーへのファイルアップロードや保存を許可している場合、リモートから任意のコードが実行される可能性があります。[2]

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

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

図1は、本脆弱性に対する攻撃の一例として、脆弱性を含むApache Tomcatサーバーに対し、外部の攻撃者が不正なAJPリクエストを送信してサーバー上のファイルを窃取する攻撃例を示しています。

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

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

  • Apache Tomcat 7.0.0から7.0.99
  • Apache Tomcat 8.5.0から8.5.50
  • Apache Tomcat 9.0.0.M1から9.0.30

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

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

3.1. 検証環境

表1. 検証に使用した環境
  疑似攻撃者 疑似被害者
OS Kali Linux 2018.01 64bit Ubuntu 18.04.2 64bit
アプリケーション 概念実証コード Apache Tomcat 8.5.32

3.2. 攻撃手法

まず、脆弱性が存在するApache TomcatのAJPプロトコル通信を受け付けるポート(例:TCP 8009)に対して不正なAJPリクエストを送信し、Webアプリケーションのルートディレクトリにあるファイルの読み取りが可能なことを確認します。

図2. 概念実証コードのリクエストとそのレスポンス

図2. 概念実証コードのリクエストとそのレスポンス

図2は、攻撃対象サーバーに対する概念実証コードの実行と、攻撃対象サーバーからのレスポンスです。赤線にて示している通り、Webアプリケーションのルートディレクトリにあるweb.xmlファイルの内容をリモートから取得できることが確認できました。

さらに、攻撃対象サーバー上のWebアプリケーションがファイルアップロードや保存を許可している場合、攻撃者がリモートから任意のコードを実行する可能性があります。これは、本脆弱性の悪用により読み出されたファイルがJSPファイルとして処理され、実行される機能に起因しています。このため、あらかじめ正当なファイルに見せかけたJSPファイルをサーバー上にアップロードし、それを読み出すことにより、リモートから任意のコードを実行できる可能性があります。

今回の検証では、攻撃対象サーバー上の/etc/passwdを表示するよう記述したJSPファイルをpasswd.txtというファイル名であらかじめアップロードしておき、概念実証コードを利用して読み取ることによって、リモートからのコード実行を試みます。

3.3. 検証結果

図3に示す結果の通り、攻撃対象のサーバーに対して攻撃者サーバーからAJPリクエストを送信することで、攻撃対象サーバー上の/etc/passwdを表示するコードをリモートから実行できました。攻撃者サーバーからAJPリクエストを受けて読み出されたpasswd.txtがJSPコードとして解釈され、攻撃対象サーバー上で実行されることにより、リモートから/etc/passwdの内容を取得できています。

図3. 攻撃対象のサーバー上で攻撃コードの実行に成功した結果を確認

図3. 攻撃対象のサーバー上で攻撃コードの実行に成功した結果を確認

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

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

2020年3月9日現在、Apache Software Foundationより本脆弱性の修正バージョンが提供されています。[2]

  • Apache Tomcat 7.0.100
  • Apache Tomcat 8.5.51
  • Apache Tomcat 9.0.31

修正バージョンへのアップデートの実施が難しい場合は、以下の対策を実施することで本脆弱性の影響を回避可能です。[2]

  • AJPが不要な場合は、無効にする
  • AJPが必要な場合は、アクセス制限を設定する

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

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

各製品ベンダーの本脆弱性への対応状況に関する情報、および本検証による各製品での検知結果は以下の通りです。表2に公式シグネチャーの提供状況を記載します。

表2. 製品ベンダーによるシグネチャー提供状況(2020年3月9日時点)
種別 製品ベンダー/
製品
製品ベンダー提供のシグネチャー 検知
結果
IDS/IPS IBM
QRader
Network Security
GX/XGS Series
メーカーからのシグネチャーは現在未提供です。 -
McAfee
Network
Security Platform
NS/M Series
Signature Set 10.8.6.2:
PKTSEARCH: Apache Tomcat AJP Connector Remote Code Execution Vulnerability (CVE-2020-1938) [0x45d45e00]
WAF Imperva
SecureSphere
メーカーからのシグネチャーは現在未提供です。 -
F5 Networks
BIG-IP
メーカーからのシグネチャーは現在未提供です。 -
NGFW Palo Alto
PA Series
Application and Threat Content:Version 8241
・Apache Tomcat Arbitrary Local File Inclusion Vulnerability
Check Point
NGFW Series
メーカーからのシグネチャーは現在未提供です。 -

参考文献

機器別当社対応サービス

IDS/IPS

WAF

NGFW

更新履歴

2020/03/09 初版作成
2020/03/11 「表2. 製品ベンダーによるシグネチャー提供状況」のIDS/IPS の情報を更新
2020/03/16 「表2. 製品ベンダーによるシグネチャー提供状況」のPalo Altoの情報を更新

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

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

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

Apache Tomcatにおける情報漏えいの脆弱性(CVE-2020-1938)についての検証レポート