ACTIONPACK · GHSA-x6mj-8jx9-qhqv · Package
FIX → 8.1.4.1 +1
Action Pack writes a rotated or hybrid-migrated session cookie back into responses that were meant to skip the session, which Active Storage proxy controllers use for public files. A shared cache storing those responses could hand one user's session to others.
first public Nov 4, 2026 · 1 source
Could this affect your app?
Free first check from your website. Connect your repo for the full answer.
Applications that serve Active Storage files through the proxy controllers, use a cookie rotation or a :hybrid serializer migration, and sit behind a cache that stores Set-Cookie on public responses. Apps that do not proxy Active Storage files, or that do not run such a cache, are unlikely to be exposed.
Not affected if direct-storage-urls, no-caching-proxy, no-cookie-rotation
Who cares actionpack, active-storage, rails, self-hosted
bundle exec rails -e production 'puts Gem::Specs.find_by_name("actionpack").version' or bundle list | grep actionpack, looking for versions below 8.1.4.1 or below 8.0.5.2.config/ for cookies_rotations or a cookie serializer migration.When ActionDispatch::Cookies reads a signed or encrypted cookie that was written under a rotated secret (config.action_dispatch.cookies_rotations) or in the format that a :hybrid cookie serializer migrates from, it writes the cookie back to the response in the current format, and that write ignores request.session_options[:skip]. ActiveStorage::DisableSession relies on that option to keep the session cookie off the public, immutable responses of the Active Storage proxy controllers, but those controllers still load the session, so a request carrying an old-format session cookie could receive the rewritten session cookie in Set-Cookie on a cacheable response. A shared cache that stores such a response together with its Set-Cookie header could then serve one user's session to later requesters of the same URL, or serve an attacker's session to other users.
Applications are affected when they serve Active Storage files through the proxy controllers, have a cookie rotation or a :hybrid serializer migration configured, and run behind a cache that stores Set-Cookie on public responses. This is a path around the fix for .
Check it with your coding agent
It reads this page and tells you if your code is affected.
Are you affected?
Ask from here. InfraStack checks the affected versions against your stack and answers in your inbox.
InfraStack checks the affected versions against your stack and answers in Slack, with the evidence and the fix.
:hybridSet-Cookie on those responses.Upgrade to 8.1.4.1 +1
8.1.4.1.8.0.5.2.In the fixed releases, a response that skips the session leaves an old-format signed or encrypted cookie unchanged, and the next request that does not skip the session upgrades it. An application that skips the session on every request no longer upgrades its signed or encrypted cookies. Cookies that the application sets explicitly are still written. See the Action Pack CHANGELOG.
Configure caching proxies not to store responses that carry a Set-Cookie header, or complete the cookie rotation or serializer migration and remove it from the configuration.
The fixed releases are available at the normal locations.
Patches for those who cannot upgrade at once:
This issue was responsibly reported by HackerOne researcher flashmyname.