
CVE-2024-27198 & CVE-2024-27199 PoC - RCE, Création de compte administrateur, Énumération des utilisateurs, Informations sur le serveur
Exploitation de CVE-2024-27198 & CVE-2024-27199
RCity est un script Python qui interagit avec un serveur TeamCity vulnérable. La CVE permet la création non autorisée de comptes administrateur, en contournant les erreurs 403 sur le domaine. Elle permet également d'obtenir une exécution de code à distance (RCE) via la route Debug/Processes.
Pour utiliser le script, vous devez fournir l'URL du serveur TeamCity cible en argument de ligne de commande avec l'option -t ou --target :
python3 RCity.py -t http://teamcity.com:8111
Vous pouvez augmenter la verbosité de la sortie avec l'option -v ou --verbose :
python3 RCity.py -t http://teamcity.com:8111 --verbose
Vous pouvez envoyer des commandes ponctuelles directement via l'option -c ou --command. Si vous voulez un shell interactif, N'UTILISEZ PAS cette option. Elle n'est pas adaptée aux shells inversés car la connexion se ferme après l'envoi de la commande :
python3 RCity.py -t http://teamcity.com:8111 -c id
Vous pouvez garantir qu'aucune requête POST n'est envoyée au serveur TeamCity en utilisant l'option -s ou --stealth.
python3 RCity.py -t http://teamcity.com:8111 -s
Désactive la fonction RCE - Tout le reste reste identique
python3 RCity.py -t http://teamcity.com:8111 --no-rce
Empêche la collecte de la liste des utilisateurs, peut être long sur de grandes listes. Passez directement au RCE avec cette option !
python3 RCity.py -t http://teamcity.com:8111 --no-enum
Création de compte administrateur
Exécution de code à distance
Génération de jetons d'autorisation
Énumération des utilisateurs
Récupération de tous les jetons d'authentification privés des utilisateurs
Récupération des détails du serveur



Ici, je vais parcourir les fonctions utilisées dans ce projet, dans l'espoir de vous donner une meilleure compréhension de cet exploit et des vulnérabilités associées.
La nature de la vulnérabilité est liée à la fois à CVE-2024-27198 et 99, car le problème provient du même contournement d'authentification pour les routes de l'API REST des serveurs JetBrains TeamCity. Cependant, l'impact de cette vulnérabilité change et devient intéressant... CVE-2024-27198, le plus gros impact sur le papier, en raison de son effet RCE divulgué, exploite le point de terminaison /app/rest/debug/processes, UNIQUEMENT avec les autorisations nécessaires pour faire les requêtes à ce point de terminaison via un jeton d'authentification. Cet appel à ce point de terminaison diffère entre les hôtes Unix et Windows, mais est manipulé de manière similaire, la seule différence étant le shell natif invoqué pour une requête.
Linux - processes?exePath=/bin/sh¶ms=-c¶ms={yourRCE_HTMLEncoded}
Windows - processes?exePath=cmd.exe¶ms=/c¶ms={yourRCE_HTMLEncoded}
Maintenant, comme mentionné précédemment - cela n'est pas possible sans authentification, ça devrait être sûr... pas vrai ? C'est là que le contournement d'authentification entre en jeu.
Contourner la politique du build TeamCity ouvre l'opportunité de faire des requêtes contre le serveur et d'y déposer notre jeton d'authentification, sans même avoir techniquement besoin de notre propre compte.
Le contournement lui-même consiste à créer un chemin alternatif vers les routes REST, ce qui, sans entrer dans trop de détails, nécessite le contrôle du contenu d'une classe dont le travail est de gérer les requêtes, spécifiquement celles qui ne sont pas des 302 (redirections), ce qui nous permet de la contrôler en ajoutant 3 parties nécessaires à notre URL.
Un point de terminaison non authentifié qui ne déclenchera pas de 302, dans notre cas /hax
Un paramètre de requête URL nommé jsp pour interroger les routes de l'API, par exemple le chemin users ?jsp=/app/rest/users
Un chemin URI arbitraire se terminant par .jsp. Cela peut être réalisé en ajoutant un segment de paramètre de chemin HTTP ;.jsp
Ce qui signifie que la charge utile finale pour faire des requêtes non autorisées au point de terminaison users est : /hax?jsp=/app/rest/users;.jsp
Maintenant, nous pouvons faire des requêtes contre le point de terminaison users et ajouter nos propres utilisateurs, même des administrateurs !
Cependant, avant de pouvoir passer au RCE, nous avons besoin d'un jeton d'authentification, comme porteur pour nos requêtes RCE contre leur API REST. Pas de problème maintenant que nous avons notre contournement, nous allons en créer un !
Le point de terminaison des jetons suivait la même arborescence de chemins que l'exemple précédent, il se trouve à /app/rest/users/id:{user_id}/tokens/{token_name}. Alors, créons une autre charge utile pour contourner l'authentification et créer un jeton !
(Nous fournissons notre propre nom de jeton pour cela, pour ce script il s'agit d'une génération aléatoire de caractères alphanumériques ascii).
/hax?jsp=/app/rest/users/id:{user_id}/tokens/{token_name};.jsp
Après avoir fait notre requête POST pour ajouter notre jeton à notre utilisateur nouvellement créé, nous pouvons maintenant commencer à faire des requêtes contre la route /app/rest/debug/processes !
Rien de spécial dans la confection de nos charges utiles RCE, il suffit d'encoder en HTML vos charges utiles dans l'argument params !
Bon hack !
https://nvd.nist.gov/vuln/detail/CVE-2024-27198
https://github.com/W01fh4cker/CVE-2024-27198-RCE
Ce script est uniquement à des fins éducatives. Utilisez-le de manière responsable et uniquement sur des systèmes pour lesquels vous avez l'autorisation d'accès.