
Pentest de TeamCity avec Metasploit
TL;DR : Obtenez les mots de passe de l'IDE JetBrains (comme IntelliJ ou PyCharm) et utilisez ces identifiants dans TeamCity Continuous Integration Server afin d'obtenir une session meterpreter sur le serveur et les agents de build en utilisant metasploit par Kacper Szurek.




Voici un commentaire de l'éditeur (équipe JetBrains TeamCity) par Yegor Yarko :
La majeure partie du contenu de l'article décrit comment des utilisateurs malveillants peuvent abuser de TeamCity s'ils ont légitimement obtenu les permissions nécessaires. Par exemple, un utilisateur avec le rôle d'administrateur système (qui donne un contrôle total sur le serveur) peut installer un plugin TeamCity malveillant ou obtenir un jeton pour l'accès "super utilisateur" au serveur. De même, un administrateur de projet peut exécuter du code arbitraire sur l'agent ou récupérer les mots de passe d'accès au dépôt configurés. Ce comportement fait partie des fonctionnalités offertes par TeamCity en tant que produit. Ces considérations sont décrites dans la section correspondante de la documentation de TeamCity.
Les problèmes décrits montrent à quel point il peut être dangereux d'accorder des privilèges élevés à un acteur malveillant. Les administrateurs du serveur TeamCity doivent vérifier régulièrement les permissions des utilisateurs afin de ne pas accorder à des utilisateurs potentiellement malveillants des permissions qu'ils pourraient détourner ; vérifier les permissions des utilisateurs invités, si cette fonction est activée. Un autre point est de ne pas laisser vos terminaux sans surveillance lorsque vous êtes connecté avec des permissions non triviales.
Deux problèmes de sécurité concrets sont cependant mentionnés dans l'article : l'un concerne la publication d'un artefact de build malveillant et le fait qu'un administrateur le visualise dans le navigateur, et l'autre est l'escalade d'une permission d'exécution d'un build personnalisé vers l'exécution de code arbitraire sur un agent TeamCity. Ce dernier n'a que des effets mineurs sur la majorité des installations TeamCity, car ceux qui ont cette permission ont déjà la capacité d'exécuter n'importe quel code sur l'agent.
Néanmoins, nous allons traiter les problèmes ci-dessus dans l'une des prochaines versions de TeamCity, et nous vous remercions de les avoir portés à notre attention.
Supposons que vous effectuez un test de pénétration dans une société de logiciels qui utilise la pile JetBrains. Vous utilisez metasploit et obtenez une session meterpreter sur l'ordinateur du développeur.
Que pouvez-vous faire ensuite ? Il y a un article sur le pentest de TeamCity par Nikhil SamratAshok Mittal datant de 2015.
Dans cet article, je combine plusieurs techniques issues des Notes de sécurité et du BugTrack et les intègre dans un module Metasploit.
Remarque : Je n'utilise aucun 0-day ici. Pour chaque action, vous avez besoin d'identifiants TeamCity valides. Voir Commentaire de JetBrains.
Je ne suis pas responsable des dommages causés par ce script. Pour la sécurité des données, utilisez set CLEANUP false.
Testé sur TeamCity 2017.2.1 (build 50732).
Pour décoder la base de données KeePass, nous avons besoin de la bibliothèque Ruby kdbx.
find / -name "metasploit-framework.gemspec"vim /usr/share/metasploit-framework/metasploit-framework.gemspecspec.add_runtime_dependency 'kdbx', '0.2.0'cd /usr/share/metasploit-framework/ && bundle installMaintenant vous pouvez :
mkdir ~/.msf4/modules/exploits && mkdir ~/.msf4/modules/postteamcity.rb et serverplugin.zip dans ~/.msf4/modules/exploitsjetbrains.rb dans ~/.msf4/modules/postmsfconsolereload_allTeamCity peut être facilement intégré à tous les IDE JetBrains à l'aide d'un plugin.

Si l'option Remember me est utilisée, les mots de passe sont stockés via l'API IntelliJ Platform Credentials Store. Vous pouvez trouver le code source ici.
La routine de déchiffrement sous Windows ressemble à ceci :

pdb.pw est déchiffré en utilisant Windows CryptUnprotectData. Cela signifie que seul l'utilisateur dont les données sont chiffrées peut les décoder.c.kdbx peut maintenant être déchiffrée en utilisant le Master Password du point 2.0xDFAA.