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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2022-22947 — Spring-Cloud-Spel-RCE | Kitploit
Инструменты/GitHubGitHub/4nnns/cve-2022-22947
Анализ уязвимостейАнализ КодаЭксплуатацияЭксплуатация веб-приложенийОбучение и ОбразованиеЛаборатории и Практика
GitHub4nnns/cve-2022-22947

CVE-2022-22947

Spring-Cloud-Spel-RCE

Репозиторий
122174 лет назадЕщё не проверено

Популярное

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

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

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

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

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

Уязвимость удаленного выполнения команд в SpringCloud-Gateway (CVE-2022-22947)

Настройка среды

Способ 1:

Клонировать уже написанный код среды из GitHub.

Репозиторий GitHub

//⚠️Важно: путь загрузки кода среды не должен содержать китайские символы или пробелы
git clone https://github.com/Ha0Liu/CVE-2022-22947.git

Откройте скачанный пакет кода с помощью IDEA: Open ---> путь к скачанному файлу ---> Open.

Способ 2:

Создать проект вручную и настроить среду.

(1) Создайте новый проект, настройте и нажимайте "Далее" до конца;

(2) Проанализируйте структуру каталогов проекта:

    1. Папка .idea содержит файлы конфигурации по умолчанию IntelliJ IDEA, не имеет другого назначения. Можно удалить или оставить по желанию;
    1. Папка src – основная область кода проекта, включает папки java и resource. java – область для написания Java-кода, resource – область конфигурации всего проекта. По умолчанию в Spring-проекте в java добавляется метод SpringApplication, который является методом запуска Spring по умолчанию. В resource по умолчанию добавляется файл application.properties – файл конфигурации Spring-проекта;
    1. Папка test – для тестирования, в ней можно тестировать методы;
    1. pom.xml – файл конфигурации Maven, включает зависимости, конфигурации и т.д., необходимые для проекта;
    1. .iml – файл конфигурации зависимостей Maven, также добавляется по умолчанию;
    1. Папка External Libraries – все зависимые пакеты этого проекта.

(3) Добавьте зависимости Maven в файл pom.xml (Maven Repository содержит подробную информацию о всех зависимостях).

    1. В файле pom по умолчанию будет сгенерирована часть XML-кода, подробности:

    1. Импортируйте необходимые для проекта зависимости. Поскольку это SpringBoot-проект, необходимо импортировать зависимость spring-boot-starter в качестве запускателя сервера. Кроме того, так как данная уязвимость относится к шлюзу SpringCloud Gateway, уязвимые версии – ниже 3.1.1, поэтому мы используем версию 3.1.0 для воспроизведения уязвимости. Также нам нужно мониторить и обращаться к шлюзу через интерфейс actuator, поэтому также нужна эта зависимость. Подробности:

(4) Измените файл конфигурации Spring (путь: src --> main --> resources --> application.properties), подробности:

    1. server.port – порт запуска Spring-сервера, по умолчанию 8080. Можно настроить по своему усмотрению;
    1. management.endpoint.gateway.enabled=true – включает мониторинг шлюза SpringCloud-Gateway через endpoint actuator. По умолчанию false, так как для данной уязвимости необходимо мониторить состояние шлюза, поэтому мы вручную меняем его на true, включая мониторинг;
    1. management.endpoints.web.exposure.include=gateway – выбирает шлюз Gateway в качестве шлюза сервера. Поскольку уязвимость относится именно к шлюзу Gateway, мы объявляем в конфигурационном файле выбор шлюза Gateway.

(5) Измените автоматически сгенерированный Java-класс после создания нового проекта (имя класса обычно ИмяПроекта+Application, путь: src --> main --> java --> com.xxx.xxx --> xxxApplication), подробности на рисунке:

(6) Запустите проект, подробности на рисунке:

(7) Перейдите по адресу http://localhost:9000. Если страница отображается так же, как на скриншоте, значит среда настроена успешно.

Обратный аудит

(1) Сначала посмотрим на официальный патч исправления, diff: https://github.com/spring-cloud/spring-cloud-gateway/commit/337cef276bfd8c59fb421bfe7377a9e19c68fe1e. Официально в функции org.springframework.cloud.gateway.support.ShortcutConfigurable#getValue заменили StandardEvaluationContext на GatewayEvaluationContext для выполнения SPEL-выражений.

Из рисунка видно, что патч в основном изменяет метод разбора SPEL-выражений. Из строки 66 видно условие if, которое проверяет, что SPEL-выражение должно начинаться с #{ и заканчиваться }. Функция getValue отвечает за разбор SPEL-выражений, и можно сделать вывод, что эта уязвимость — RCE через SPEL-выражения.

(2) Нажмите Ctrl + левая кнопка мыши на поле getValue, чтобы отследить вверх до перечисления org.springframework.cloud.gateway.support.ShortcutConfigurable.ShortcutType.

Из метода default в предыдущем тексте видно, что вызывается метод DEFAULT перечисления. Подробности метода:

default ShortcutType shortcutType() {
    return ShortcutType.DEFAULT;
}

Метод DEFAULT

(3) Отследите вверх до org.springframework.cloud.gateway.support.ConfigurationService.class#normalizeProperties().

Этот метод normalizeProperties() разбирает свойства фильтров: передает конфигурационные свойства фильтра в normalize, и в итоге попадает в getValue, выполняя SPEL-выражение, что приводит к инъекции SPEL.

Прямой аудит (цепочка без вывода данных)

(1) Согласно документации [https://cloud.spring.io/spring-cloud-gateway/multi/multi__actuator_api.html](https://cloud.spring.io/spring-cloud-gateway/multi/multi actuator_api.html), пользователи могут создавать и удалять маршруты в шлюзе через actuator. Ниже показана базовая структура шлюза.

(2) В IDEA с помощью функции mapping actuator можно найти интерфейсы для создания и удаления маршрутов.

(3) Перейдите к классу RouteDefinition, который объявляет структуру маршрута.

(4) Перейдите к классу FilterDefinition и обнаружьте, что у фильтра есть два параметра: name и args.

Скачать инструмент