← Back to list

CVE-2024-47948

May 13, 2025

  • Anwendung/Komponente: JetBrains TeamCity
  • Betroffene Version: < 2024.07.3
  • Score (CVSS 3.1): 4.9 MEDIUM
  • Vector: CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:N/A:N
  • CWEs:
    • CWE-23: Relative Path Traversal
  • CVE: CVE-2024-47948

Im Rahmen eine näheren Analyse von JetBrains TeamCity konnte ich eine Schwachstelle finden.

Beschreibung

TeamCity unterstützt das Erstellen von Backups. Um Backups erstellen zu können, benötigt ein Nutzer die Berechtigung Change backup settings and control backup process. Die Backupdatei wird standardmäßig in <TeamCity Data Directory>/backup gespeichert, kann aber in der backup-config.xml konfiguriert werden.

Ein Backupdatei kann grundsätzlich über folgende URL heruntergeladen werden:

  • http://<IP oder DOMAIN>/get/file/<BACKUPDIR>/<FILE>

Wenn ein Angreifer

  1. die Rechte hat im Verzeichnis <BACKUPDIR> Unterverzeichnisse anzulegen (z.B. über eine Shell/Konsole) und
  2. das Recht hat, in TeamCity Backups zu erstellen,

kann er alle Verzeichnisse auf dem Server lesen, die auch der TeamCity-Prozess lesen darf. Hierzu muss der Angreifer einen symbolischen Link in <BACKUPDIR>anlegen, der auf das Root-Verzeichnis des Betriebssystems zeigt.

Im Worst-Case, also wenn der TeamCity-Prozess mit root-Rechte läuft, kann ein Angreifer so lesend auf alle Daten des Betriebssystems zugreifen.

Proof of Concept (PoC)

Innerhalb von <BACKUPDIR> wird ein symbolischer Link auf das Root-Directory erstellt:

Symbolischer Link

Innerhalb von TeamCity hat man gleichzeitig das Recht Backups erstellen zu dürfen:

Recht zum Erstellen von Backups

Anschließend ruft man die URL

http://127.0.0.1:8111/get/file/backup/dir/etc/passwd

auf, um die Datei /etc/passwd zu lesen. Diese liegt außerhalb von <BACKUPDIR>:

Lesen von /etc/passwd

Somit kann man auf jede Datei Zugreifen, auf die auch der TeamCity-Prozess zugreifen darf.

Lessons Learned

Symbolische Links werden gerne mal übersehen. Dadurch kann ein Angreifer aus dem eigentliche Scope ausbrechen und das ganze System enumerieren. Je nach Anwendungsfall ist es keine Seltenheit, dass auf Backupverzeichnisse nicht nur Admins Zugriff haben, sondern unter Umstände viele User. Je nachdem, wofür TeamCity eingesetzt wird, kann der TeamCity-Prozess auch mit höheren Rechten (z.B. Root) laufen.

Auch wenn keine Daten auf dem System verändert werden können, so kann ein Angreifer ggf. das ganze System enumerieren und z.B. nach

  • Passwörtern, die in Dateien hinterlegt sind,
  • SSH-Schlüsseln,
  • Connection-Strings und/oder
  • weiteren Fehlkonfigurationen

suchen.

In Java lässt sich dieser Fehler relativ einfach beheben, beispielsweise durch:

if (Files.isSymbolicLink(path)) {
  throw new RuntimeException("Symbolic link!");
}

Sollte es tatsächlich Anwendungsfälle für symbolische Links geben, so ist es ratsam mit einer Whitelist zu operieren. Es sollten nur bestimmte Verzeichnisse erlaubt werden. Alternativ könnte man auch mit Sandboxen, “chroot” oder ähnlichen Konstrukten arbeiten.

Hinweis

Alle Tests wurden auf der eigenen, lokalen Instanz (mittels Docker) durchgeführt sowie mit eigenen, erstellten Test-Nutzerdaten.

Jetbrains hat schnell, konstruktiv und professionell reagiert.


Timeline

  • Meldung am 13.09.2024 an JetBrains
  • Rückmeldung von Jetbrains am 14.09.2024
  • Fehler behoben und Nachtest am 24.09.2024
  • Patch veröffentlicht am 01.10.2024
  • CVE-Eintrag am 08.10.2024 mit CVE-2024-47948
  • Release des Blog-Eintrages: 13.05.2025