
# Analisi ed exploit di CVE-2023-3460, una critica escalation di privilegi nel plugin WordPress Ultimate Member, con ambiente di riproduzione e indicazioni di mitigazione.
| CVE ID | CVSS Score | Discovered | Affected Plugin | Vulnerability Type |
|---|---|---|---|---|
| CVE-2023-3460 | 07/04/2023 | Ultimate Member | Unauthorized Admin Access |
Questo studio si concentra sulla CVE¹-2023-3460, una vulnerabilità critica che colpisce il plugin "Ultimate Member" di Wordpress, consentendo un'escalation di privilegi non autorizzata. Questo plugin è ampiamente diffuso e utilizzato per la gestione dei profili su siti WordPress. Questa vulnerabilità presenta un rischio maggiore poiché consente a un attaccante di ottenere diritti di amministratore e quindi il controllo totale del sito. È per questo motivo che questa falla è stata classificata come critica e valutata 9.1 sulla scala CVSS dal NIST².
La CVE-2023-3460 sfrutta una falla nella gestione dei ruoli e delle autorizzazioni da parte del plugin. In WordPress, la funzione WP_Capabilities³ viene utilizzata per gestire i ruoli e le autorizzazioni degli utenti. Questa funzione consente agli amministratori di definire capacità specifiche per ogni ruolo utente. Tuttavia, un uso improprio di questa funzione può portare a vulnerabilità di elevazione dei privilegi.
Nel caso di Ultimate Member, la vulnerabilità consente a un attaccante di aggirare la verifica delle capacità WP e ottenere un accesso a livello di amministratore al sito. Il plugin funziona utilizzando un elenco predefinito di chiavi di metadati utente che non dovrebbero essere manipolate dagli utenti. Tuttavia, questo approccio di sicurezza, basato su liste di blocco, è spesso insufficiente poiché lascia possibilità di aggiramento.
WordPress gestisce i ruoli e le autorizzazioni degli utenti attraverso una struttura chiamata wp_capabilities. Questa struttura è una rappresentazione serializzata dei diversi ruoli e autorizzazioni concessi agli utenti. Ad esempio, un amministratore avrà un insieme di capacità diverso da un editore o da un collaboratore. Queste capacità sono memorizzate nel database WordPress sotto forma di array serializzati nella tabella wp_usermeta.
La falla CVE-2023-3460 ha origine nell'implementazione della gestione dei ruoli e delle autorizzazioni da parte di Ultimate Member. Il plugin opera utilizzando un elenco predefinito di chiavi di metadati utente che gli utenti non dovrebbero manipolare. Questo elenco viene utilizzato per verificare se gli utenti tentano di salvare queste chiavi durante la creazione di un account. Questo approccio è un anti-pattern di sicurezza comune, dove il blocco degli input noti come dannosi (liste di blocco) può sembrare intuitivo, ma si rivela più complesso del previsto e spesso lascia spazio a aggiramenti di sicurezza.
Qui, Ultimate Member utilizza una verifica insufficiente dei metadati inviati durante la registrazione degli utenti. Il plugin utilizza una funzione chiamata is_metakey_banned per verificare se i metadati inviati dall'utente sono consentiti. Questa funzione controlla se i metadati inviati sono presenti nell'elenco dei metadati vietati. Se è così, la funzione restituisce true e la registrazione dell'utente viene bloccata. Altrimenti, la funzione restituisce false e la registrazione dell'utente viene consentita.
Tuttavia, Wordpress accetta alcuni caratteri accentati come caratteri predefiniti. Se un utente invia metadati con caratteri accentati, la funzione is_metakey_banned non li rileverà e la registrazione dell'utente sarà consentita.
Il plugin Ultimate Member è ampiamente utilizzato in vari ambienti, che vanno da piccoli blog personali a grandi siti di e-commerce. Nessuna ipotesi specifica può essere fatta sulle competenze in sicurezza informatica degli utenti finali o degli amministratori dei siti.
I server che ospitano i siti WordPress sono generalmente situati in data center sicuri. Per i siti personali, la sicurezza fisica dipende dall'ambiente individuale dell'utente.
Si presume che il plugin Ultimate Member sia installato e configurato correttamente secondo le istruzioni ufficiali. Il sito WordPress è considerato mantenuto aggiornato, con misure di sicurezza di base in atto.
7.5 Le funzioni di sicurezza
Come amministratore, ecco misure concrete che possono essere adottate per mitigare i rischi associati a questa vulnerabilità.
Validazione degli Input Utente: Implementare validazioni lato server per verificare tutti gli input utente, in particolare quelli che modificano i metadati come wp_capabilities. Utilizzare espressioni regolari o liste di validazione (whitelist) piuttosto che liste di blocco per controllare gli input.
CAPTCHA e Limiti di Frequenza: Integrare CAPTCHA e limiti di frequenza sui moduli di registrazione per prevenire attacchi automatizzati. Verifiche Lato Client: Sebbene le validazioni lato client non siano sufficienti da sole, possono aiutare a prevenire attacchi automatizzati e migliorare l'esperienza utente.
Sorveglianza dei Log: Implementare un sistema di monitoraggio dei log per rilevare qualsiasi modifica sospetta dei ruoli utente o tentativi di iniezione di metadati. Questo può essere fatto utilizzando strumenti di analisi dei log.
Firewall per Applicazioni Web (WAF): Configurare un WAF⁴ per bloccare attacchi noti e sconosciuti, inclusi gli attacchi di iniezione di codice dannoso. Sistemi di Rilevamento delle Intrusioni (IDS/IPS)⁵: Implementare un IDS/IPS per rilevare tentativi di sfruttamento della vulnerabilità.
Revisione dei Ruoli Utente: Esaminare regolarmente i ruoli assegnati agli utenti per rilevare qualsiasi elevazione di privilegi anomala. Restrizione delle Autorizzazioni: Limitare le autorizzazioni concesse per impostazione predefinita ai nuovi utenti e richiedere una validazione amministrativa per l'assegnazione di ruoli elevati, seguendo il principio del minimo privilegio. Vedi dettagli su questo principio qui.
Applicazione Rapida degli Aggiornamenti: Effettuare aggiornamenti di sicurezza regolari per i plugin e WordPress stesso.
Formare gli sviluppatori sulle buone pratiche di sicurezza citate in precedenza e sensibilizzarli sui rischi/impatti di una cattiva implementazione.
Un Makefile è disponibile per aiutarti a lanciare lo sfruttamento della falla. Puoi usarlo come segue:
make up per avviare Wordpress con tutte le installazioni necessarie. Dopo un periodo di attesa, avvierà un server Wordpress, lo configurerà e installerà la versione 2.6.5 del plugin Ultimate Member.
Ti sarà quindi possibile connetterti a Wordpress sulla pagina Login con le credenziali admin:password. Andando sulla scheda Users, potrai vedere
che è presente solo l'utente admin.

Nota: se hai docker-compose e non docker compose puoi modificare il Makefile di conseguenza (variabile DOCKER_COMPOSE= docker-compose).
Poi, puoi lanciare lo sfruttamento della falla:
make exploit
Potrai quindi connetterti a Wordpress su Login con le credenziali fornite dall'exploit e osservare nella scheda Users che è stato creato un nuovo utente con il ruolo Administrator.

make down per fermare il server Wordpress e cancellare i dati.
make exploit lancia lo script exploit.py. Questo script agisce in più fasi:
Dettagli Tecnici dell'Exploit1. Verifica della Vulnerabilità: Prima di procedere allo sfruttamento, lo script verifica se la versione del plugin Ultimate Member installata sul sito target è vulnerabile, cioè inferiore alla versione 2.6.7.
2. Recupero del Nonce di Sicurezza: Lo script recupera un nonce di sicurezza³ dalla pagina di registrazione del sito target. Questo nonce è necessario affinché la richiesta di registrazione venga accettata da WordPress. Il nonce viene recuperato analizzando il codice HTML della pagina di registrazione.
3. Sfruttamento della Vulnerabilità: Lo script invia quindi una richiesta POST alla pagina di registrazione, includendo un parametro manipolato (wp_càpabilities[administrator]=1). Questo parametro utilizza un carattere accentato (à) per aggirare i controlli di sicurezza del plugin e serializzare erroneamente i dati, assegnando così il ruolo di amministratore al nuovo utente creato.
4. Conferma dell'Exploit: Dopo l'invio della richiesta, lo script verifica se l'operazione è riuscita analizzando la risposta del server.
| Minacce | B1 (Riservatezza dei dati utente) | B2 (Integrità del sito web) | B3 (Integrità del plugin Ultimate Member) |
|---|
| M1 Accesso non autorizzato | X | X | X |
| M2 Iniezione di codice dannoso | X | X | |
| M3 Fuga di dati | X | ||
| M4 Deterioramento della reputazione | X |
| Nome | Link |
|---|
| NIST CVE-2023-3460 | https://nvd.nist.gov/vuln/detail/CVE-2023-3460 |
| Ultimate Member Github | https://github.com/ultimatemember/ultimatemember |
| Versione del pacchetto usato per lo sfruttamento 2.6.5 | https://wordpress.org/plugins/ultimate-member/advanced/ |
| Patch dell'exploit | https://github.com/ultimatemember/ultimatemember/commit/fae47c6065ce07e9a8b44501002fa5b4f16d2456 |
| Review dell'exploit | https://thesecmaster.com/how-to-fix-cve-2023-3460-a-privilege-escalation-vulnerability-in-ultimate-member-wordpress-plugin/ |
| OWASP Top 10 Application Security Risks | https://owasp.org/www-project-top-ten/ |