
Exploit di esecuzione remota di codice non autenticata per il plugin WordPress WC Designer Pro. Automatizza il rilevamento, il caricamento di file e l'accesso alla shell tramite un endpoint AJAX vulnerabile.
Una prova di concetto non distruttiva per una vulnerabilità di caricamento arbitrario di file senza autenticazione che colpisce il plugin WordPress WC Designer Pro.
WC Designer Pro contiene una vulnerabilità di caricamento arbitrario di file senza autenticazione in un'azione AJAX esposta tramite l'endpoint admin-ajax.php di WordPress.
Il gestore interessato elabora metadati dei file controllati dall'utente e contenuti dei file senza applicare adeguati controlli di autenticazione, autorizzazione, validazione dell'estensione, validazione del tipo MIME o restrizioni lato server sui nomi dei file.
In configurazioni vulnerabili, un attaccante non autenticato potrebbe riuscire a caricare un file eseguibile lato server in una directory accessibile via web. Lo sfruttamento riuscito può comportare l'esecuzione remota di codice con i privilegi del processo del server web.
| Proprietà | Valore |
|---|---|
| Prodotto | WC Designer Pro |
| Piattaforma | WordPress |
| Classe di vulnerabilità | Caricamento arbitrario di file senza restrizioni |
| CWE | CWE-434 |
| Autenticazione richiesta | No |
| Interazione utente richiesta | No |
| Impatto potenziale | Esecuzione remota di codice |
| Complessità dell'attacco | Bassa |
| Componente vulnerabile | Gestore AJAX di upload di WordPress |
| Azione AJAX | wcdp_save_canvas_design_ajax |
L'intervallo esatto delle versioni interessate, l'identificativo CVE e il punteggio CVSS devono essere pubblicati solo dopo essere stati verificati in modo indipendente.
Lo sfruttamento riuscito potrebbe consentire a un attaccante non autenticato di:
L'impatto finale dipende dalla configurazione del server web, dalle regole di esecuzione PHP, dai permessi del filesystem e dai controlli di sicurezza implementati dal provider di hosting.
L'intervallo di versioni interessate è attualmente in fase di validazione.
Product: WC Designer Pro
Affected versions: To be confirmed
Fixed version: To be confirmed
Patch status: To be confirmed
Non dichiarare che tutte le versioni sono interessate, a meno che test o conferme del vendor supportino tale conclusione.
Il flusso di upload vulnerabile sembra fidarsi dei valori controllati dall'attaccante forniti alla seguente azione AJAX:
wcdp_save_canvas_design_ajax
La richiesta contiene metadati del file come:
La vulnerabilità esiste quando il server accetta questi valori senza eseguire tutti i seguenti controlli:
Unauthenticated request
│
▼
/wp-admin/admin-ajax.php
│
▼
action=wcdp_save_canvas_design_ajax
│
▼
Insufficient validation of uploaded file
│
▼
File written to a web-accessible directory
│
▼
Potential server-side code execution
Il percorso di upload osservato segue questa struttura:
/wp-content/uploads/wcdp-uploads/temp/{identifier}/{filename}
Il percorso esatto può variare in base alla versione del plugin, alla configurazione di WordPress e all'ambiente server.
pipQuesta prova di concetto non deve essere usata contro sistemi di terze parti senza esplicita autorizzazione scritta.
Clona il repository:
git clone https://github.com/m2hcz/wcdp-security-poc.git
cd wcdp-security-poc
Crea e attiva un ambiente virtuale:
python3 -m venv .venv
source .venv/bin/activate
Su Windows:
python -m venv .venv
.venv\Scripts\Activate.ps1
Installa le dipendenze:
pip install -r requirements.txt
Esempio di requirements.txt:
requests>=2.28.0
urllib3>=1.26.0
rich>=13.0.0
La prova di concerto deve essere eseguita solo contro un singolo target di laboratorio autorizzato.
python3 exploit.py --url https://wordpress-lab.example
Per una verifica non distruttiva:
python3 exploit.py \
--url https://wordpress-lab.example \
--file ./payloads/verification.txt
Esempio di file di verifica:
WC Designer Pro security verification
Researcher: m2hcz
Purpose: Authorized non-destructive testing
Usa il comando di help integrato per visualizzare gli argomenti supportati:
python3 exploit.py --help
Esempio di output:
usage: exploit.py [-h] --url URL [--file FILE] [--timeout SECONDS]
WC Designer Pro arbitrary file-upload verification PoC
options:
-h, --help show this help message and exit
--url URL authorized WordPress target
--file FILE harmless verification file
--timeout SECONDS HTTP request timeout
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: wordpress-lab.example
Content-Type: multipart/form-data; boundary=----Boundary
La richiesta invoca:
action=wcdp_save_canvas_design_ajax
Di seguito è mostrata una struttura semplificata della richiesta: