Локальная лаборатория для воспроизведения CVE-2025-24813 в Apache Tomcat, документирующая условия эксплуатации и проверку уязвимости с помощью ИИ.
Только для локальных авторизованных экспериментов, понимания патчей и проверки защиты. Не отправляйте запросы на неавторизованные цели.
Этот проект документирует процесс воспроизведения CVE-2025-24813 на локальном экземпляре Apache Tomcat 9.0.98: с использованием partial PUT для записи временного файла, при включённой файловой персистентности Session и слабых условиях фильтрации десериализации проверяется цепочка загрузки файла Session и выполнения Payload.
.inject.session в рабочий каталог, затем подтверждается, что обращение вызывает загрузку Session и выполнение Payload; нельзя судить об успехе только по HTTP-коду состояния.409 или 500, но запись файла и последующее срабатывание всё равно нужно оценивать поэтапно с учётом содержимого файла, журналов сервера и контролируемых побочных эффектов.Официальный бюллетень безопасности Apache перечисляет условия срабатывания CVE-2025-24813, область воздействия (Tomcat 9.0.0-M1 до 9.0.98) и информацию об исправлении в 9.0.99: https://tomcat.apache.org/security-9
java -version)requests127.0.0.1:8080scripts/reproduce_local.py # скрипт локальной проверки, цель по умолчанию localhost:8080
evidence/ # скриншоты экспериментов (переименованы по шагам)
python3 -m venv .venv
. .venv/bin/activate
python -m pip install requests
python scripts/reproduce_local.py
Цель в скрипте жёстко задана как локальный экспериментальный адрес и не содержит логики удалённого сканирования. Перед запуском следует убедиться в локальном экземпляре Tomcat:
work/Catalina/localhost/ROOT доступны для наблюдения.PUT /inject/session с заголовком Content-Range, наблюдение за созданием временного файла;work/Catalina/localhost/ROOT/.inject.session;JSESSIONID=.inject, наблюдение за загрузкой файла Session;409/500 напрямую за неудачу или успех воспроизведения уязвимости.HTTP-заголовки должны использовать настоящие CRLF (байты 0d 0a), не отправляйте 0x0d0x0a как видимый текст. В Python следует использовать b"\\r\\n" или позволить requests сформировать заголовки запроса.
В первую очередь обновитесь до версии Tomcat, содержащей исправление, и повторно проверьте права на запись Default Servlet, сценарии использования partial PUT и конфигурацию фильтра персистентности Session. После исправления повторите тот же набор шагов локальной проверки; ожидается, что цепочка записи временных файлов или цепочка загрузки Session больше не будет воспроизводиться.
Этот репозиторий не предоставляет функций сканирования, персистентности или массовой эксплуатации, направленных на интернет-цели. Всё содержимое ограничено локальной экспериментальной средой, контролируемой автором, и явно авторизованными полигонами.