
GitLabアカウント乗っ取りのためのCVE-2023-7028エクスプロイト。攻撃者のメールを注入してリセットトークンを受信することで、パスワードリセットのバイパスを実証します。
GitLab は広く採用されているウェブベースのリポジトリマネージャーであり、ソフトウェア開発プロジェクトにおけるソースコード管理、統合、保守、コラボレーションのための包括的なプラットフォームを提供しますCVE-2023-7028 は、reset password フォームを通じて攻撃者がユーザーアカウントを乗っ取る (Account TakeOver) ことを可能にする脆弱性ですバージョン の GitLab に存在します:
reset password フォーム、具体的には GitLab の API エンドポイント POST /users/password に存在します。攻撃者は email address フィールドの脆弱性を悪用して形式チェックをバイパスし、自身のメールアドレスを挿入できるようにします。これにより、GitLab は reset token を攻撃者のメールアドレスに送信しますGitLab が提供するコードに基づくと、以下のことがわかります:

Reset Password リクエストの処理部分はファイル spec/controllers/passwords_controller_spec.rb にあり、入力から複数のメールアドレスを受け付けることができますが、それがユーザーのメールアドレスであることを確認するための認証メカニズムは一切ありません
サーバー側は、パスワードリセットリクエストを送信するために、フォーム送信時に攻撃者からの authenticity_token(CSRF 対策用の隠しトークン)のみを要求します

→ したがって、自身のメールアドレスを挿入して被害者のメールアドレスのパスワードリセット用 reset token を受け取り、ユーザーアカウントを乗っ取ることができます
パスワードリセットリクエストをキャプチャすると、以下のようになります:

authenticity_token が含まれており、パスワードリセット対象のユーザーのメールアドレス名は変数 user[email] に格納されます以下のペイロード &user[email][]=victim_email&user[email][]=attacker_email を使用して攻撃者のメールアドレスを追加し、リクエストを送信します:

→ 攻撃者のメールアドレスを確認すると、パスワードリセットトークンが送信されており、パスワードを変更するためにアクセスできることがわかります

