Skip to content

Fix cross-tab session ownership race - #76

Merged
chen21019 merged 3 commits into
mainfrom
fix/cross-tab-session-ownership
Sep 15, 2026
Merged

chen21019 merged 3 commits into
mainfrom
fix/cross-tab-session-ownership

Conversation

@chen21019

Copy link
Copy Markdown

Root cause

  • Shared cookie and storage state let an older tab route passive failures through the destructive logout path.
  • OIDC callbacks did not retain the browser-session generation captured before leaving the origin.

Changes

  • Separate passive invalidation from explicit logout.
  • Add high-entropy session generation, safe same-origin return targets, Web Locks with a fail-closed IndexedDB lease fallback, guarded cookie commit/readback, and automatic tab adoption.
  • Capture generations for requests, timers, WebSockets, routes, and OIDC transactions.
  • Keep JWT values out of Web Storage, URLs, and logs.
  • Bump Web Console to 1.6.117 and document the compatibility contract.

Verification

  • Full browser-unit suite: 467 passed, 0 failed.
  • Session-focused suite: 34 passed, including 100 deterministic delayed-response TOTP/Passkey race iterations.
  • Production stack.ascdc.tw and HAProxy were not modified.

Requires PastureStack/orchestration-engine 0.183.302 or newer for session-bound server logout protection.

@chen21019
chen21019 requested a review from a team as a code owner September 15, 2026 06:11
@chen21019
chen21019 merged commit af82e97 into main Sep 15, 2026
4 checks passed
@chen21019
chen21019 deleted the fix/cross-tab-session-ownership branch September 15, 2026 07:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant