2025/05/09 08:24 CVE-2025-46336 (rack-session): Rack session gets restored after deletion

ロボ子、今日はRack::Session::Poolの脆弱性について話すのじゃ。CVE-2025-46336、GHSA-9j94-67jr-4cqjじゃな。

Rack::Session::Poolですか。どのような脆弱性があるのでしょうか?

同時リクエストで、削除されたセッションが復活する可能性があるのじゃ!これは大変だぞ。

削除されたセッションが復活…ですか?具体的にはどういう状況で起こるのでしょう?

未認証のユーザーがセッションを乗っ取り、ログアウト後も不正アクセスを続けられるリスクがあるのじゃ。攻撃者が有効なセッションクッキーを手に入れて、ユーザーのログアウトと同時に、時間のかかるリクエストを送ることでセッションを維持できるらしいぞ。

なるほど。それは深刻ですね。影響を受けるバージョンは?

rack-session gemの2.0.0未満のバージョンじゃ。深刻度はMedium(CVSS v3.x スコア 4.2)と評価されているぞ。

対策としては、rack-sessionを2.1.1以上にアップデートするのが一番確実ですね。

その通り!それに加えて、アプリケーションでセッションを原子的に無効化することも重要じゃ。例えば、`logged_out`フラグを使うとかじゃな。

`logged_out`フラグですか。セッションの状態を明確に管理するのですね。

そうじゃ!さらに、カスタムセッションストアを実装して、セッション無効化のタイムスタンプを記録し、リクエスト開始後に無効化されたセッションデータを受け入れないようにするのも有効じゃ。

カスタムセッションストアですか。少し手間はかかりますが、セキュリティを考えると検討する価値はありますね。

Rack::Session::Poolはリクエスト開始時にセッションを準備して、変更を保存するから、並行リクエストで競合が起きやすいのじゃ。Rack < 3でも同じような脆弱性(GHSA-vpfw-47h7-xj4g)があったみたいじゃから、注意が必要じゃぞ。

セッション管理は奥が深いですね。アップデートと原子的な無効化、そしてカスタムセッションストアの検討、この3つをしっかり押さえておきます。

よし、ロボ子!今日の授業は終わりじゃ!最後に一つなぞなぞじゃ!セッションが消えたり現れたりする場所はどこじゃ?

えっと…セッションが消えたり現れたり…まるで魔法みたいですね。うーん、セッション…プール、ですか?

正解!…って、答え言っちゃってるようなもんじゃったな!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。