Ghostcat(CVE-2020-1938)は、状況により遠隔コード実行を招いてしまうApache Tomcatの脆弱性です。ここで、Ghostcat脆弱性を見つけて低減する方法について説明します。
Ghostcatは、Apache Tomcatバージョン6.x、7.x、8.x、および9.xで見つかり、状況によって遠隔コード実行を招く脆弱性です。Apache Tomcatには、デフォルトで有効にされ、ポート8009のすべてのアドレスをリッスンするAJPコネクタが含まれています。この接続は、HTTPといった接続よりも高い信頼性で処理されます。攻撃者がこれを悪用して、意図しないアクションを、信頼されていないユーザーに対して実行します。
Ghostcatでは、`WEB-INF`ディレクトリや`META-INF`ディレクトリ、その他、ServletContext.getResourceAsStream()
を通じてアクセスできる場所など、Webアプリケーションのどこからでも攻撃者が任意のファイルを取得することを許してしまいます。また、攻撃者にJSPなどのWebアプリケーションの任意のファイルを処理させてしまいます。
遠隔コード実行はデフォルトでは不可能です。影響のあるバージョンのTomcat上で実行されるアプリケーションに、ファイル・アップロードの脆弱性がある場合、攻撃者はGhostcat脆弱性だけでなくこれも突くことで遠隔コード操作を実行してしまいます。ただし、攻撃者には、アップロードしたファイルをドキュメントのルート・ディレクトリに保存し、ターゲットのネットワークの外部からAJPポートに直接到達する能力が必要です。
この脆弱性が重大なのはApache Tomcatの知名度です。インターネット上で稼働する100万台を超えるサーバーがApache Tomcatを実行しています。この脆弱性は、この13年間にリリースされたすべてのバージョンのApache Tomcat(バージョン6.x/7.x/8.x/9.x)に存在します。
GhostcatはTomcatのデフォルト構成にも影響を及ぼし、多くのサーバーがインターネットからの直接的な攻撃にさらされる可能性があります。Apache TomcatのAJPコネクタは、すべてのTomcatサーバー上で有効にされており、サーバーのポート8009をリッスンします。
公開エクスプロイトの存在によって、悪意のある行為を行う者が攻撃を仕掛けやすくなります。
Ghostcat脆弱性のBlack Duckセキュリティ・アドバイザリでは、以下の回避策を提案しています。
AJPコネクタ・サービスは、$CATALINA_HOME/conf/server.xml
ファイルの該当する行をコメントアウトまたは削除し、Tomcatを再起動することにより無効にできます。
アップグレードができない場合は、requiredSecret
属性を次のように構成してAJPプロトコル認証資格情報を設定してください。
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" address="YOUR_TOMCAT_IP_ADDRESS" secret="YOUR_TOMCAT_AJP_SECRET"/>
コードの内容を把握する最適な方法は、ソフトウエア・コンポジション解析(SCA)を使用することです。SCAツールはアプリケーションをスキャンし、ソフトウェア部品表、すなわち、アプリケーションのすべてのオープンソース・コンポーネントのインベントリを作成します。当社のSCAソリューションであるBlack Duckでは、Webアプリ、モバイル・アプリ、シン・クライアント、シック・クライアント、Dockerコンテナ、バイナリ・ファイルなどのさまざまなアプリケーションについてシグネチャ照合、パッケージ・マネージャ検証、スニペット照合などのいくつかのスキャン・テクノロジが採用されています。Black Duckは、コンポーネントごとにセキュリティ脆弱性情報、公開エクスプロイト、回避策、解決策、バージョン・アップグレード・アドバイザリ、脆弱性の詳細も提供します。
新たな脆弱性は、リリース済みのオープンソース・コンポーネントで毎日発見されています。Ghostcat脆弱性は、知名度のあるコンポーネントに新たな脆弱性が見つかると、影響がいかに広範に及ぶのかを示す恰好のサンプルと言えます。Apacheソフトウェア財団のブログによると、Apache Tomcatは、ダウンロード件数1,000万件を超える、広く利用されているオープンソース・コンポーネントです。それでは、開発およびセキュリティ・チームが、既に使用しているオープンソース・コンポーネントで見つかったすべての脆弱性に関する最新情報を入手するにはどうすればよいのでしょうか。
Black Duckの拡充された脆弱性レポートには、NVDセキュリティ・フィードおよびBlack Duckセキュリティ・アドバイザリ(Cybersecurity Research Center(CyRC)から当社専用に提供されているセキュリティ・フィード)の両方の情報が記載されています。その利点は、アプリケーションをスキャンし続けて新たな脆弱性を検出する必要がないことです。我々はBlack Duck KnowledgeBase™を1時間ごとに更新する際、アプリケーションのオープンソース・コンポーネントに関連付けられている新たな脆弱性情報を新たな通知としてユーザーにプッシュして提供しています。ユーザーは、脆弱性のあるオープンソース・コンポーネントをピンポイントでドリルダウンし、フィックスを適用できます。
CVE-2020-1938のBlack Duckセキュリティ・アドバイザリは、以下の画像のように、この脆弱性にBDSA-2020-0339という名前を付け、回避策を提案するとともにCVSS 3.0スコア、およびCVSS 2.0スコアを割り振っています。
CVE-2020-1938 / BDSA-2020-0339のBlack Duckセキュリティ・アドバイザリ
つまり、Black Duckソフトウェア・コンポジション解析によって、開発チームとセキュリティ・チームは、アプリケーションに使用されているオープンソース・コンポーネントに影響を及ぼす新たな脆弱性に関する最新情報を常時入手することができます。