
Неаутентифицированное RCE в WordPress Core (CVE-2026-63030, CVE-2026-60137)
__ ______ ____ ____ _ _ _____ _ _ \ \ / / _ \___ \/ ___|| | | | ____| | | | \ \ /\ / /| |_) |__) \___ \| |_| | _| | | | | \ V V / | __// __/ ___) | _ | |___| |___| |___ \_/\_/ |_| |_____|____/|_| |_|_____|_____|_____|wp2shell-checker | WordPress Batch API Desync Detector
Детектор-проверщик для pre-auth RCE в WordPress Core REST Batch API
Автор: 0xjessie21 — Cybersecurity ILCS
| Сигнатура | wp2shell / WP Core REST Batch API Desync |
| Критичность | 9.8 CRITICAL — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Затронутые версии | WordPress 6.9.0-6.9.4 и 7.0.0-7.0.1 |
| Исправлено в | 6.9.5, 7.0.2 |
| Предусловия | Отсутствуют — без аутентификации, без плагинов, стандартная конфигурация |
| Режим | Ненаправленный / read-only зонд |
Скриншот работы инструмента, обнаружившего уязвимый экземпляр WordPress в ходе авторизованного внутреннего пентеста (VAPT).

Данный инструмент предназначен строго для авторизованного тестирования безопасности и защитной верификации.
| Используйте только против экземпляров WordPress, которые вам принадлежат или на тестирование которых у вас есть прямое письменное разрешение (например, утверждённая внутренняя область VAPT). | |
Данный зонд спроектирован как ненаправленный — он нацеливается на несуществующий ID категории (0) и останавливается на уровне проверки прав, поэтому никакие данные никогда не создаются, не изменяются и не удаляются. | |
| Не изменяйте полезную нагрузку (например, не подставляйте реальный ID категории и не направляйте её на другие REST-маршруты) с целью реальной эксплуатации. Это превратит инструмент из детектора в боевой эксплойт — а для этого он явно не предназначен и это не поддерживается. | |
| Не публикуйте, не распространяйте и не запускайте инструмент против систем, выходящих за пределы вашей авторизованной области. Несанкционированное использование против сторонних систем может нарушать Закон об ИТЭ (UU ITE) в Индонезии и аналогичные законы о компьютерных злоупотреблениях в других странах. | |
| Предоставляется как есть, без каких-либо гарантий. Автор и связанные с ним организации не несут ответственности за неправомерное использование, ущерб или юридические последствия, возникшие в результате использования данного инструмента. |
Используя этот инструмент, вы соглашаетесь с тем, что несёте единоличную ответственность за обеспечение соответствия вашего использования применимому законодательству и политикам авторизации вашей организации.
REST Batch API ядра WordPress (/wp-json/batch/v1) поддерживает синхронизацию трёх параллельных массивов при обработке пакета подзапросов. Намеренно некорректный подзапрос нарушает их синхронизацию — в результате каждый последующий подзапрос обрабатывается с использованием неправильного обработчика и колбэка проверки прав.
Инструмент отправляет один сформированный пакетный запрос и анализирует только коды ответов, никогда не переходя к операциям, изменяющим состояние.
| # | Подзапрос | Назначение |
|---|---|---|
| 0 | POST http://: | Намеренно некорректный — инициирует рассинхронизацию индексов |
| 1 | DELETE /wp/v2/categories/0 | Безопасный датчик — категории с ID 0 не существует |
| 2 | POST /wp/v2/block-renderer/core/paragraph | Эталонный обработчик для обнаружения утечки |
Логика вердикта
| Результат | Вердикт |
|---|---|
block_cannot_read | УЯЗВИМО — проверка прав утекла из обработчика block-renderer |
rest_term_invalid | ИСПРАВЛЕНО — обработчик категорий ответил корректно |
| маркер не найден | НЕОПРЕДЕЛЁННО — WAF, API отключено или это не WordPress |
Дополнительно инструмент выполняет пассивную WAF/CDN-идентификацию по заголовкам ответа:
Cloudflare · Sucuri · Akamai · AWS CloudFront · Imperva · Fastly · F5 BIG-IP · Wordfence
# Базовое сканирование
./wp2shell_checker.py https://your-site.com
# Несколько целей за один запуск
./wp2shell_checker.py https://site1.com https://site2.com https://site3.com
# Свой таймаут
./wp2shell_checker.py https://your-site.com --timeout 20
# Показать полный сырой запрос/ответ (полезная нагрузка, заголовки, тело)
./wp2shell_checker.py https://your-site.com --raw
# Отключить цвета/анимацию (для записи в файл)
./wp2shell_checker.py https://your-site.com --no-color > scan_report.txt
Все флаги
| Флаг | Описание |
|---|---|
targets | Один или несколько базовых URL для сканирования (обязательно) |
--timeout N | Таймаут запроса в секундах (по умолчанию: 10) |
--no-color | Отключить ANSI-цвета и анимацию сканирования |
--raw | Вывести полный сырой запрос/ответ и заголовки |
Если цель оказалась УЯЗВИМОЙ:
7.0.2 (или 6.9.5 для ветки 6.9). Убедитесь, что обновление действительно применилось./wp-json/batch/v1 и ?rest_route=/batch/v1 на WAF/обратном прокси — блокировать нужно обе формы.| wp2shell.com | оригинальный чеккер и бюллетень, Searchlight Cyber |
| Hadrian Security — Technical Breakdown | анализ первопричины |
Этот проект распространяется под лицензией MIT — подробности см. в файле LICENSE.
Cybersecurity ILCS · создано для внутреннего защитного использования