Уязвимость Axelix из-за иерархии контекстов Spring Boot

Источник
Иерархия контекстов в Spring. High CVE в Axelix

Техлид проекта Axelix Михаил Поливаха сообщил об обнаруженной уязвимости, позволяющей вызывать защищенные JWT-токеном эндпоинты Actuator без аутентификации при использовании отдельного порта для управления. Исследователь Андрей Котов (greatkaa) выявил, что при конфигурации с разными портами для основного приложения и менеджмента (например, 8080 и 8081) фильтр авторизации не регистрируется в цепочке обработки запросов второго сервера. Проблема была исправлена в версии 1.2.1 проекта.

Причина ошибки кроется в механизме иерархии контекстов Spring Framework, который многие разработчики забывают учитывать. В Spring Boot при указании отдельного порта для Actuator создается дочерний контекст (management context), родительским для которого является основной контекст приложения. Хотя дочерний контекст видит бины родительского, он не наследует его инфраструктуру, включая фильтры и обработчики событий. Фильтр авторизации Axelix регистрировался в основном контексте, поэтому он не попадал в цепочку Servlet-фильтров, собранную для отдельного сервера на порту 8081.

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

Для корректной работы компонентов в отдельном контексте управления необходимо использовать аннотацию @ManagementContextConfiguration с параметром CHILD и соответствующую регистрацию в файле META-INF/spring/org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration.imports. В данном случае фильтр должен был быть зарегистрирован именно в дочернем контексте, а не в основном, чтобы гарантировать его присутствие в цепочке обработки запросов для Actuator на отдельном порту.

Текст подготовлен нейросетью Loople по материалам источника.

Читайте также

Похожие новости

Поиск по Loople

Назад