
Preuve de concept et reproduction en laboratoire pour CVE-2026-75816, une prise de contrôle de compte non authentifiée via la soumission de formulaire admin-ajax dans WordPress Frontend Admin.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · CVE-2026-75816
Frontend Admin by DynamiApps 3.29.11 - shabti
Je suis @abraxas_null. Labo en loopback. Le client est CVE-2026-75816-Abraxas-Labs.py.
user_1 n'est pas un post. admin-ajax.php frontend_admin/form_submit non authentifié. ActionPost::conditions_logic() retourne tôt lorsque l'id de l'objet n'est pas numérique (user_1), sautant current_user_can('edit_post'). Le champ Email pre_update_value en 3.29.11 n'a pas de vérification edit_user et fait un wp_update_user de l'email de l'utilisateur 1. NVD liste jusqu'à 3.29.12 ; le changelog 3.29.12 a ajouté cette vérification. Le labo est en 3.29.11. La version actuelle est 3.29.13.
| CVE | CVE-2026-75816 · CVE.org |
| CWE | CWE-287 |
| CVSS | Critique : 9.8 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Produit | Frontend Admin by DynamiApps |
| Affecté | toutes les versions jusqu'à 3.29.11 (NVD liste 3.29.12 ; 3.29.12 a ajouté la vérification edit_user du champ Email) |
| Corrigé | 3.29.12 et ultérieures |
| Auth | aucune |
| Licence | GNU Affero GPL v3.0 |
| Labo | 127.0.0.1 uniquement |
Un POST invité modifie l'email de l'administrateur. La réinitialisation du mot de passe vers cette adresse constitue une prise de contrôle du compte. Le labo s'arrête au changement d'email. Je ne publie pas de recette de mot de passe perdu visant l'admin de quelqu'un d'autre.
Wordfence a nommé pre_update_value et user_1. J'ai lu conditions_logic, puis le champ Email, puis j'ai récupéré le formulaire public.
GET /fea-lab/. Extraire _acf_nonce, _acf_objects, la clé du champ user_email. POST acff[post][<key>][email protected]. GET /?fea_lab_email=1. Petit JSON ajax Post updated, puis la nouvelle adresse.
Fausses pistes : action=pre_update_value ou parse_array (les noms de fonctions ne sont pas des routes) ; nonce codé en dur ; post_id numérique (alors edit_post s'exécute réellement et un invité est refusé) ; who_can_see différent de all ; 3.29.12 ; considérer [email protected] encore présent dans le corps comme un succès.
Port 8088. Frontend Admin 3.29.11. Formulaire public /fea-lab/, who_can_see=all, objet user_1.
Cible uniquement 127.0.0.1:8088 (ou le loopback sur lequel vous avez lié).
cd lab
docker compose up --force-recreate
./run.sh
Preuve : GET /?fea_lab_email=1 renvoie [email protected]. Le HTML générique du formulaire ou [email protected] ne l'est pas.
Façons d'échouer sans rien apprendre :
[email protected] toujours l'email de l'admin0 / -1 / JSON de permission sans le changement d'emailMettez à jour Frontend Admin by DynamiApps vers 3.29.12 ou plus récent (actuel 3.29.13). Relancez CVE-2026-75816-Abraxas-Labs.py contre la version corrigée : l'email de l'admin ne doit pas changer.
plugins.trac.wordpress.org/changeset/3664865/acf-frontend-form-element
www.wordfence.com/threat-intel/vulnerabilities/id/f1637a3b-7b0f-485d-9d19-4f711f8c671b?source=cve
Répertoire de plugins : acf-frontend-form-element
Navigateur Trac : plugins.trac.wordpress.org/acf-frontend-form-element
Tags SVN : plugins.svn.wordpress.org/acf-frontend-form-element
Abraxas Labs : abraxaslabs.tech · github.com/abraxas · @abraxas_null
GNU Affero GPL v3.0. Voir LICENSE.
Le client communique en loopback. Son utilisation contre des systèmes que vous ne possédez pas n'est pas autorisée par Abraxas Labs. Aucune garantie.