
Уязвимость BDU:2024-11286 (CVE-2024-50379) в Apache Tomcat
Уязвимость BDU:2024-11286 (CVE-2024-50379) в Apache Tomcat, связана с конкуренцией за ресурсы (race condition) при обработке файлов JSP. Она позволяет злоумышленнику выполнить произвольный код на сервере, если выполнены определенные условия конфигурации.
Анализ уязвимости
Уровень опасности: 9.8 (Критический)
Вектор атаки: 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 (Доступность: Высокое) – Критическое нарушение работы системы.
Интерпретация: Критическая уязвимость (9.8) позволяет удалённо без прав и участия пользователя нарушить конфиденциальность, целостность и доступность системы. Максимальный риск обусловлен сетевым вектором, низкой сложностью эксплуатации и полным контролем над уязвимым компонентом.
Технические детали уязвимости
Природа проблемы
Уязвимость BDU:2024-11286 (CVE-2024-50379) относится к классу TOCTOU (Time-of-Check to Time-of-Use). Она возникает из-за разрыва между моментом проверки файла (например, его существования и прав доступа) и моментом его использования. В Apache Tomcat это происходит во время компиляции JSP-файлов:
-
Time-of-Check (TOC): Tomcat проверяет наличие и корректность JSP-файла перед компиляцией.
-
Time-of-Use (TOU): Файл компилируется в сервлет и выполняется.
Атакующий может подменить файл в промежуток между TOC и TOU, особенно на файловых системах, не различающих регистр (например, Windows). Например, замена file.jsp
на FILE.JSP
позволяет обойти проверки, если сервер настроен на запись в директорию через DefaultServlet.
Условия эксплуатации
Для успешной атаки необходимо:
-
Конфигурация Tomcat:
-
Параметр
readonly
вweb.xml
должен быть установлен вfalse
(нестандартная настройка). -
Разрешен метод
PUT
для загрузки файлов.
-
-
Файловая система: Сервер должен работать на case-insensitive FS (Windows, macOS по умолчанию).
-
Доступ к серверу: Атакующий должен иметь возможность отправлять HTTP-запросы к Tomcat (локально или удаленно).
Анализ эксплойтов
Пример 1: Использование JSP-скриптов
Эксплойт включает два файла:
-
upload.jsp: Обрабатывает загрузку файлов на сервер.
-
hello.jsp: Содержит код для выполнения произвольных команд (например,
calc.exe
).
Код hello.jsp:
<%@ page import="java.io.*" %> <!DOCTYPE html> <html> <body> <% Process process = Runtime.getRuntime().exec("cmd /c start calc.exe"); out.println("Calculator executed."); %> </body> </html>
Этот код использует Runtime.getRuntime().exec()
для выполнения системных команд. При успешной загрузке файла атакующий может обращаться к нему через URL, активируя выполнение кода[citation:Приведенный пользователем код].
Пример 2: Python-скрипт для массовой атаки
Скрипт ApachTomcat_CVE-2024-50379_ConditionalCompetitionToRce.py
использует многопоточность для создания race condition:
-
PUT-запросы: Отправляются для создания файлов
aa.Jsp
иbb.Jsp
. -
GET-запросы: Проверяют наличие
aa.jsp
иbb.jsp
(разный регистр).
Ключевой фрагмент:
with concurrent.futures.ThreadPoolExecutor(max_workers=10000) as executor: for _ in range(10000): futures.append(executor.submit(requests.put, target_url_put1, data=payload_put)) futures.append(executor.submit(requests.get, target_url_get1))
Массовая отправка запросов увеличивает шансы на успешную подмену файла до момента компиляции[citation:Приведенный пользователем код].
Способы защиты
-
Обновление версии Tomcat:
-
Установите версии 9.0.98, 10.1.34 или 11.0.2, где устранена уязвимость11012.
-
-
Конфигурационные меры:
-
Установите параметр
readonly
вtrue
в файлеweb.xml
:<init-param> <param-name>readonly</param-name> <param-value>true</param-value> </init-param>
-
Отключите метод
PUT
в настройках сервера.
-
-
Использование case-sensitive FS: Развертывание Tomcat на Linux с файловыми системами, чувствительными к регистру.
-
Дополнительные настройки Java:
-
Для Java 8 и 11: Установите
-Dsun.io.useCanonCaches=false
. -
Для Java 17: Убедитесь, что
sun.io.useCanonCaches
не установлен вtrue
.
-
