
Pentest TeamCity mit Metasploit
TL;DR: Passwörter aus JetBrains IDE (wie IntelliJ oder PyCharm) abrufen und diese Anmeldedaten innerhalb des TeamCity Continuous Integration Servers verwenden, um mit Metasploit von Kacper Szurek eine Meterpreter-Sitzung auf dem Server und den Build-Agents zu erhalten.




Dies ist ein Kommentar des Herstellers (JetBrains TeamCity-Team) von Yegor Yarko:
Der Großteil des Artikelinhalts beschreibt, wie böswillige Benutzer TeamCity missbrauchen können, wenn sie zu Recht entsprechende Berechtigungen erhalten haben. Beispielsweise kann ein Benutzer mit der Rolle „Systemadministrator“ (gewährt vollständige Kontrolle über den Server) ein böswilliges TeamCity-Plugin installieren oder einen Token für den „Superuser“-Zugriff auf den Server erhalten. Auch ein Benutzer mit der Rolle „Projektadministrator“ kann beliebigen Code auf dem Agenten ausführen oder die hinterlegten Repository-Zugangspasswörter abrufen. Dieses Verhalten ist Teil der Funktionalität, die TeamCity als Produkt bereitstellt. Diese Überlegungen werden im entsprechenden Abschnitt der TeamCity-Dokumentation beschrieben.
Die beschriebenen Probleme verdeutlichen, wie gefährlich es sein kann, einem böswilligen Akteur hohe Berechtigungen zu gewähren. TeamCity-Server-Administratoren sollten die Benutzerberechtigungen regelmäßig überprüfen, um potenziell böswilligen Benutzern keine Berechtigungen zu gewähren, die sie missbrauchen könnten; ebenso sollten sie die Gästebetechtigungen überprüfen, falls aktiviert. Ein weiterer Punkt ist, Terminals nicht unbeaufsichtigt zu lassen, während man irgendwo mit nicht-trivialen Berechtigungen angemeldet ist.
Zwei tatsächliche Sicherheitsbedenken werden im Artikel erwähnt: Einerseits die Veröffentlichung eines böswilligen Build-Artefakts, das einen Administrator dazu verleitet, es im Browser anzusehen, und andererseits die Eskalation einer Berechtigung zur Ausführung eines benutzerdefinierten Builds hin zur Ausführung von beliebigem Code auf einem TeamCity-Agenten. Letzteres hat nur geringe Auswirkungen auf die meisten TeamCity-Installationen, da Benutzer mit dieser Berechtigung ohnehin regelmäßig bereits die Fähigkeit haben, beliebigen Code auf dem Agenten auszuführen.
Dennoch werden wir die oben genannten Bedenken in einem der nächsten TeamCity-Releases adressieren und danken Ihnen für die Meldung.
Angenommen, Sie führen einen Penetrationstest in einem Softwareunternehmen durch, das den JetBrains-Stack verwendet. Sie nutzen Metasploit und erhalten eine Meterpreter-Sitzung auf dem Entwicklercomputer.
Was können Sie als Nächstes tun? Es gibt einen Artikel über TeamCity-Pentesting von Nikhil SamratAshok Mittal aus dem Jahr 2015.
In diesem Beitrag kombiniere ich mehrere Techniken aus den Security Notes und dem BugTrack und fasse sie in einem Metasploit-Modul zusammen.
Hinweis: Ich verwende hier keine 0-Day-Exploits. Für jede Aktion sind gültige TeamCity-Anmeldedaten erforderlich. Siehe JetBrains-Kommentar.
Ich bin nicht verantwortlich für Schäden, die durch dieses Skript verursacht werden. Verwenden Sie zur Datensicherheit set CLEANUP false.
Getestet auf TeamCity 2017.2.1 (build 50732).
Zum Entschlüsseln der KeePass-Datenbank benötigen wir die kdbx-Ruby-Bibliothek.
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 installJetzt können Sie:
mkdir ~/.msf4/modules/exploits && mkdir ~/.msf4/modules/postteamcity.rb und serverplugin.zip nach ~/.msf4/modules/exploits kopierenjetbrains.rb nach ~/.msf4/modules/post kopierenmsfconsolereload_allTeamCity kann mit allen JetBrains-IDEs über ein Plugin integriert werden.

Wenn die Option Remember me verwendet wird, werden die Passwörter mit der IntelliJ Platform Credentials Store API gespeichert. Den Quellcode finden Sie hier.
Die Entschlüsselungsroutine unter Windows sieht so aus:

pdb.pw wird mit der Windows-Funktion CryptUnprotectData entschlüsselt. Das bedeutet, dass nur der Benutzer, der die Daten verschlüsselt hat, sie entschlüsseln kann.c.kdbx kann nun mit dem Master-Passwort aus Schritt 2 entschlüsselt werden.0xDFAA xor-verknüpft.Standardmäßig ist das Master-Passwort zufällig. Es kann in den Optionen geändert werden: