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

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

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

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

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

Категории

Все категории
Loading categories
spring4shell-local-verification-lab — Spring Framework CVE-2022-22965 — проверка условий локального воздействия, исправление обновлением версии и повторное тестирование | Kitploit
Инструменты/GitHubGitHub/meng-security/spring4shell-local-verification-lab
Анализ уязвимостейАнализ КодаЭксплуатацияВеб-безопасностьОбучение и ОбразованиеЛаборатории и Практика
GitHubmeng-security/spring4shell-local-verification-lab

spring4shell-local-verification-lab

Spring Framework CVE-2022-22965 — проверка условий локального воздействия, исправление обновлением версии и повторное тестирование

Репозиторий
11 месяц назадЕщё не проверено

Популярное

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

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

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

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

Смотреть все инструменты →
Поделиться

Проект локальной проверки условий эксплуатации, устранения и повторного тестирования Spring4Shell

О проекте

Данный проект предназначен для изучения и проверки условий влияния, рисков, методов устранения и процесса повторного тестирования после устранения уязвимости CVE-2022-22965 в Spring Framework, также известной как Spring4Shell.

Проект выполнен в локальной авторизованной среде, развёрнутой лично. Основное внимание уделяется не атаке на реальные цели, а поэтапному подтверждению условий, связанных с уязвимостью, путём развёртывания тестовой среды Spring MVC до и после устранения уязвимости, а также безопасному и контролируемому наблюдению в режиме только для чтения за различиями во внутренних путях свойств механизма привязки данных Spring до и после обновления версии.

В рамках проекта выполнены следующие этапы:

  • Подготовка окружения JDK, Maven и Apache Tomcat
  • Развёртывание WAR-проекта Spring MVC
  • Базовое тестирование штатной функциональности
  • Подтверждение условий влияния уязвимости
  • Диагностика внутренних путей свойств в режиме только для чтения
  • Анализ причин возникновения уязвимости
  • Обновление версии Spring Framework
  • Повторное тестирование безопасности после устранения
  • Повторное тестирование штатной функциональности после устранения
  • Подготовка отчёта о тестировании и скриншотов-доказательств

Заявление о безопасности

Данный проект предназначен исключительно для личной локальной среды или явно авторизованной среды тестирования безопасности.

Проект не направлен на сканирование, разведку и эксплуатацию уязвимостей каких-либо публичных веб-сайтов, серверов или сторонних бизнес-систем и не содержит реальных пользовательских или бизнес-данных.

В ходе тестирования не выполнялись следующие действия:

  • Не записывался WebShell
  • Не выполнялись системные команды
  • Не изменялась конфигурация Tomcat
  • Не создавалась обратная оболочка (reverse shell)
  • Не проводился контроль с сохранением доступа (persistence)
  • Не оказывалось воздействия на какие-либо внешние системы

Запрещается использовать методы тестирования из данного проекта против любых неавторизованных целей.

Предыстория уязвимости

CVE-2022-22965, обычно называемая Spring4Shell, — это уязвимость удалённого выполнения кода в Spring Framework, связанная с механизмом привязки данных параметров запроса.

Spring MVC поддерживает автоматическую привязку параметров HTTP-запроса к свойствам Java-объектов. Например, в данном проекте параметры имени и электронной почты принимаются следующим образом:

@ModelAttribute("profile") UserProfile profile

В обычных условиях параметры запроса name и email привязываются к объекту UserProfile в соответствии с именами свойств.

В затронутых версиях ограничения доступа к некоторым внутренним путям свойств недостаточно строгие. При использовании JDK 9 или более поздней версии, а также при выполнении определённых условий, связанных с Servlet-контейнером, способом развёртывания и привязкой данных, внешние параметры запроса могут продолжить доступ от обычного бизнес-объекта к внутренним объектам, связанным с Java Class, модулями, загрузчиками классов или контейнером.

В определённых эксплуатируемых средах злоумышленник может дополнительно изменить конфигурацию сервера или записать файлы на сервер, что создаёт риск удалённого выполнения кода.

Данный проект не выполняет полную эксплуатацию удалённого кода, а использует следующий путь свойства для безопасной диагностики различий в режиме только для чтения:

class.module.name

Цели проекта

  1. Понять базовый процесс привязки данных параметров запроса в Spring MVC.
  2. Развернуть локальный тестовый WAR-проект Spring MVC.
  3. Выполнить базовое тестирование штатной бизнес-функциональности.
  4. Подтвердить условия влияния, такие как Spring Framework, JDK, Tomcat, развёртывание WAR и точка входа привязки данных.
  5. Наблюдать поведение доступа к внутренним путям свойств в режиме только для чтения.
  6. Проанализировать основные причины возникновения уязвимости.
  7. Обновить Spring Framework до исправленной версии.
  8. Провести повторное тестирование теми же методами после устранения.
  9. Подтвердить, что обновление версии не повлияло на штатную бизнес-функциональность.
  10. Подготовить исходный код проекта, отчёт о тестировании и скриншоты-доказательства.

Экспериментальная среда

Проект выполнен в личной изолированной экспериментальной среде VMware.

  • Хост-система: Windows 11
  • Целевая машина: виртуальная машина Windows 10
  • ПО виртуализации: VMware Workstation
  • Среда Java: Eclipse Temurin JDK 11.0.31
  • Инструмент сборки проекта: Apache Maven 3.9.16
  • Servlet-контейнер: Apache Tomcat 9.0.60
  • Версия Spring Framework до устранения: 5.3.17
  • Версия Spring Framework после устранения: 5.3.18
  • Веб-фреймворк: Spring MVC
  • Способ развёртывания проекта: классическое развёртывание WAR-пакета
  • Адрес тестирования: 127.0.0.1

Тестовые данные штатной функциональности:

  • Имя: Alice
  • Электронная почта: [email protected]

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

class.module.name

Структура проекта

spring4shell-local-verification-lab/

  • README.md: описание проекта, методика тестирования, результаты проверки и пояснения по устранению
  • docs/: отчёт о локальной проверке условий влияния, устранении и повторном тестировании Spring4Shell
  • images/: скриншоты среды проекта, процесса тестирования и повторного тестирования
  • vulnerable-demo/: проект до устранения на Spring Framework 5.3.17
  • fixed-demo/: проект после устранения на Spring Framework 5.3.18
  • notes/: учебные заметки и записи процесса

Основная структура исходного кода:

  • config/: классы конфигурации Spring MVC и классы инициализации приложения
  • controller/: контроллер обработки форм и диагностики путей свойств
  • model/: класс UserProfile для приёма параметров имени и электронной почты
  • WEB-INF/views/: JSP-страницы главной страницы, результата отправки и результата диагностики

Описание тестовых проектов

В рамках проекта созданы два приложения Spring MVC — до и после устранения уязвимости.

Проект до устранения

Каталог проекта:

vulnerable-demo

Используемая версия:

Spring Framework 5.3.17

Создаваемый WAR-файл:

spring4shell-vulnerable-demo.war

Адрес доступа:

http://127.0.0.1:8080/spring4shell-vulnerable-demo/

Диагностическая страница:

http://127.0.0.1:8080/spring4shell-vulnerable-demo/binding-probe

Проект после устранения

Каталог проекта:

fixed-demo

Используемая версия:

Spring Framework 5.3.18

Создаваемый WAR-файл:

spring4shell-fixed-demo.war

Адрес доступа:

http://127.0.0.1:8080/spring4shell-fixed-demo/

Диагностическая страница:

http://127.0.0.1:8080/spring4shell-fixed-demo/binding-probe

Описание штатной функциональности

Тестовый проект предоставляет простую форму профиля пользователя, содержащую:

  • Поле ввода имени
  • Поле ввода электронной почты
  • Кнопку отправки данных

Контроллер принимает параметры запроса следующим образом:

@ModelAttribute("profile") UserProfile profile

Когда пользователь отправляет имя и электронную почту, Spring MVC автоматически привязывает параметры name и email к объекту UserProfile.

Страница результата считывает связанный объект и отображает отправленные пользователем имя и адрес электронной почты.

Эта функция используется для подтверждения нормальной работы проекта, а также для доказательства наличия действующей точки входа привязки данных параметров запроса Spring MVC в приложении.

Методика тестирования

Проект построен по принципу «сначала подтвердить штатную функциональность, затем подтвердить условия влияния, после чего провести диагностику рисков в режиме только для чтения, и наконец устранить уязвимость и провести повторное тестирование».

  1. Установить и настроить JDK 11, Maven и Apache Tomcat.
  2. Развернуть проект Spring MVC на Spring Framework 5.3.17.
  3. Создать форму имени и электронной почты.
  4. Использовать @ModelAttribute для привязки параметров запроса к объекту UserProfile.
  5. Упаковать проект в WAR-файл с помощью Maven.
  6. Развернуть WAR-файл в отдельно запущенном Apache Tomcat.
  7. Отправить локальные имитированные данные профиля пользователя и выполнить базовое тестирование штатной функциональности.
  8. Проверить фактически используемые JDK, Tomcat, Spring Framework и способ развёртывания.
  9. Выполнить диагностику class.module.name в режиме только для чтения с помощью Spring BeanWrapper.
  10. Зафиксировать результат доступа к пути свойства в среде Spring Framework 5.3.17.
  11. Обновить Spring Framework до версии 5.3.18.
  12. Пересобрать и развернуть проект после устранения.
  13. Провести повторное тестирование с использованием того же пути свойства.
  14. Повторно отправить имя и электронную почту, чтобы подтвердить, что штатная функциональность не затронута.

Подтверждение условий влияния

В рамках проекта были поэтапно подтверждены следующие условия влияния:

  • Используется JDK 11.0.31, что удовлетворяет условию JDK 9 или более поздней версии
  • Используется Spring Framework 5.3.17
  • Проект содержит компонент spring-webmvc
  • Используется Apache Tomcat 9.0.60
  • Проект развёрнут в виде классического WAR-пакета
  • Проект загружается отдельно запущенным Tomcat
  • В контроллере присутствует точка входа привязки данных на основе @ModelAttribute

Фактически развёрнутые зависимости Spring в проекте до устранения включают:

  • spring-beans-5.3.17.jar
  • spring-core-5.3.17.jar
  • spring-web-5.3.17.jar
  • spring-webmvc-5.3.17.jar

Данный проект не судит о наличии уязвимости только по версии Spring Framework, а проводит комплексный анализ с учётом JDK, Spring MVC, Tomcat, развёртывания WAR и точки входа привязки данных.

Метод диагностики рисков

Чтобы избежать выполнения разрушительной эксплуатации уязвимости, данный проект использует предоставляемый Spring Framework BeanWrapper для проверки следующего пути свойства в режиме только для чтения:

class.module.name

Данный путь означает:

  • class: доступ к объекту Java Class, соответствующему текущему бизнес-объекту
  • module: доступ к Java-модулю, к которому относится данный класс
  • name: чтение имени модуля

В процессе диагностики вызываются только методы проверки читаемости свойства и чтения значения свойства:

  • Не устанавливаются свойства объектов
  • Не изменяется конфигурация сервера
  • Не записываются файлы на сервер
  • Не выполняются команды операционной системы

Таким образом, данная диагностика может использоваться только для наблюдения за различиями в доступе к внутренним путям свойств до и после устранения и сама по себе не может доказать факт удалённого выполнения кода.

Результаты проверки

Результаты до устранения

Среда до устранения использует:

Spring Framework 5.3.17

Проверяемый путь свойства:

class.module.name

Результаты диагностики:

  • Возможно ли чтение: true
  • Результат чтения: null

Значение true означает, что текущая среда может продолжать разрешение module.name через свойство class обычного бизнес-объекта.

Результат чтения равен null, потому что текущее WAR-приложение работает в безымянном (unnamed) модуле Java, имя модуля пусто, что не означает сбой чтения пути свойства.

Результаты после устранения

Среда после устранения использует:

Spring Framework 5.3.18

Повторная диагностика с тем же путём свойства:

class.module.name

Результаты диагностики:

  • Возможно ли чтение: false
  • Результат чтения: Not readable

Результаты до и после устранения образуют чёткое сравнение:

  • Spring Framework 5.3.17: путь свойства доступен для чтения
  • Spring Framework 5.3.18: путь свойства недоступен для чтения

Данный результат показывает, что после обновления версии доступ к исходному диагностическому пути свойства был ограничен, и наблюдаемое до устранения проявление риска больше не возникает.

Меры по устранению

В данном проекте устранение выполнено путём обновления версии Spring Framework.

Конфигурация до устранения:

<spring.version>5.3.17</spring.version>

Конфигурация после устранения:

<spring.version>5.3.18</spring.version>

В процессе устранения были выполнены следующие операции:

  1. Копирование проекта до устранения в каталог fixed-demo.
  2. Сохранение бизнес-логики Controller, модели данных и JSP-страниц без изменений.
  3. Обновление Spring Framework с 5.3.17 до 5.3.18.
  4. Повторная загрузка зависимостей исправленной версии с помощью Maven.
  5. Повторная компиляция и сборка WAR-файла исправленной версии.
  6. Развёртывание WAR-файла исправленной версии в Apache Tomcat.
  7. Проверка фактически развёрнутых версий JAR-файлов Spring в исправленном проекте.
  8. Проведение повторного тестирования безопасности с использованием исходного пути свойства.
  9. Повторное тестирование функции отправки имени и электронной почты.

Фактически развёрнутые зависимости Spring в проекте после устранения включают:

  • spring-beans-5.3.18.jar
  • spring-core-5.3.18.jar
  • spring-web-5.3.18.jar
  • spring-webmvc-5.3.18.jar

Данный результат доказывает, что исправленная версия была пересобрана и фактически развёрнута, а не просто изменён номер версии в pom.xml.

Повторное тестирование штатной функциональности после устранения

После обновления до Spring Framework 5.3.18 повторно откройте главную страницу исправленного проекта и отправьте следующие тестовые данные:

  • Имя: Alice
  • Электронная почта: [email protected]

После отправки страница по-прежнему корректно отображает:

  • Профиль пользователя успешно отправлен
  • Имя: Alice
  • Электронная почта: [email protected]

Данный результат показывает, что обновление версии не повлияло на исходную функцию привязки параметров запроса и отображения страниц проекта.

Причины возникновения уязвимости

Механизм автоматической привязки данных Spring MVC может обращаться к свойствам Java-объектов по именам параметров HTTP-запроса.

Обычным бизнес-параметрам name и email требуется доступ только к соответствующим обычным свойствам объекта UserProfile.

Однако механизм доступа к свойствам Spring также поддерживает вложенные пути свойств с точками. В затронутых версиях ограничения на некоторые внутренние пути свойств недостаточно строгие, что позволяет внешним параметрам в определённых средах переходить от обычного бизнес-объекта к объектам, связанным с Java Class, модулями, загрузчиками классов или Servlet-контейнером.

Когда во внутренних объектах существуют записываемые свойства, способные повлиять на конфигурацию сервера или файловую систему, и приложение одновременно удовлетворяет условиям JDK, Tomcat, развёртывания WAR и привязки данных, может дополнительно возникнуть риск удалённого выполнения кода.

Данная уязвимость вызвана не наличием проблем в самих свойствах name или email, и не все проекты, использующие Spring MVC, обязательно могут быть эксплуатированы. Для реализации уязвимости обычно требуется одновременное наличие нескольких условий.

Рекомендации по устранению

В реальных бизнес-системах рекомендуется принять следующие меры:

  • Проверить фактически используемые версии Spring Framework и Spring Boot
  • В первую очередь обновляться до официально поддерживаемых безопасных версий
  • После обновления пересобрать и развернуть приложение
  • Проверить фактические версии JAR-файлов Spring в итоговом пакете развёртывания
  • Ограничить область привязки данных в Controller
  • Разрешать привязку только полей, необходимых для бизнес-логики
  • Использовать специализированные объекты данных запроса для приёма внешних параметров
  • Избегать прямого раскрытия сущностей базы данных или сложных внутренних объектов внешним параметрам
  • Не полагаться на проверку на стороне клиента для обеспечения безопасности
  • Применять временные меры смягчения для систем, которые невозможно обновить немедленно
  • Временные меры смягчения не могут заменить официальное обновление версии
  • Запускать Tomcat и Java-сервисы от учётной записи с минимальными привилегиями
  • Установить минимально необходимые права на каталоги приложения и конфигурации
  • Отслеживать аномальные параметры запросов и изменения файлов на сервере
  • После устранения провести как повторное тестирование безопасности, так и повторное тестирование штатной бизнес-функциональности

Ключевые скриншоты-доказательства

Среда и развёртывание

Подтверждение версии JDK 11

Подтверждение версии Maven

Успешный запуск Apache Tomcat 9.0.60

Успешная сборка Maven

Успешное развёртывание WAR-проекта

Базовое тестирование штатной функциональности

Нормальный доступ к главной странице тестового проекта

Успешное базовое тестирование штатной функциональности

Проверка до устранения

Подтверждение зависимости Spring Framework 5.3.17

Путь внутреннего свойства доступен для чтения до устранения

Устранение и повторное тестирование

Успешная сборка исправленной версии

Путь внутреннего свойства недоступен для чтения после устранения

Успешное повторное тестирование штатной функциональности после устранения

Подтверждение зависимости Spring Framework 5.3.18 после устранения

Текущий прогресс

  • Создание каталога проекта
  • Написание README
  • Создание отчёта о тестировании
  • Подготовка окружения JDK, Maven и Tomcat
  • Развёртывание тестового проекта Spring MVC
  • Сборка и развёртывание WAR-проекта
  • Базовое тестирование штатной функциональности
  • Подтверждение условий влияния уязвимости
  • Локальная диагностика рисков в режиме только для чтения
  • Анализ причин возникновения уязвимости
  • Обновление версии Spring Framework
  • Повторное тестирование безопасности после устранения
  • Повторное тестирование штатной функциональности после устранения
  • Подтверждение фактической версии зависимостей после устранения
  • Подготовка отчёта о тестировании и скриншотов-доказательств

Итоги проекта

В рамках проекта в локальной изолированной среде были выполнены подтверждение условий влияния CVE-2022-22965 в Spring Framework, диагностика проявления рисков, устранение путём обновления версии и повторное тестирование после устранения.

Проект до устранения использовал Spring Framework 5.3.17. В среде JDK 11, Spring MVC, Apache Tomcat 9.0.60 и классического развёртывания WAR путь свойства class.module.name был определён как доступный для чтения.

Проект после устранения обновил Spring Framework до 5.3.18. Тот же путь свойства стал недоступен для чтения, при этом штатная функция привязки данных имени и электронной почты продолжает работать.

В проекте не выполнялась полная эксплуатация удалённого кода — вместо этого с помощью безопасного и контролируемого метода только для чтения была подтверждена разница до и после устранения.

Проект демонстрирует следующие ключевые компетенции:

  • Развёртывание базовой среды Java и Spring MVC
  • Сборка проекта с помощью Maven
  • Развёртывание WAR-приложения в Tomcat
  • Понимание механизма привязки данных Spring
  • Анализ условий влияния уязвимости
  • Проектирование процесса тестирования безопасности
  • Обновление версий компонентов
  • Повторное тестирование после устранения
  • Регрессионное тестирование штатной функциональности
  • Составление отчёта о тестировании безопасности
  • Подготовка скриншотов-доказательств и оформление GitHub-проекта
Скачать инструмент