概要
2020年2月24日にApache Software FoundationからApache Tomcatの脆弱性(CVE-2020-1938)情報が公開されました。これは、Apache JServ Protocol(AJP)に関する脆弱性です。AJPとは、Apache Tomcatと通信を行うためのプロトコルであり、例えば、HTTPサーバ(Apache HTTP Server)とアプリケーションサーバ(Apache Tomcat)を連携する際に用いられます。この場合、HTTPリクエストをApache HTTP Serverで受け取り、Javaで動的な処理が必要となるものをApache Tomcatで実行する構成になります。なお、Apache TomcatもHTTPサーバとしての機能を備えており、標準で8080/tcp(HTTP)及び8009/tcp(AJP)を使用する設定となっています。ただし、HTTPをApache HTTP Serverでプロキシする場合には、8080/tcpは使用しません。また、8009/tcpにおいてはHTTPサーバとの通信を想定しているため、HTTPサーバがどのような構成であっても、インターネット上からアクセスする必要がない構成であることが一般的です。
CVE-2020-1938はApache Tomcatの脆弱性であり、インターネット上からWebアプリケーションのディレクトリ配下にある任意のファイルを参照することが可能です。また、Webアプリケーション内のファイルをJSPとして処理することも可能です。仮にWebアプリケーションにおいてファイルのアップロードや保存が可能な場合には、悪意あるJSPを蔵置され任意のコード実行が可能となる恐れがあります。
影響を受けるバージョンと対策
当該脆弱性の影響を受けるバージョン及び修正版は以下のとおりです。
影響を受けるバージョン | 修正版のバージョン |
---|---|
Apache Tomcat 9.0.0.M1 to 9.0.30 | Apache Tomcat 9.0.31 |
Apache Tomcat 8.5.0 to 8.5.50 | Apache Tomcat 8.5.51 |
Apache Tomcat 7.0.0 to 7.0.99 | Apache Tomcat 7.0.100 |
当該脆弱性の修正は、セキュリティ強化のためAJPコネクタの初期設定を複数箇所で変更されています。例えば、標準でAJPをLoopback addressにbindする修正がされています。そのため、更新する際には運用しているサーバ構成に多少の変更が必要となる可能性があります。
SOCにおける観測情報
2020年2月24日以前から検証コード(PoC)が公開されていたため、SOCでは本脆弱性の特徴となる8009/tcpポートのアクセス状況をIIJマネージドファイアウォールサービスにて観測しました。以下に2月14日から25日の期間における8009/tcpへのアクセス数の推移を示します。なお、図-1の縦軸は対象期間におけるアクセス数の総数で正規化しています。
8009/tcpへのアクセス量は、2月21日4時頃まで安定した推移を示していますが、その後増加していることが確認できます。当該脆弱性は、PoCが21日の時点で公開されていたことが影響してアクセス量が増加したものと推測できます。また、送信元IPアドレス数は22日の8時頃までは比較的パターン化しており、9時及び10時に通常の倍以上の送信元が8009/tcpへアクセスを試みていることを確認しています。その後、一時的に送信元の数が減少していますが、その理由は判明していません。
まとめ
今回SOCで観測した通信は、Apache TomcatのAJPで利用する標準ポートが8009/tcpとなっているため、8009/tcpへのアクセスが増加したものと考えられます。当該脆弱性が影響するバージョンがインターネット上からAJPの待ち受けポートにアクセスできる場合には、対応が必要となります。運用しているサーバの条件によっては、任意のコード実行が可能となるため、当該脆弱性の対象であるかを確認し、対象であればファイアウォールのアクセス制御設定を再確認することを推奨します。最新版への更新は、Apache Tomcatの公式サイトを確認の上、ご対応ください。また、日本語の解説としてJPCERT コーディネーションセンターから注意喚起が出ていますので、併せてご確認ください。