
Apache Struts 2.0 RCE脆弱性 - 攻撃者がContent-Typeヘッダーを通じてWebアプリケーションにOSコマンドを注入することを可能にします。
Apache Struts 2.0 RCE 脆弱性
これは CVE-2017-5638 を悪用するスクリプトです。攻撃者は Content-Type ヘッダーを介して Web アプリケーションに OS コマンドを注入できます。 Apache Struts 2 は、Java EE Web アプリケーションを開発するためのオープンソースの Web アプリケーションフレームワークです。Java Servlet API を利用および拡張し、開発者がモデル・ビュー・コントローラ(MVC)アーキテクチャを採用することを推奨しています。
2017 年 3 月の最終週に、「Nike Zheng」を名乗る Apache Struts ハッカーが、Apache Struts 2 の脆弱なサーバー上で OS コマンドをリモートでいかに簡単に実行できるかを示す公開 PoC エクスプロイトを投稿しました。
この脆弱性 CVE-2017-5638 - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5638 は、HTTP リクエスト内で特別に細工された Content-Type 値により、認証なしのリモートコード実行(RCE)を可能にします。攻撃者は Content-Type に不正な値を設定することで、脆弱なソフトウェアに例外を発生させることができます。ソフトウェアがエラーメッセージを表示用に準備する際、Apache Struts Jakarta Multipart パーサーの欠陥により、悪意のある Content-Type 値が表示されずに実行されてしまいます。
この公開エクスプロイトの公開以降、脆弱な Apache サーバーを探す大量のスキャンが観測されました。このエクスプロイトは非常に簡単に実行できるため、誰でもリモートから脆弱なマシンをきわめて簡単に悪用できます。そのため、大量のスキャンに続いて頻繁な悪用が報告されました。
私たちのクライアントの 1 社は、脆弱な Apache Struts 2 フレームワークを広く使用しており、どの IP(Web サーバー)が脆弱な Apache フレームワークを実行しているか正確な記録がなかったため、全 IP のスキャンを希望しました。テスト対象の IP は約 1,000 件ありました。クライアントは、Linux サーバーか Windows サーバーかの情報とともに、すべての脆弱なドメインを提出するよう求めました。各 IP を個別にスキャンするという退屈な作業を避けるために、私は小さなスクリプトを作成しました。
このスクリプトは、以下の機能/タスクを組み合わせています。
ドメインリストが含まれるファイルから、脆弱なドメイン名を 1 つずつ読み取ります。
脆弱なサーバーを確認するために公式エクスプロイトを使用します。
エクスプロイトを実行し、Windows サーバーか Linux サーバーかを確認します。