
Pentest TeamCity usando Metasploit
TL;DR: Obtenha senhas do JetBrains IDE (como IntelliJ ou PyCharm) e use essas credenciais dentro do TeamCity Continuous Integration Server para obter uma sessão meterpreter no servidor e em agentes de build usando metasploit por Kacper Szurek.




Este é um comentário do fornecedor (equipe TeamCity da JetBrains) por Yegor Yarko:
A maior parte do conteúdo do artigo descreve como usuários maliciosos podem abusar do TeamCity se tiverem permissões devidamente concedidas para tal. Por exemplo, um usuário com função de Administrador do Sistema (concede controle total sobre o servidor) pode instalar um plugin malicioso do TeamCity ou obter um token para acesso de "super usuário" ao servidor. Além disso, um usuário com função de Administrador de Projeto pode executar código arbitrário no agente ou recuperar senhas de acesso a repositórios configuradas. Esse comportamento faz parte da funcionalidade fornecida pelo TeamCity como produto. Essas considerações estão descritas na seção relacionada da documentação do TeamCity.
Os problemas descritos indicam o quão perigoso pode ser fornecer privilégios elevados a um agente malicioso. Os mantenedores do servidor TeamCity devem revisar regularmente as permissões dos usuários para não conceder a usuários potencialmente maliciosos permissões que possam ser mal utilizadas; revisar as permissões de usuário convidado, se ativado. Outro ponto é não deixar terminais desatendidos enquanto estiver logado em qualquer lugar com permissões não triviais.
Duas preocupações reais de segurança são observadas no artigo, no entanto: uma está relacionada à publicação de um artefato de build malicioso e fazer com que um administrador o visualize no navegador; a outra é a escalação de permissão para executar um build personalizado para execução de código arbitrário em um agente do TeamCity. Esta última tem apenas efeitos menores na maioria das instalações do TeamCity, pois aqueles com essa permissão já têm regularmente a capacidade de executar qualquer código no agente.
No entanto, vamos abordar as preocupações acima em um dos próximos lançamentos do TeamCity e agradecemos por trazê-las ao nosso conhecimento.
Vamos supor que você está realizando testes de penetração dentro de uma empresa de software que usa o stack da JetBrains. Você está usando o metasploit e obtém uma sessão meterpreter no computador do desenvolvedor.
O que você pode fazer em seguida? Há um artigo sobre pentest no TeamCity por Nikhil SamratAshok Mittal de 2015.
Neste post, combino diversas técnicas das Notas de Segurança e do BugTrack e as coloco em um módulo do Metasploit.
Nota: Não uso nenhum 0 day aqui. Para cada ação, você precisa de credenciais válidas do TeamCity. Veja Comentário da JetBrains.
Não sou responsável por nenhum dano causado por este script. Para segurança dos dados, use com set CLEANUP false.
Testado no TeamCity 2017.2.1 (build 50732).
Para decodificar o banco de dados KeePass, precisamos da biblioteca 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 installAgora você pode:
mkdir ~/.msf4/modules/exploits && mkdir ~/.msf4/modules/postteamcity.rb e serverplugin.zip para ~/.msf4/modules/exploitsjetbrains.rb para ~/.msf4/modules/postmsfconsolereload_allO TeamCity pode ser facilmente integrado com todos os IDEs JetBrains usando plugin.

Se a opção Lembrar-me for usada, as senhas são armazenadas usando a IntelliJ Platform Credentials Store API. Você pode encontrar o código fonte aqui.
A rotina de descriptografia no Windows se parece com isso:

pdb.pw é descriptografado usando o Windows CryptUnprotectData. Isso significa que apenas o usuário que criptografou os dados pode decodificá-los.c.kdbx pode agora ser descriptografado usando a Master Password do ponto 20xDFAAPor padrão, a Master Password é aleatória. Ela pode ser alterada nas opções:

Mas isso não muda nada.
Significa apenas que o banco de dados KeePass c.kdbx será criptografado com uma senha diferente. O usuário local ainda pode obter facilmente essa senha do arquivo pdb.pw.