Wordpress non protegge da Login CSRF?

2

È possibile utilizzare Wordpress Nonces per proteggere da Login CSRF? link

Ho dato un'occhiata al codice per la funzione e sembra che utilizzi solo l'ID utente per la verifica, il che significa che l'autore dell'attacco e la vittima avranno lo stesso nonce? È veramente corretto?

    
posta user82444 08.08.2015 - 18:06
fonte

2 risposte

2

Sì, gli utenti di Wordpress possono proteggersi dal login CSRF.

Gli URL di Wordpress possono essere applicati agli URL e anche moduli, come il modulo di accesso:

To add a nonce to a form, call wp_nonce_field() specifying a string representing the action. By default wp_nonce_field() generates two hidden fields, one whose value is the nonce and one whose value is the current URL (the referrer), and it echoes the result. For example, this call:

wp_nonce_field( 'delete-comment_'.$comment_id );

might echo something like:

<input type="hidden" id="_wpnonce" name="_wpnonce" value="796c7766b1" />
<input type="hidden" name="_wp_http_referer" value="/wp-admin/edit-comments.php" />

Normalmente, gli utenti non creati vengono collegati a un utente che ha effettuato l'accesso perché ha senso proteggere gli utenti che hanno effettuato l'accesso. Login CSRF è speciale perché può essere utilizzato per selezionare come target utente disconnesso registrandoli.

Guardando attraverso il codice wp_create_nonce , posso vedere che i nonces vengono creati anche per gli utenti che hanno effettuato il logout:

function wp_create_nonce($action = -1) {
    $user = wp_get_current_user();
    $uid = (int) $user->ID;

    if ( ! $uid ) {
        $uid = apply_filters( 'nonce_user_logged_out', $uid, $action );

    }

    $token = wp_get_session_token();
    $i = wp_nonce_tick();

    return substr( wp_hash( $i . '|' . $action . '|' . $uid . '|' . $token, 'nonce' ), -12, 10 );
}

Quindi usa wp_verify_nonce per verificare il nonce. Restituisce falso se il nonce non è valido. In caso contrario, restituisce un numero intero con il valore di:

  • 1 : se il nonce è stato generato nelle ultime 12 ore o meno.
  • 2 : se il nonce è stato generato tra 12 e 24 ore fa.
risposta data 08.08.2015 - 22:08
fonte
0

I glanced through the code for the function and it seems to only be using the User ID for verification, that means that the attacker and victim will have the same nonce? Is this really correct?

Guardando il codice si può osservare che l'identificatore di sessione è usato come parte della generazione nonce :

    $token = wp_get_session_token();
    $i = wp_nonce_tick();

    return substr( wp_hash( $i . '|' . $action . '|' . $uid . '|' . $token, 'nonce' ), -12, 10 );

Ciò lega il token di sessione al nonce, quindi se il modulo è stato inviato utilizzando i nonces da un'altra sessione (ad esempio il nonce dell'attaccante), wp_verify_nonce non corrisponderebbe, proteggendo dal login CSRF.

Vedi questa risposta per ulteriori informazioni su questa tecnica (con la sezione dei cookie anonimi).

    
risposta data 25.01.2016 - 12:42
fonte

Leggi altre domande sui tag