
Неинтрузивный сканер обнаружения цепочки RCE без предварительной аутентификации wp2shell в WordPress (CVE-2026-63030 + CVE-2026-60137). Только обнаружение, без эксплуатации.
Неинтрузивный сканер обнаружения недавних уязвимостей ядра WordPress — включая цепочку RCE до аутентификации wp2shell.
wp2shell_scanner.py определяет версию ядра сайта WordPress и считывает его публично анонсированную поверхность REST API, затем классифицирует каждый отслеживаемый CVE ядра независимо по отношению к обнаруженной версии. Вердикты учитывают ветки — например, сайт на 6.8.x корректно сообщается как подверженный CVE SQL-инъекции, но не полной цепочке RCE. Он только обнаруживает: эксплуатирующая нагрузка никогда не отправляется. Один файл, одна зависимость (requests), CI-дружественные коды выхода и готовые для клиентов HTML/JSON/e-mail-отчёты.
⚠️ Только авторизованное использование. Сканируйте системы, которыми вы владеете или для тестирования которых у вас есть явное (письменное) разрешение. Сканер отправляет идентифицирующий
User-Agent, чтобы синие команды могли атрибутировать трафик — он не скрывается.
Цепочка RCE wp2shell = CVE-2026-63030 + CVE-2026-60137 вместе → удалённое выполнение кода без аутентификации на стандартной установке. Сканер сообщает цепочку как подверженную только когда оба CVE классифицируются как уязвимые для обнаруженной версии.
Нюансы веток, которые сканер учитывает корректно:
6.8.x содержит SQL-инъекцию (CVE-2026-60137) только — не цепочку RCE.6.9 CVE-2026-3906 (Notes) исправлен в 6.9.2, но цепочка wp2shell не закрыта до 6.9.5. Поэтому 6.9.2/6.9.4 читаются как исправленные для бага Notes, но остаются уязвимыми к цепочке RCE — следовательно, сканер на этой ветке рекомендует только 6.9.5 или новее, никогда 6.9.4.Операционно важно: технические разборы и рабочий PoC для wp2shell уже публичны. Определение версии теперь — абсолютный минимум — приоритет — патчинг. Обновление закрывает уязвимый путь, но не удаляет бэкдор, внедрённый до установки патча — отсюда шаг оценки компрометации в отчёте.
Это сканер версии ядра. CVE плагинов и тем — подавляющее большинство каталога WPScan / Patchstack — требуют живого курируемого фида и перечисления версий по каждому плагину и намеренно вне области применения здесь. В своей нише (недавние CVE ядра WordPress) он стремится быть точным и корректным по веткам, а не дублировать коммерческую базу уязвимостей.
<meta name="generator"> на главной странице/readme.html<generator> в RSS/Atom-ленте/wp-links-opml.php (OPML)/wp-json/, чтобы увидеть, рекламирует ли WordPress пространство имён batch/v1 в своём REST-индексе. Это подтверждает, что пространство имён зарегистрировано, а не что конечная точка достижима через WAF. Никакой batch-запрос и никакая нагрузка не отправляются.Он не эксплуатирует ничего. Никакой нагрузки SQL-инъекции, никакого запроса с путаницей batch-маршрутов, никакой попытки выполнить код или прочитать данные. Обнаружение основано на версии плюс пассивное чтение публично анонсированной поверхности API.
pip install requests
# single target
python3 wp2shell_scanner.py -t https://site.example --authorized
# list of targets (one per line, # comments allowed)
python3 wp2shell_scanner.py -T scope.txt --authorized -o ./reports
# preview the output formats with synthetic data — no network, no auth needed
python3 wp2shell_scanner.py --demo -o ./reports
Флаг --authorized — это явный шлюз авторизации — живые сканирования отказываются запускаться без него.
| Код | Значение |
|---|---|
2 | Как минимум один целевой адрес уязвим |
1 | Как минимум один целевой адрес неопределён / ошибка |
0 |
Получатель уведомительного e-mail задаётся константой CSSLTD_CONTACT в начале скрипта (по умолчанию [email protected]). Измените её на свой адрес приёма.
Каталог examples/ содержит синтетический (--demo) вывод для вымышленного уязвимого хоста (example.com, WordPress 6.9.1 — подвержен всем трём отслеживаемым CVE):
wp2shell_report_example.com.html — готовый для клиента HTML-отчётwp2shell_example.com.json — JSON-записьwp2shell_email_example.com.txt — черновик уведомительного e-mailОни сгенерированы из вымышленных данных для иллюстрации формата отчёта. Это не результат сканирования какого-либо реального сайта.
6.9.5+ — в 6.9.4 всё ещё есть цепочка wp2shell.)uploads/, wp-config.php, wp-cron и учётным записям администраторов; выполните проверки целостности файлов относительно заведомо исправного ядра./wp-json/batch/v1).Этот инструмент предназначен только для авторизованного тестирования безопасности. Вы несёте ответственность за наличие разрешения на сканирование любого целевого адреса. Несанкционированное сканирование может быть незаконным. Авторы не несут ответственности за злоупотребление.
| CVE | Слабость | Доступ | Затронутые версии ядра | Исправлено в |
|---|
| CVE-2026-63030 — wp2shell | CWE-436 — путаница маршрутов REST batch → RCE (Критическая; CVSS 9.8 WPScan CNA / 7.5 CISA-ADP; GHSA-ff9f-jf42-662q) | Без аутентификации | 6.9.0–6.9.4, 7.0.0–7.0.1 | 6.9.5, 7.0.2 |
| CVE-2026-60137 | CWE-89 — SQL-инъекция в WP_Query author__not_in (Умеренная отдельно, CVSS 5.9; Критическая в цепочке; GHSA-fpp7-x2x2-2mjf) | Без аутентификации | 6.8.0–6.8.5, 6.9.0–6.9.4, 7.0.0–7.0.1 | 6.8.6, 6.9.5, 7.0.2 |
| CVE-2026-3906 | CWE-862 — отсутствие авторизации в REST API Notes (Умеренная, CVSS 4.3, GHSA-6x83-fcf5-r65g) | Подписчик+ | 6.9.0–6.9.1 | 6.9.2 |
| Флаг | Значение |
|---|
-t, --target | Одиночный целевой URL или хост |
-T, --targets-file | Файл с одним целевым адресом в строке |
--demo | Сгенерировать ПРИМЕРНЫЙ отчёт/e-mail из синтетических данных (без сети) |
-o, --output-dir | Каталог вывода (по умолчанию ./wp2shell_reports) |
--formats | Список через запятую: json,html,email (по умолчанию: все) |
--authorized | Шлюз авторизации — обязателен для живых сканирований |
--timeout | HTTP-таймаут в секундах (по умолчанию 12) |
--delay | Секунды между целевыми адресами (будьте вежливы; по умолчанию 1.0) |
--insecure | Не проверять TLS-сертификаты |
--quiet | Подавить сводку в консоли |
| Чисто (исправлено / не затронуто / не WordPress) |
| Вердикт | Значение |
|---|
VULNERABLE | Обнаруженная версия попадает в затронутый диапазон — немедленно установите патч |
PATCHED | На исправленном релизе; не подвержен отслеживаемым CVE |
NOT_AFFECTED | Версия предшествует самой ранней отслеживаемой уязвимости (< 6.8.0 — CVE-2026-60137) |
UNKNOWN | Версию не удалось подтвердить, векторы разошлись или обнаружена предрелизная сборка — проверьте вручную |
NOT_WORDPRESS | Признак WordPress не найден |