Ghostcatの侵害はTomcatの全バージョンに影響
2020年2月26日
0 分で読めますApache Tomcatは、Java Servlet、JavaServer Pages、Java Expression Language、Java WebSocketの各テクノロジーを実装したオープンソースソフトウェアです。TomcatはJava HTTP Webサーバー環境として広く利用されており、1998年にリリースされました。
Ghostcatは、セキュリティ研究者であるChaitin Techが1月3日に発見した、Tomcatの深刻度の高い脆弱性です。2月20日、中国国家脆弱性データベース(CNVD)は、この問題についてCNVD-2020-10487の番号でセキュリティアドバイザリを公開しました。
この脆弱性はApache JServ Protocol(AJP)で発見されました。このバイナリプロトコルにより、攻撃者はTomcatのWebアプリケーションディレクトリ内の任意のファイルを読み取ったり、インクルードしたりできます。
AJPコネクタ
AJPコネクタは、Tomcatと外部との通信を担います。Tomcat 6~9では、AJPコネクタはデフォルトで有効になっており、ポート8009を使用します。CVE-2020-1938はTomcatのAJPコネクタにおけるファイル読み取り/インクルードの脆弱性であるため、パッチが適用されていないすべてのバージョンが影響を受けます。
この脆弱性を悪用すると、攻撃者はWebアプリケーションのファイルの内容を読み取れます。Webアプリケーションでファイルのアップロードが許可されている場合、攻撃者は悪意のあるJava Server Pages(JSP)を含む任意のファイルをサーバーにアップロードし、サーバー上でリモートコードを実行させることもできます。

解決策
Apache Tomcatは、Tomcat 7、8、9向けにパッチ適用済みバージョンをすでにリリースしています。
Chaitinの研究者は、パッチを適用する場合、/conf/server.xmlファイル内のコネクタ設定に適切なシークレットも追加するよう推奨しています。
パッチを適用できない場合、この問題を緩和する方法がほかにもあるとChaitinの研究者は述べています。
AJPコネクタを使用していない場合は、/conf/server.xmlファイル内のAJPコネクタの宣言をコメントアウトするか、削除しても問題ありません。
AJPコネクタを使用していて、パッチ適用済みバージョンに更新できない場合は、推測されにくい安全なシークレットを指定したrequiredSecretフィールドを追加してください。
Spring Boot
最新のJVMエコシステムレポートによると、Spring Bootはエコシステムで最も広く利用されているサーバーサイドフレームワークです。Spring Bootは組み込みWebサーバーを使用し、デフォルトでは組み込みTomcatが使われます。spring-boot-starter-webによって、脆弱なバージョンの組み込みApache Tomcatパッケージがシステムに導入されている可能性があります。
2020年3月2日更新
Spring Bootでは、デフォルトでAJPコネクタが作成されないことを知っておくとよいでしょう。つまり、デフォルト設定では攻撃者はこの脆弱性を悪用できません。ただし、Spring Bootの設定は変更できます。ご利用の設定によっては、脆弱性の影響を受けるか確認し、適切な対策を講じてください。
CTFを始めよう
オンデマンドのバーチャル入門ワークショップを視聴して、CTFの課題の解き方を学びましょう。



