Skip to content

feat: TLS fingerprint on sessions, hashed; change audited (1.3.0) - #8

Merged
BackStacked merged 1 commit into
mainfrom
claude/project-thread-9efqn4
Oct 15, 2026
Merged

BackStacked merged 1 commit into
mainfrom
claude/project-thread-9efqn4

Conversation

@BackStacked

Copy link
Copy Markdown
Contributor

Requested by Himanshu · project thread

Before: sessions were bound to the client's device signals only.

After: login and refresh also take tlsFingerprint (JA4/JA3, supplied by the server from security-kit's readTlsFingerprint, never by the client). Only its SHA-256 is stored, as Session.tlsFingerprintHash. On refresh, a different fingerprint is audited as auth.tls_fingerprint_changed (both hashes) and the latest is kept; auth.device_mismatch now records tls: "same" | "changed" | null.

It never blocks a refresh: browser updates and TLS-inspecting networks change the fingerprint, the same reasoning as the client fingerprint. A refresh without one keeps the stored hash; a session without one is bound by the first refresh that has one.

How: hashTlsFingerprint (validated, SHA-256 base64url) in src/auth.ts, a new optional Session field, 8 new checks run on memory and Redis stores (126 total); the Redis "no raw token" check also covers the fingerprint. No error codes changed. Version 1.3.0.

🤖 Generated with Claude Code

https://claude.ai/code/session_01VT1kmGY9yJ2fLxetUn2D5c


Generated by Claude Code

login and refresh take tlsFingerprint (JA4/JA3 from the server's trusted TLS
proxy). Only its SHA-256 is stored (Session.tlsFingerprintHash). A change on
refresh is audited as auth.tls_fingerprint_changed and never blocks;
auth.device_mismatch records whether the TLS fingerprint matched.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VT1kmGY9yJ2fLxetUn2D5c
@BackStacked BackStacked self-assigned this Oct 15, 2026
@BackStacked
BackStacked merged commit 012aefb into main Oct 15, 2026
1 check passed
@BackStacked
BackStacked deleted the claude/project-thread-9efqn4 branch October 15, 2026 20:52
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.

2 participants