生産性のない話

趣味の範囲でサイバーセキュリティの話

Apache Tomcat の脆弱性(CVE-2017-12617)について

9月の中頃から少し騒がれていたApache Tomcatのリモートコード実行の脆弱性についてです。

関連する脆弱性は CVE-2017-12615、CVE-2017-12616、CVE-2017-12617 の3つです。 それぞれが順番に出てきて、情報が小出しにされている感じでしたが、結局条件を満たしていれば、影響範囲は割と広いようです。

結構早い段階で検証している方もいたので、PoCはあるということは分かっていました。

Tomcatの一連のRCEの脆弱性について(CVE-2017-12615, CVE-2017-12617) - Cat.6(ねころっく)

脆弱性の内容自体は以下の通りです(サイオスのセキュリティブログから)。

Tomcatの複数の脆弱性 ( CVE-2017-12617, CVE-2017-12615 , CVE-2017-12616 ) — | サイオスOSS | サイオステクノロジー

CVE-2017-12617

リモートからの任意のコード実行の可能性

重要度 - Important

影響するバージョン : 9.0.0.M1 to 9.0.0, 8.5.0 to 8.5.22, 8.0.0.RC1 to 8.0.46, 7.0.0 to 7.0.81

サーバ上の設定でHTTP PUTが有効になった状態(つまり、readonly initialisationパラメータをfalseに設定している時)でで動作している際に、特別に細工されたリクエストにより、サーバにJSPファイルをアップロードすることが可能です。このJSPにコードを仕込むことで、サーバ上で任意のコードを実行することが可能になります。

9/19に公開されたCVE-2017-12615に対する修正では、この問題は解決されませんでした。

CVE-2017-12615

リモートからの任意のコード実行の可能性

重要度 - Important

影響するバージョン : Windows:

7.0.0 to 7.0.79 Windows上でHTTP PUTが有効になった状態(つまり、readonly initialisationパラメータをfalseに設定している時)でで動作している際に、特別に細工されたリクエストにより、サーバにJSPファイルをアップロードすることが可能です。このJSPにコードを仕込むことで、サーバ上で任意のコードを実行することが可能になります。

この修正は実際には、リリース時のチェックの関係で7.0.81に加えられているため、更新する際には7.0.81にする必要が有ります。

CVE-2017-12616

情報流出の可能性

重要度 - Important

影響するバージョン : 7.0.0 to 7.0.80

VirtualDirContextを使用している際に、セキュリティ制限をバイパスすることが出来ます。これにより、特別に細工されたリクエストを用いてVirtualDirContextにより提供されるJSPリソースのソースコードを見る事が可能になります。

CVE-2017-12617 の検証

Linux環境でTomcatのリモートコード実行を行ってみました。 readonlyパラメータをfalseにしておくと、PUTメソッドでファイルがアップロードできます。

検証環境

設定ファイルの変更

Tomcatの「conf/web.xml」ファイルでreadonlyパラメータをfalseにします。

f:id:blueBLUE:20171016030900p:plain

攻撃コードの実行

脆弱な Tomat サーバに対してPUTメソッドでファイルを設置します。

テストのファイルをPUTし、アクセスすると、ファイルが作成されていることが分かります。

f:id:blueBLUE:20171017232630p:plain

JSPファイルをアップロードすることで任意のコード実行が可能です。

f:id:blueBLUE:20171016030921p:plain

アップロードしたファイルにアクセスして、「whoami」を実行してみます。

f:id:blueBLUE:20171017232804p:plain

コマンドの実行結果が返ってきました。

ちなみに、脆弱な設定になっていないTomcatサーバへPUTをしようとしても403が返ってきます。

f:id:blueBLUE:20171016031027p:plain

脆弱性の内容としてはPUTによるファイルアップロードが実態のようです。JSPファイルをアップロードしてコード実行が行うことができますが、バックドアをアップロードしてコード実行を行うのは一般的な攻撃手法なので、なぜリモートコード実行の脆弱性なのかが分かりません。

検証してみた感想としては、これただのPUTじゃんという思いが強いのですが、PUTが可能ということ自体が重大な脆弱性であるので、アップデートするなり適切な対処をしましょう。

参考

Apache Tomcat における脆弱性に関する注意喚起

Tomcatの複数の脆弱性 ( CVE-2017-12617, CVE-2017-12615 , CVE-2017-12616 ) — | サイオスOSS | サイオステクノロジー

Apache Tomcatに含まれる脆弱性(CVE-2017-12617)に関する脆弱性検証レポート | NTTデータ先端技術株式会社

Tomcatの一連のRCEの脆弱性について(CVE-2017-12615, CVE-2017-12617) - Cat.6(ねころっく)