Nonce

Nonce sta per “numero utilizzato una sola volta”.

Si tratta di una stringa alfanumerica pseudo-casuale generata utilizzando una delle funzioni di generazione nonce di WordPress e incorporata in una pagina o in un link da cui verrà generata una richiesta.

Può essere visualizzata nel codice HTML sorgente della pagina.

Il collegamento a LogOut aggiunge un nonce specifico dell’azione nel parametro _wpnonce per garantire che le richieste di disconnessione siano valide e non vengano falsificate.

Includere un nonce in una richiesta e verificarlo nella funzione ricevente garantisce che la richiesta sia intenzionale.

Se implementati e convalidati correttamente, i nonce possono prevenire la richieste fraudolente (Cross-Site Request Forgery).

Tuttavia, gli sviluppatori spesso abusano di questa funzionalità (o non la utilizzano affatto).

I nonce in WordPress non sono in realtà un “numero utilizzato una sola volta” e durano invece fino a 24 ore, il che significa che possono essere riutilizzati entro tale periodo di tempo.

Nell’esempio precedente, un nonce viene passato in una richiesta di disconnessione e questo nonce viene verificato prima dell’esecuzione dell’azione logout.

Questo garantisce che un aggressore che inserisce un link a http://localhost:8081/wp-login.php?action=logout in una propria pagina controllata e accessibile da Internet, e induce un utente WordPress a cliccare sul collegamento (ad esempio tramite un’e-mail di phishing), non possa attivare l’azione logout per conto dell’utente preso di mira.

È importante comprendere l’ uso corretto dei nonce in WordPress, perché spesso vengono implementati in modo errato.

Ad esempio, gli sviluppatori di plugin, spesso utilizzano i nonce come meccanismo di autorizzazione nelle funzioni, invece della funzione current_user_can() descritta nella sezione precedente.

Funzioni e parametri nonce

WordPress offre agli sviluppatori diverse funzioni di generazione e verifica dei nonce.

Per prevenire la falsificazione delle richieste tra siti (Cross-Site Request Forgery), i nonce devono essere generati e inseriti nelle richieste che eseguono azioni sull’istanza di WordPress (ad esempio, la modifica delle impostazioni o l’eliminazione di post) e devono essere verificati all’interno della funzione che esegue l’azione prima che questa venga eseguita.

I ricercatori di vulnerabilità possono cercare queste funzioni all’interno di plugin e temi per verificare se vengono utilizzate insieme a un meccanismo di autorizzazione.

In caso contrario, il ricercatore può cercare nel codice per verificare se la funzione di generazione del nonce viene utilizzata all’interno di una pagina accessibile a un utente di livello inferiore.

Ad esempio, un’azione AJAX potrebbe essere agganciata a una funzione che modifica le impostazioni del plugin e controlla e verifica un nonce, ma non esegue un controllo di autorizzazione.

Questo nonce potrebbe essere generato e stampato sulla pagina del profilo di un utente subscriber.

Ciò significa che un utente abbonato potrebbe modificare le impostazioni del plugin passando un nonce valido a cui ha accesso.

Funzioni di generazione di nonce

wp_create_nonce(): Questa funzione genera un token nonce e lo restituisce come stringa. Accetta un parametro facoltativo, $action, che è una stringa che identifica l’azione eseguita.

wp_nonce_field(): Questa funzione genera un campo di input nascosto con un token nonce e lo restituisce come stringa. Accetta due parametri: $action$name$action è una stringa che identifica l’azione eseguita, mentre $name è il nome del campo di input.

wp_nonce_url(): Questa funzione genera un URL con un nonce aggiunto come parametro della stringa di query.Accetta due parametri: $actionurl e $action, $actionurl è l’URL a cui verrà indirizzato l’utente, mentre $action è una stringa che identifica l’azione eseguita.

Funzioni di verifica del nonce

wp_verify_nonce(): Questa funzione controlla il referrer per un valore nonce. Accetta due parametri: $nonce$action$nonce è il valore nonce, mentre $action è una stringa che identifica l’azione eseguita.

check_admin_referer(): Questa funzione confronta il referrer per una schermata di amministrazione di WordPress con il valore nonce. Accetta due parametri: $action$query_arg$action è una stringa che identifica l’azione eseguita, mentre $query_arg è il nome del parametro URL che contiene il valore nonce.

check_ajax_referer(): Questa funzione verifica il referrer per una richiesta AJAX rispetto al valore nonce. Accetta due parametri: $action$query_arg. $action è una stringa che identifica l’azione eseguita, mentre $query_arg è il nome del parametro URL che contiene il valore nonce.


Traduzione in italiano della WordPress Security Research di Wordfence

WordPress Security Architecture

Lascia un commento