https://github.com/heartcombo/devise
Devise 5.0.4がリリースされ、セッションタイムアウト時の非GETリクエストで`Referer`ヘッダーを検証せずリダイレクト先として使用していたオープンリダイレクト脆弱性(GHSA-jp94-3292-c3xv)が修正されました。`lib/devise/version.rb`のバージョンを`5.0.3`から`5.0.4`へ更新するリリースコミットです。
Deviseの`Timeoutable`モジュール有効時に、非GETリクエストでセッションタイムアウトが発生すると`FailureApp#redirect_url`が`Referer`ヘッダーを無検証でリダイレクト先として返す脆弱性(CVE-2026-40295)が修正されました。修正は`request.referrer`を既存の`extract_path_from_location`でラップしてホスト部分を除去する1行の変更であり、GETタイムアウトと非GETタイムアウトのリダイレクト処理が共通の保護ロジックに統一されています。
DeviseのConfirmableモジュールにおけるメールアドレス変更フローで、並行リクエストを悪用して他者のメールアドレスを確認済みにできる競合状態の脆弱性が修正されました。`postpone_email_change_until_confirmation_and_regenerate_confirmation_token` メソッドに `devise_unconfirmed_email_will_change!` を追加し、ORMのDirty TrackingによるSQL省略を防ぐことで、`unconfirmed_email` が常にUPDATE文に含まれるよう強制します。Active RecordとMongoidのORM差異を吸収するラッパーメソッドも新設されています。
Deviseに、パスワードリセット後の自動サインイン動作をオーバーライド可能な `sign_in_after_reset_password?` メソッドが追加されました。`protected` スコープで定義されたこのメソッドにより、コントローラ全体をコピーすることなく、サインイン判定ロジックを柔軟にカスタマイズできるようになります。
Deviseで、パスワード変更後の自動サインイン動作をモデル単位で制御できるようになりました。`RegistrationsController`の`sign_in_after_change_password?`メソッドが、グローバル設定ではなくリソースクラスの設定を参照するように変更され、マルチテナントアプリケーションなどで異なるセキュリティポリシーを適用できるようになります。
DeviseのSimple Formジェネレータで生成されるパスワードリセット画面のボタン文言を "Send me reset password instructions" から "Send me password reset instructions" に修正。#5515で行われた標準ERB版の修正をSimple Form版にも適用し、テンプレート間の一貫性を確保した変更です。
Devise 5.0で導入された認証キーの小文字化処理を改善し、ドイツ語の「E-Mail」表記問題を修正。文字列全体ではなく最初の1文字のみを小文字化することで、英語の文法とドイツ語の表記ルールの両方に対応しました。
DeviseのREADMEで使用されていたテストフレームワーク名の表記が、minitest公式ドキュメントの表記に合わせて「Mini Test」から「minitest」に修正されました。