
Blackbox, неинтрузивный детектор для wp2shell (RCE до аутентификации в ядре WordPress, CVE-2026-63030 / CVE-2026-60137). Только обнаружение.
Blackbox, неинтрузивный детектор для wp2shell — цепочка RCE до аутентификации в ядре WordPress, обнародованная 2026-07-17:
/wp-json/batch/v1): подзапрос, путь которого не проходит wp_parse_url(), попадает в массив проверки, но не в массив обработчиков, что приводит к рассинхронизации.author__not_in в WP_Query, доступная до аутентификации через эту путаницу маршрутов.В связке они позволяют анонимному атакующему подделать учетную запись администратора и разместить веб-шелл плагина — на стандартной установке, без необходимости в плагинах или темах.
Полное техническое описание: https://own2pwn.fr/articles/appsec/wp2shell-wordpress-rce
Он обнаруживает уязвимость. Он не эксплуатирует ничего. Каждый запрос, который он отправляет, является обычным, только для чтения, который мог бы отправить краулер:
generator, все равно идентифицируется: мета-тег generator, ресурсы ядра с ?ver= (на ресурсах /wp-includes/ и /wp-admin/, которые отслеживают ядро), генератор RSS-ленты (?v=), /wp-links-opml.php, ресурсы страницы входа, /wp-includes/version.php, readme.html и индекс /wp-json/. Источники перекрестно проверяются, и сообщается уверенность (high, если ≥2 совпадают).OPTIONS (и индекса REST), который возвращает схему маршрута , чтобы определить, применяется ли пограничное смягчение.Ни один запрос не запускает уязвимость. Нет POST /wp-json/batch/v1, нет author_exclude, нет SQL. Если версия ядра скрыта, инструмент сообщает об этом, а не гадает (подтверждение wp2shell вслепую потребовало бы эксплуатации).
Устойчивость: повторные попытки с задержкой, декодирование gzip/deflate, запасной https→http, следование межхостовым перенаправлениям, User-Agent как у браузера (можно переопределить) и параллельное сканирование нескольких целей.
| Диапазон | Уязвимость | Исправлено в |
|---|---|---|
| 6.8.0 – 6.8.5 | только SQL-инъекция (нет RCE) | 6.8.6 |
| 6.9.0 – 6.9.4 | RCE до аутентификации |
pip install wp2shell-detect
Или запустите напрямую из исходников (один файл, без зависимостей, Python 3.8+):
git clone https://github.com/own2pwn-fr/wp2shell-detect
./wp2shell-detect/wp2shell_detect.py https://example.com
Ноль зависимостей. Python 3.8+.
wp2shell-detect https://example.com
wp2shell-detect --json https://a.example https://b.example
wp2shell-detect --targets hosts.txt --workers 16 # параллельный обход
wp2shell-detect --discover https://front.example # следовать за бесголовым WP
(Установленный из PyPI, команда wp2shell-detect. Из клона вызывайте ./wp2shell_detect.py с теми же аргументами.)
Опции: --json, --discover, --workers N, --timeout S, --user-agent UA, --insecure, --targets FILE. Код возврата 2, если хотя бы одна цель найдена уязвимой (удобно для CI/периодических проверок).
Современные сайты часто размещают JS/Next.js фронтенд на www., а WordPress держат на соседнем хосте (wordpress., wp., cms.). Сканирование www. тогда возвращает not WordPress — верно, потому что этот хост не является WordPress. Направьте сканирование на хост WordPress или передайте --discover, чтобы инструмент нашел и отсканировал его автоматически из CSP/заголовка Link/URL ресурсов фронтенда.
Пример:
[!!] https://blog.example.com -> УЯЗВИМ (RCE до аутентификации)
версия : 6.9.3 (мета-тег generator=6.9.3, генератор RSS-ленты=6.9.3)
пакет : доступен (/wp-json/batch/v1)
cves : CVE-2026-63030, CVE-2026-60137
примечание : WordPress 6.9.3 находится в диапазоне RCE до аутентификации wp2shell. Пакетная конечная точка REST доступна — пограничное смягчение отсутствует.
Обновите ядро WordPress до 6.8.6 / 6.9.5 / 7.0.2 или новее. Если обновление нужно отложить, заблокируйте пакетный маршрут на границе (/wp-json/batch/v1 и ?rest_route=/batch/v1) или с помощью must-use плагина, перехватывающего rest_pre_dispatch, затем проверьте наличие подозрительных учетных записей администраторов и неизвестных плагинов.
Только для авторизованной оценки. Запуск этого инструмента против систем, которыми вы не владеете и не имеете полномочий тестировать, может быть незаконным в вашей юрисдикции. Вы несете ответственность за его использование.
MIT. См. LICENSE. От own2pwn.
Link или URL ресурсов — часто встречается с бесголовыми/Next.js фронтендами), инструмент сообщает об этом, а --discover сканирует и его.| 6.9.5 |
| 7.0.0 – 7.0.1 | RCE до аутентификации | 7.0.2 |