Today

CVE-2025-24813 - удалённое выполнение произвольного кода Apache Tomcat

Критическая уязвимость в Apache Tomcat, популярном открытом веб-сервере и контейнере сервлетов для Java-приложений, которая позволяет удалённое выполнение произвольного кода без аутентификации.

Уязвимость возникает из-за неправильной обработки частичных PUT-запросов (partial PUT requests) в default servlet Apache Tomcat. По умолчанию этот servlet настроен только на чтение (readonly=true), но если он включён в режим записи (readonly=false), сервер становится уязвимым. Ключевой проблемой является path equivalence flaw — механизм замены слешей (/) на точки (.) в именах файлов при обработке путей. Это позволяет атакующему обходить ограничения на пути и сохранять файлы в неожиданных директориях, например, вне предназначенных папок.

Технические детали

  • Пораженные версии: Apache Tomcat 11.0.0-M1 до 11.0.2 (включая milestone-версии). Apache Tomcat 10.1.0-M1 до 10.1.34. Apache Tomcat 9.0.0-M1 до 9.0.98.
  • Платформы: Любая платформа, где установлен Apache Tomcat с включённым default servlet в режиме записи (readonly=false) и file-based session storage (по умолчанию в некоторых конфигурациях).
  • Тип уязвимости: Path Equivalence (CWE-20: Improper Input Validation). Insecure Deserialization (CWE-502). Уязвимость связана с неправильной обработкой частичных PUT-запросов и десериализацией пользовательских данных.
  • CVSS v3.1: Оценка: 5.5 (средняя серьёзность). Вектор: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N.
  • Точка входа: Default servlet Apache Tomcat, обрабатывающий HTTP PUT-запросы, в сочетании с механизмом хранения сессий в файлах (file-based session persistence). Уязвимость активируется при обработке специально сформированных путей в запросах, использующих замену слешей (/) на точки (.) в именах файлов.

Влияние

Эксплойт использует HTTP-запросы для загрузки и активации вредоносного payload. Вот типичный сценарий на основе PoC из репозиториев вроде brs6412/CVE-2025-24813 или аналогичных (например, Mattb709/CVE-2025-24813-PoC):

Подготовка payload: Атакующий создаёт сериализованный Java-объект с вредоносным кодом. Это можно сделать с помощью инструментов вроде ysoserial (генератор гаджетов для десериализации). Payload кодируется в base64 и может содержать команды, например, для выполнения cmd.exe /c calc.exe (открытие калькулятора на Windows) или кражи данных. В "безопасных" PoC используется dummy-payload для тестирования (без реального вреда, только для проверки десериализации).

Загрузка файла (PUT-запрос): Атакующий отправляет частичный HTTP PUT-запрос на уязвимый endpoint (обычно / или директорию сессий). Запрос содержит:

  • Специально сформированный путь, где слеши заменяются на точки (например, /path/to/session.file становится path.to.session.file), чтобы обойти ограничения и сохранить файл в директории сессий Tomcat (например, SESSIONS.ser или аналогичный).
  • Тело запроса — base64-кодированный payload.

Пример упрощённого PUT-запроса (из PoC):

PUT /path.to.malicious.session HTTP/1.1
Host: target-server:8080
Content-Length: [длина payload]
[Base64-encoded serialized object]

Сервер сохраняет файл в неожиданном месте из-за path equivalence, если запись разрешена.

Активация десериализации (GET-запрос): Атакующий отправляет GET-запрос с cookie JSESSIONID, указывающим на загруженный файл сессии (например, JSESSIONID=malicious.session). Tomcat пытается загрузить и десериализовать сессию из файла, что приводит к выполнению кода.

Пример GET-запроса:

GET / HTTP/1.1
Host: target-server:8080
Cookie: JSESSIONID=../path.to.malicious.session

В ответ сервер вернёт ошибку (например, HTTP 500), но payload выполнится. В логах Tomcat появятся признаки: необычные PUT/GET-запросы, доступ к сессионным файлам или base64-данные.

Результат: Если payload вредоносный, атакующий получает RCE — выполнение команд на сервере, доступ к файлам, инъекцию JSP-скриптов или коррупцию данных. В реальных атаках наблюдались попытки кражи конфиденциальной информации или установки бэкдоров.

Download | Github