Possible restoration of destroyed sessions in Action Dispatch CacheStore
Published: November 04, 2026
SECURITY IDENTIFIERS
- GHSA: GHSA-2586-8ghr-69fj
- Vendor Advisory: https://github.com/rails/rails/security/advisories/GHSA-2586-8ghr-69fj
GEM
FRAMEWORK
SEVERITY
CVSS v3.x: 4.2 (Medium)
PATCHED VERSIONS
~> 8.0.5, >= 8.0.5.2
>= 8.1.4.1
DESCRIPTION
Impact
ActionDispatch::Session::CacheStore writes a session back to the cache at
the end of each request that loaded it, without checking that the session's
cache entry still exists. When a concurrent request destroys the session,
through reset_session on logout or by deleting its cache entry on the
server, a request that loaded the session earlier and finishes later restores
it under its original session ID. Logout and server-side revocation could
therefore fail to end a session, and an attacker who holds a stolen session
cookie could keep that session valid across the victim's logout.
Applications that use config.session_store :cache_store are affected, with
any cache backend. ActionDispatch::Session::CookieStore is not affected, nor
is ActionDispatch::Session::MemCacheStore with Dalli 4.0.0 or later, whose
session store does not write back a session that was deleted.
Details
The fixed releases record which session a request loaded and skip the write when that session's cache entry no longer exists. Changes that such a request makes to the destroyed session are discarded, and Rack logs a warning that the session could not be saved. Each request that writes back a session it loaded makes one additional cache read.
Releases
The fixed releases are available at the normal locations.
Patches for those who cannot upgrade at once:
- 8.1: https://github.com/rails/rails/commit/d479192cf88a8b30a335a8bc25188a2d8e0f8d9f.patch
- 8.0: https://github.com/rails/rails/commit/5bb5ec66ed8faaf590ffe1222d7a5eb6e9d050f5.patch
Credit
Found by the team during internal code review.
RELATED
- https://rubygems.org/gems/actionpack/versions/8.1.4.1
- https://github.com/rails/rails/releases/tag/v8.1.4.1
- https://rubygems.org/gems/actionpack/versions/8.0.5.2
- https://github.com/rails/rails/releases/tag/v8.0.5.2
- https://github.com/rails/rails/commit/d479192cf88a8b30a335a8bc25188a2d8e0f8d9f
- https://github.com/rails/rails/commit/5bb5ec66ed8faaf590ffe1222d7a5eb6e9d050f5
- https://github.com/rails/rails/security/advisories/GHSA-2586-8ghr-69fj
