
Сканер безопасности WordPress в режиме только для чтения для серверов HestiaCP. Обнаруживает индикаторы компрометации wp2shell (CVE-2026-63030 / CVE-2026-60137) на всех размещённых сайтах — почтовые отчёты для каждого пользователя, diff основных файлов с чистой WordPress, анализ PHP/JS/htaccess/изображений и опциональная оценка ИИ через Claude API.
Сканер безопасности WordPress в режиме «только чтение» для серверов HestiaCP.
Обнаруживает индикаторы компрометации wp2shell на всех размещённых сайтах — с почтовыми отчётами по каждому клиенту, сравнением файлов ядра, обнаружением веб-шеллов по SHA256, оценкой риска и необязательной ИИ-оценкой.
⚠️ Безопасные версии: WordPress 6.8.6 / 6.9.5 / 7.0.2 или новее.
Эти скрипты никогда ничего не изменяют — режим «только чтение» на всём протяжении работы.
wp2shell — это цепочка удалённого выполнения кода (RCE) до аутентификации в ядре WordPress, раскрытая 17 июля 2026 года. Одного анонимного HTTP-запроса к стандартной установке достаточно, чтобы создать поддельного администратора и выполнить произвольный код на сервере.
Цепочка объединяет:
author__not_in класса WP_Query/wp-json/batch/v1На скомпрометированных сайтах появляется поддельный администратор с префиксом логина wp2_ и адресом @wp2shell.invalid.
Подробнее: https://wp2shell.com
| Файл | Назначение |
|---|---|
wp2shell-scan.sh | Быстрый сканер IoC по всему серверу — цветной вывод в терминал, оценка риска для каждого сайта, автоматическое сохранение отчёта в /root/ |
wp2shell-report-per-user.sh | Полный сканер — почтовые отчёты по каждому пользователю HestiaCP, сравнение файлов ядра, обнаружение веб-шеллов по SHA256, ИИ-оценка, оценка риска |
known_shells.sha256 | База хешей известных веб-шеллов (SHA256) — загружается автоматически при запуске |
| Проверка | Критичность |
|---|---|
| Версия WordPress по сравнению с безопасными версиями | HIGH / OK |
Учётные записи с префиксом wp2_ или email @wp2shell.invalid | CRITICAL |
| Администраторы, созданные после раскрытия (15/07/2026) | MEDIUM |
| Пропуски в последовательности user-ID (следы удалённого поддельного администратора) | MEDIUM |
Осиротевшие строки wp_usermeta | MEDIUM |
Отравленные строки oembed_cache / customize_changeset | CRITICAL |
Подменённые параметры WP (upload_path, auto_prepend_file, siteurl) | CRITICAL / HIGH |
| Проверка | Критичность |
|---|---|
wp core verify-checksums по сравнению с wp.org | HIGH |
Построчное diff -U5 со скачанным чистым ядром | CRITICAL / HIGH / OK |
| Лишние файлы, отсутствующие в чистом ядре (показываются содержимое и метаданные) | CRITICAL / HIGH |
| Проверка | Критичность |
|---|---|
PHP-файлы в uploads/ | CRITICAL |
Дополнительные PHP-расширения (.php7 .phtml .phar .php5) | HIGH |
| Совпадение SHA256 с базой известных веб-шеллов (WSO, FilesMan, b374k, p0wny…) | CRITICAL |
PHP-файлы, изменённые после SINCE_DATE, И совпадающие с подозрительными паттернами — с отображением совпавшей строки прямо в выводе | CRITICAL / HIGH |
| PHP-файлы с подозрительными паттернами, но НЕ изменённые недавно | LOW |
JS/HTML, изменённые после SINCE_DATE И совпадающие с паттернами обфускации | MEDIUM |
| Внешние C2/URL эксфильтрации данных (pastebin, ngrok, Discord webhooks, bit.ly…) | CRITICAL |
Опасные директивы .htaccess (AddType, auto_prepend_file, внешний RewriteRule) | HIGH |
.htaccess, изменённый после SINCE_DATE | MEDIUM |
Полиглот-изображения с PHP-нагрузкой (<?php в .jpg/.png…) | CRITICAL |
Открытые backup/config файлы (wp-config.php.bak, *.sql…) | MEDIUM |
| Проверка | Критичность |
|---|---|
Записи в пользовательском crontab с curl/wget/php/base64 | HIGH |
| Системные cron-файлы, ссылающиеся на путь к сайту | MEDIUM |
Каждый сайт получает оценку риска от 0 до 100 с разбивкой по каждому фактору, повлиявшему на результат:
+------------------------------------------+
| RISK SCORE: 96/100 COMPROMISED |
+------------------------------------------+
+40 wp2shell fingerprint account
+30 PHP file(s) inside uploads/
+20 Vulnerable WordPress version
+6 Core checksum failure
| Баллы | Метка |
|---|---|
| 0–20 | Probably Clean |
| 21–40 | Low Risk |
| 41–60 | Medium Risk |
| 61–80 | High Risk |
| 81+ | COMPROMISED |
wprootsendmail (для почтовых отчётов)python3 (для обработки JSON при ИИ-оценке)curl, sha256sum, file, strings, unzipcurl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar && sudo mv wp-cli.phar /usr/local/bin/wp
curl -fsSL https://raw.githubusercontent.com/BytesPulse-OE/wp2shell-Hestia-Scanner/main/wp2shell-scan.sh | sudo bash
curl -fsSL https://raw.githubusercontent.com/BytesPulse-OE/wp2shell-Hestia-Scanner/main/wp2shell-report-per-user.sh \
-o wp2shell-report-per-user.sh && sudo bash wp2shell-report-per-user.sh
Примечание: полный сканер при запуске задаёт интерактивные вопросы (ИИ-оценка, сохранение отчёта, порог по дате). Если сначала скачать скрипт, а затем запускать, все подсказки будут работать корректно.
sudo bash wp2shell-scan.sh
Находит все установки WordPress в /home/*/web/*/public_html/, выполняет все проверки, выводит цветной результат в терминал и сохраняет полный отчёт в /root/wp2shell-report-YYYYMMDD-HHMMSS.txt.
При запуске можно указать собственную пороговую дату (по умолчанию: 2026-07-15).
sudo bash wp2shell-report-per-user.sh
При запуске задаются три вопроса:
[AI EVALUATION] Use AI evaluation for ambiguous files? [y/N]
[SAVE REPORT] Save a full report file for later review? [y/N]
[DATE THRESHOLD] Use a different date? Leave blank to keep default [YYYY-MM-DD]:
Всегда начинайте с DRY_RUN=1 (значение по умолчанию) — письма показываются на экране в режиме предпросмотра, ничего не отправляется. Переключайтесь на DRY_RUN=0 только после того, как убедитесь, что вывод выглядит корректно.
| Переменная | По умолчанию | Описание |
|---|---|---|
WEB_ROOT | /home | Корневой каталог веб-сайтов HestiaCP |
SINCE_DATE | 2026-07-15 | Порог «недавно изменённых» |
WP | wp | Путь к WP-CLI |
| Переменная | По умолчанию | Описание |
|---|---|---|
DRY_RUN | 1 | 1 = только предпросмотр, 0 = отправлять письма |
SEND_ONLY_IF_ISSUES | 0 | 1 = не отправлять письмо, если сайт чист |
SINCE_DATE | 2026-07-15 | Порог «недавно изменённых» |
MAIL_FROM | security@<hostname> | Отправитель (envelope sender) |
CORE_CACHE | /root/wp2shell-cores | Каталог кэша чистых версий ядра |
ANTHROPIC_API_KEY | (пусто) | Ключ Claude API для ИИ-оценки |
Для неоднозначных диффов, которые одними паттернами не классифицировать, сканер отправляет diff в Claude API (claude-sonnet-4-6) и возвращает вердикт: DANGER, SUSPICIOUS, REVIEW или OK с пояснением в одно предложение. ИИ используется только в серой зоне — однозначные случаи классифицируются мгновенно, без обращения к API.
Укажите свой ключ в скрипте или экспортируйте его перед запуском:
export ANTHROPIC_API_KEY='sk-ant-api03-...'
sudo -E bash wp2shell-report-per-user.sh
Ключи API: https://console.anthropic.com — они не входят в подписку claude.ai.
Вставьте вывод сканера в артефакт wp2shell Report Analyzer на Claude.ai — он выполнит ту же ИИ-оценку прямо в браузере, без необходимости в собственном ключе.
| Метка | Цвет | Значение |
|---|---|---|
[CRITICAL] | 🔴 Жирный красный | Активный индикатор компрометации — действуйте немедленно |
[HIGH] | 🔴 Красный | Сильный индикатор — срочно проверьте |
[MEDIUM] | 🟡 Жёлтый | Подозрительно — провести расследование |
[LOW] | 🔵 Синий | Низкий приоритет — вероятно, ложное срабатывание |
[INFO] | ⚫ Серый | Информационное сообщение |
[OK] | 🟢 Зелёный | Чисто / ожидаемое состояние |
┌─ MODIFIED: wp-includes/load.php
│ [CRITICAL] Assessment (patterns): executable/obfuscated pattern in added lines
│ +20 Core file modified with dangerous pattern
│
│ ORIGINAL: /root/wp2shell-cores/7.0.2-el/wp-includes/load.php
│ SITE: /home/user/web/example.gr/public_html/wp-includes/load.php
│ @@ -212,5 +212,6 @@
│ - $loaded = true;
│ + $loaded = true;
│ + eval(base64_decode('aGVsbG8='));
└──────────────────────────────────────
CORE_CACHE (/root/wp2shell-cores/) переиспользуется между сканированиями. Удалите его, чтобы принудительно выполнить повторную загрузку.known_shells.sha256 автоматически обновляется раз в сутки.GPL-3.0 — см. LICENSE
Разработано BytesPulse в ответ на публикацию информации об уязвимости wp2shell (июль 2026).
Информация о CVE: https://wp2shell.com
wp2shell — это цепочка удалённого выполнения кода (RCE) в ядре WordPress, раскрытая 17 июля 2026 года. Одного анонимного HTTP-запроса к стандартной установке достаточно, чтобы создать администратора и выполнить произвольный код на сервере.
Цепочка объединяет:
author__not_in класса WP_Query/wp-json/batch/v1На скомпрометированных сайтах появляется учётная запись администратора с префиксом wp2_ и email @wp2shell.invalid.
Подробнее: https://wp2shell.com
| Файл | Назначение |
|---|---|
wp2shell-scan.sh | Быстрый сканер IoC — цветной вывод в терминал, оценка риска для каждого сайта, автоматическое сохранение отчёта в /root/ |
wp2shell-report-per-user.sh | Полный сканер — почтовые отчёты по каждому пользователю HestiaCP, сравнение файлов ядра, обнаружение веб-шеллов по SHA256, ИИ-оценка, оценка риска |
known_shells.sha256 | База SHA256-хешей известных веб-шеллов — загружается автоматически при запуске |
| Проверка | Критичность |
|---|---|
| Версия WordPress по сравнению с безопасными версиями | HIGH / OK |
Учётные записи с префиксом wp2_ или email @wp2shell.invalid | CRITICAL |
| Администраторы, созданные после раскрытия (15/07/2026) | MEDIUM |
| Пропуски в последовательности user-ID (следы удалённого поддельного администратора) | MEDIUM |
Осиротевшие строки wp_usermeta | MEDIUM |
Отравленные строки oembed_cache / customize_changeset | CRITICAL |
Подменённые параметры WP (upload_path, auto_prepend_file, siteurl) | CRITICAL / HIGH |
| Проверка | Критичность |
|---|---|
wp core verify-checksums по сравнению с wp.org | HIGH |
Построчное diff -U5 с чистым ядром | CRITICAL / HIGH / OK |
| Лишние файлы, отсутствующие в чистом ядре | CRITICAL / HIGH |
| Проверка | Критичность |
|---|---|
PHP-файлы в uploads/ | CRITICAL |
Дополнительные PHP-расширения (.php7 .phtml .phar .php5) | HIGH |
| Совпадение SHA256 с известными веб-шеллами (WSO, FilesMan, b374k, p0wny…) | CRITICAL |
PHP, изменённый после SINCE_DATE И содержащий подозрительный паттерн — с показом точной строки | CRITICAL / HIGH |
| PHP с подозрительными паттернами, но НЕ изменённый недавно | LOW |
JS/HTML, изменённые после SINCE_DATE, с паттернами обфускации | MEDIUM |
| Внешние C2/URL эксфильтрации данных (pastebin, ngrok, Discord webhooks, bit.ly…) | CRITICAL |
Опасные директивы в .htaccess | HIGH |
.htaccess, изменённый после SINCE_DATE | MEDIUM |
| Полиглот-изображения с PHP-нагрузкой | CRITICAL |
| Открытые backup/config файлы | MEDIUM |
| Проверка | Критичность |
|---|---|
Crontab пользователя с curl/wget/php/base64 | HIGH |
| Системные cron-файлы, ссылающиеся на путь к сайту | MEDIUM |
Каждый сайт получает оценку от 0 до 100 с разбивкой по каждому обнаруженному фактору:
+------------------------------------------+
| RISK SCORE: 96/100 COMPROMISED |
+------------------------------------------+
+40 wp2shell fingerprint account
+30 PHP file(s) inside uploads/
+20 Vulnerable WordPress version
+6 Core checksum failure
| Баллы | Категория |
|---|---|
| 0–20 | Probably Clean |
| 21–40 | Low Risk |
| 41–60 | Medium Risk |
| 61–80 | High Risk |
| 81+ | COMPROMISED |
wprootsendmail (для отправки email)python3 (для ИИ-оценки)curl, sha256sum, file, strings, unzipcurl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar && sudo mv wp-cli.phar /usr/local/bin/wp
curl -fsSL https://raw.githubusercontent.com/BytesPulse-OE/wp2shell-Hestia-Scanner/main/wp2shell-scan.sh | sudo bash
curl -fsSL https://raw.githubusercontent.com/BytesPulse-OE/wp2shell-Hestia-Scanner/main/wp2shell-report-per-user.sh \
-o wp2shell-report-per-user.sh && sudo bash wp2shell-report-per-user.sh
sudo bash wp2shell-scan.sh
Автоматически находит все установки WordPress в /home/*/web/*/public_html/, выполняет все проверки, выводит цветной результат в терминал и сохраняет полный отчёт в /root/.
sudo bash wp2shell-report-per-user.sh
При запуске задаёт три вопроса:
[AI EVALUATION] Use AI evaluation for ambiguous files? [y/N]
[SAVE REPORT] Save a full report file for later review? [y/N]
[DATE THRESHOLD] Use a different date? Leave blank to keep default [YYYY-MM-DD]:
Всегда начинайте с DRY_RUN=1 (по умолчанию) — письма отображаются на экране и не отправляются. Переключайтесь на DRY_RUN=0 только после того, как убедитесь, что вывод корректен.
| Переменная | По умолчанию | Описание |
|---|---|---|
WEB_ROOT | /home | Корневой каталог HestiaCP |
SINCE_DATE | 2026-07-15 | Порог «недавно изменённых» |
WP | wp | Путь к WP-CLI |
| Переменная | По умолчанию | Описание |
|---|---|---|
DRY_RUN | 1 | 1 = только предпросмотр, 0 = отправка писем |
SEND_ONLY_IF_ISSUES | 0 | 1 = отправлять email, только если что-то найдено |
SINCE_DATE | 2026-07-15 | Порог «недавно изменённых» |
MAIL_FROM | security@<hostname> | Email отправителя |
CORE_CACHE | /root/wp2shell-cores | Кэш чистых версий ядра |
ANTHROPIC_API_KEY | (пусто) | Ключ Claude API для ИИ-оценки |
Для неоднозначных диффов, которые невозможно классифицировать одними паттернами, сканер отправляет diff в Claude API (claude-sonnet-4-6) и возвращает вердикт: DANGER, SUSPICIOUS, REVIEW или OK с пояснением в одно предложение. ИИ используется только в серой зоне.
export ANTHROPIC_API_KEY='sk-ant-api03-...'
sudo -E bash wp2shell-report-per-user.sh
Ключи API: https://console.anthropic.com — отдельно от подписки claude.ai.
Вставьте вывод сканера в артефакт wp2shell Report Analyzer на Claude.ai — он выполнит ту же ИИ-оценку прямо в браузере.
CORE_CACHE (/root/wp2shell-cores/) переиспользуется между сканированиями. Удалите его, чтобы принудительно выполнить повторную загрузку.known_shells.sha256 автоматически обновляется раз в 24 часа.GPL-3.0 — см. LICENSE
Разработано BytesPulse в ответ на публикацию информации об уязвимости wp2shell (июль 2026).
Информация о CVE: https://wp2shell.com