
Pentest TeamCity usando Metasploit
TL;DR: Obtener contraseñas de JetBrains IDE (como IntelliJ o PyCharm) y usar esas credenciales dentro de TeamCity Continuous Integration Server para obtener una sesión de meterpreter en el servidor y agentes de compilación usando metasploit por Kacper Szurek.




Este es un comentario del proveedor (Equipo TeamCity de JetBrains) por Yegor Yarko:
La mayor parte del contenido del artículo describe cómo usuarios malintencionados pueden abusar de TeamCity si se les conceden los permisos adecuados para hacerlo. Por ejemplo, un usuario con rol de Administrador del Sistema (otorga control total sobre el servidor) puede instalar un plugin malicioso de TeamCity u obtener un token para acceso de "superusuario" al servidor. También alguien con rol de Administrador de Proyecto puede ejecutar código arbitrario en el agente o recuperar contraseñas de acceso a repositorios configuradas. Este comportamiento es parte de la funcionalidad proporcionada por TeamCity como producto. Estas consideraciones están descritas en la sección relacionada de la documentación de TeamCity.
Los problemas descritos indican lo peligroso que puede ser proporcionar a un actor malintencionado altos privilegios. Los administradores del servidor TeamCity deben revisar los permisos de los usuarios regularmente para no otorgar a usuarios potencialmente malintencionados permisos que puedan malutilizar; revisar los permisos de usuario invitado, si está habilitado. Otro punto es no dejar sus terminales desatendidas mientras están conectados en cualquier lugar con permisos no triviales.
Sin embargo, se señalan dos problemas de seguridad reales en el artículo: uno está relacionado con la publicación de un artefacto de compilación malicioso y hacer que un administrador lo vea en el navegador, y el otro es la escalada de un permiso para ejecutar una compilación personalizada en ejecución de código arbitrario en un agente de TeamCity. Esto último solo tiene efectos menores en la mayoría de las instalaciones de TeamCity, ya que aquellos con este permiso regularmente ya tienen la capacidad de ejecutar cualquier código en el agente.
No obstante, vamos a abordar los problemas anteriores en una de las próximas versiones de TeamCity, y les agradecemos por traerlos a nuestra atención.
Supongamos que está realizando una prueba de penetración dentro de una empresa de software que utiliza el stack de Jetbrains. Está usando metasploit y obtiene una sesión de meterpreter en la computadora del desarrollador.
¿Qué puede hacer a continuación? Hay un artículo sobre pruebas de penetración en TeamCity de Nikhil SamratAshok Mittal de 2015.
En esta publicación combino múltiples técnicas de Security Notes y BugTrack y las integro en un módulo de Metasploit.
Nota: No utilizo ningún 0 day aquí. Para cada acción se necesitan credenciales válidas de TeamCity. Ver Comentario de JetBrains.
No soy responsable de ningún daño causado por este script. Para seguridad de datos, use set CLEANUP false.
Probado en TeamCity 2017.2.1 (build 50732).
Para decodificar la base de datos KeePass necesitamos la librería 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 installAhora puede:
mkdir ~/.msf4/modules/exploits && mkdir ~/.msf4/modules/postteamcity.rb y serverplugin.zip a ~/.msf4/modules/exploitsjetbrains.rb a ~/.msf4/modules/postmsfconsolereload_allTeamCity puede integrarse fácilmente con todos los IDE de JetBrains usando el plugin.

Si se usa la opción Recordar, las contraseñas se almacenan usando IntelliJ Platform Credentials Store API. Puede encontrar el código fuente aquí.
La rutina de descifrado en Windows se ve así:

pdb.pw se descifra usando Windows CryptUnprotectData. Esto significa que solo el usuario cuyos datos cifran puede decodificarlos.c.kdbx ahora se puede descifrar usando la Contraseña maestra del punto 20xDFAAPor defecto, la Contraseña maestra es aleatoria. Se puede cambiar dentro de las opciones: