
Exploit de lecture arbitraire de fichiers GitLab
Ce script permet une exécution de code à distance sur GitLab Community Edition (CE) et Enterprise Edition (EE). La CVE est une lecture arbitraire de fichier qui vous permet d'extraire le secret_key_base de Rails en téléchargeant le fichier secrets.yaml de GitLab. Ce qui vous permet ensuite d'obtenir une exécution de code en signant votre propre cookie experimentation_subject_id que GitLab utilise en interne pour les tests A/B. La charge utile intégrée dans le cookie contient une vulnérabilité de désérialisation qui permet d'exécuter du code sur l'instance GitLab.
La lecture arbitraire de fichier existe dans GitLab EE/CE 8.5 et versions ultérieures. Cela a été corrigé dans les versions 12.9.1, 12.8.8 et 12.7.8. Cependant, la RCE n'affecte que les versions 12.4.0 et supérieures lorsque le cookie vulnérable experimentation_subject_id a été introduit.
Testé sur 12.8.1
Le module a été testé avec Python 3.9 et nécessite les dépendances suivantes :
Si vous avez pipenv installé, vous pouvez rapidement démarrer en exécutant et pour obtenir un shell dans l'environnement virtuel pipenv.
pipenv installpipenv shell $ ./cve_2020_10977.py --help
usage: cve_2020_10977.py [-h] --url URL -u USERNAME -p PASSWORD [--cmd CMD]
optional arguments:
-h, --help show this help message and exit
--url URL Target URL
-u USERNAME, --username USERNAME
Gitlab username
-p PASSWORD, --password PASSWORD
Gitlab password
--cmd CMD Command to execute
Un Makefile est inclus pour faciliter le développement local ou le test de l'exploit. Il dépend de docker et docker-compose pour déployer rapidement une version locale de GitLab vulnérable à cette CVE.
make up
Cela déploiera une instance locale de GitLab et une instance Debian pour faciliter le test d'un shell inversé. L'instance GitLab sera disponible depuis votre localhost sur le port 5580. Cette image supplémentaire vous donne une IP accessible depuis le réseau Docker. Il est possible de rendre votre localhost accessible depuis le conteneur Docker, mais cela n'en vaut pas la peine à mon avis, et je ne veux certainement pas promouvoir l'utilisation de --privileged
La connexion à l'instance Debian RHOST peut être facilement réalisée avec :
make shell
Cela vous permet de préparer votre shell inversé avec nc -lnvp 9000.
Une fois cela fait, vous êtes prêt à tester l'exploit. Vous pouvez exécuter :
make exploit
Pour exécuter l'exploit, cela ne fera pas la RCE, mais affichera le secret rails de GitLab.
make exploit-rce
Enchaînera cette CVE avec la charge utile RCE mentionnée ci-dessus pour obtenir un shell inversé.
Bon hacking !