
CVE-2026-63030 - WordPress REST Batch Route-Confusion SQL Injection Proof of Concept
WordPress REST Batch Route-Confusion SQL Injection (CVE-2026-63030) — доказательство концепции
Исследование, разработка эксплойта и документация: Ch4120N
Этот репозиторий и сопутствующий инструмент (exploit.py) предназначены строго для образовательных целей, авторизованного тестирования на проникновение и исследований в области безопасности.
Использование этого эксплойта против целей без явного, предварительного, письменного согласия незаконно и нарушает законы о компьютерном мошенничестве и злоупотреблениях во всём мире. Автор (Ch4120N) не несёт абсолютно никакой ответственности за неправомерное использование, ущерб или правовые последствия, возникшие в результате использования этого кода. Всегда действуйте в рамках закона и получайте соответствующее разрешение.
CVE-2026-63030 — критическая уязвимость без аутентификации, затрагивающая WordPress REST API. Она эксплуатирует ошибку путаницы маршрутов (route-confusion) во вложенной конечной точке пакетной обработки (/wp-json/batch/v1 или /?rest_route=/batch/v1).
Когда WordPress обрабатывает пакет REST API запросов, он проверяет каждый подзапрос на соответствие его конкретной схеме перед выполнением. Однако из-за недостатка в том, как внутренний указатель маршрутизации обрабатывает намеренно повреждённые пути (например, ///), схема проверки рассинхронизируется с фактическим обработчиком выполнения.
/wp/v2/users (которая не принимает author_exclude), выполняется обработчиком /wp/v2/posts. Несанированный параметр author_exclude передаётся напрямую в условие author__not_in в WP_Query, что приводит к неаутентифицированной SQL-инъекции.oembed_cache. Затем эксплойт использует полезную нагрузку changeset из Customizer для отравления кэша меню навигации, обманывая WordPress и заставляя его выполнить запрос на создание пользователя в контексте существующего администратора.pip install не требуется.exploit.py).WP_Post (1 запрос на значение).EXTRACTVALUE(), если включён WP_DEBUG_DISPLAY.cd).Сторонние пакеты не требуются. Убедитесь, что установлен Python 3.8 или выше.
# Clone the repository
git clone https://github.com/Ch4120N/CVE-2026-63030.git
cd CVE-2026-63030
# Make the script executable
chmod +x exploit.py
# Verify Python version
python3 --version
# Executing the script
python3 exploit.py
Эксплойт разделён на три основные подкоманды: check, read и shell.
Эти параметры применяются ко всем подкомандам:
| Option | Description | Default |
|---|---|---|
url | Целевой базовый URL (например, http://target.com) | Обязательно |
--rest-route | Использовать /?rest_route=/batch/v1 вместо /wp-json/batch/v1 (для сайтов с отключёнными постоянными ссылками). | False |
--timeout | Таймаут HTTP-запроса в секундах. | 30.0 |
--proxy | HTTP/HTTPS прокси (например, http://127.0.0.1:8080). | None |
check — обнаружение уязвимостиБезопасно проверяет цель, чтобы подтвердить наличие маркеров путаницы маршрутов, и тестирует тайминги SQLi без извлечения данных.
| Option | Description | Default |
|---|---|---|
--sleep | Задержка SQL-тайминга (секунды), используемая запасным методом --confirm-sqli. | 3.0 |
--samples | Количество тестируемых пар базовых/задержанных SQL-таймингов. | 3 |
--confirm-sqli | Отправить активную полезную нагрузку для подтверждения SQLi (добавляет небольшую задержку). | False |
read — извлечение данных из базы данныхИзвлекает данные напрямую из базы данных через SQL-инъекцию.
| Option | Description | Default |
|---|---|---|
--preset | Быстрые пресеты извлечения: fingerprint (версия/пользователь/БД) или users (логины/хеши). | fingerprint |
--query | Выполнить пользовательское скалярное SQL-выражение (например, "SELECT @@version"). | None |
--prefix | Префикс таблиц базы данных. | wp_ |
--max-length | Максимальное количество извлекаемых символов на значение. | 128 |
--technique | Техника извлечения: auto, union, error или blind. | auto |
shell — удалённое выполнение кодаРазворачивает вебшелл и выполняет команды. Если учётные данные не предоставлены, автоматически запускает мост создания администратора до аутентификации.
| Option | Description | Default |
|---|---|---|
--user | Имя пользователя администратора. (Опустите, чтобы использовать мост до аутентификации). | None |
--password | Пароль администратора. (Опустите, чтобы использовать мост до аутентификации). | None |
--cmd | Одна команда для выполнения на цели. | None |
-i, --interactive | Открыть интерактивный шелл (REPL) после развёртывания. | False |
Ниже приведены реальные примеры работы инструмента.
$ python3 exploit.py check http://vulnerable-wordpress.local --confirm-sqli