
ActiveMQ向けに報告されたCVE-2023-46604を悪用するリポジトリ
このリポジトリは、CVE-2023-46604 を悪用する方法の例を示すガイドです。
このエクスプロイトは、リフレクションを使用してExceptionクラスをインスタンス化する際に、不正なコマンドを送信することで悪用します。そのコマンドは、有効なコマンドの代わりに、例外クラスとしてSpringクラスを送信してBeanをロードし、文字列コンストラクタパラメータとしてSpring Bean定義を含むXMLファイルをダウンロードするURLを送信します。
このSpring Beanは実際には java.lang.ProcessBuilder であり、Java Active MQクライアントまたはサーバーを実行しているユーザーと同じ権限で任意のbashコマンドを実行します。
PythonコードでHTTP接続を行いたいところですが、私が見た限り、Spring Beanローダーはなぜか2回のHTTP呼び出しを行い、PythonよりもJavaのマルチスレッドプログラミングに慣れているため、このようになっています。
このエクスプロイトは、ActiveMQクライアントがブローカーサーバーに接続する際に、そのサーバーが悪意のあるサーバーである場合に、クライアントをリモートコード実行に対して脆弱にするものです。
エクスプロイトは2つのプロセスに分かれています:
これはPython 3.6およびJava 17でテストされています。
Javaプロジェクトをコンパイルします:
cd activemq-exploit
mvn clean package
cd .. でルートプロジェクトに戻り、python scripts/client_exploit.py を実行します。
別のターミナルで、Javaコードを実行します:
cd activemq-exploitjava -jar target/activemq-exploit-1.0-SNAPSHOT.jarサーバーエクスプロイトはActiveMQサーバーブローカーに接続し、悪意のあるコマンドを送信します。これはActiveMQ Artemis 2.18でのみ使用され、脆弱性を悪用できませんでした。なぜならArtemisにはSpringがパッケージされておらず、_リモートコード実行_の既知の唯一のエクスプロイトはSpring BeanをロードするためのSpringクラスを介するものだからです。
ただし、scripts/server_exploit.py のPythonスクリプトはクライアントエクスプロイトと同じことを行い、サーバーに接続するだけです。認証がないため、Open Wireハンドシェイクの適応が必要かもしれません。