Skip to content

Chrome DBSC: Session marked as session_ended despite valid challenge response #243

@jimmylo16

Description

@jimmylo16

Chrome is marking DBSC sessions as session_ended during the refresh flow, even when the server correctly responds with a 403 Forbidden status and a valid Secure-Session-Challenge header in the expected RFC9651 Structured Field format.

Problem Description

During the DBSC refresh flow (Step 1: Challenge), Chrome sends a refresh request with Sec-Secure-Session-Id header, and the server responds with:

  1. Status Code: 403 Forbidden (as per W3C DBSC §8.8)
  2. Header: Secure-Session-Challenge: "challenge_token";id="session_identifier"
  3. Body: Plain text "OK"
  4. Headers: Cache-Control: no-store, Content-Type: text/plain

However, Chrome's net-export logs show session_ended instead of proceeding to Step 2 (Proof).

Expected Behavior

According to W3C DBSC specification §8.8:

  • Status 403: Chrome should retry with cached challenge
  • Chrome should proceed to Step 2 by sending Secure-Session-Response header with signed JWT

Actual Behavior

  • Chrome receives the 403 response with Secure-Session-Challenge header
  • Chrome marks the session as session_ended instead of proceeding to Step 2
  • No Step 2 request is made to refresh endpoint (no Secure-Session-Response header sent)

Implementation Details

Challenge Header Format

The server constructs the Secure-Session-Challenge header as follows:

Secure-Session-Challenge: "DBSC-<random_string>";id="<session_identifier>"

Where:

  • challenge_token is a plain string (e.g., "DBSC-m74paggdrt")
  • session_identifier matches the session_identifier sent during registration
  • Format follows RFC9651 Structured Fields: "string-value";param="value"

Response Headers

HTTP/1.1 403 Forbidden
Content-Type: text/plain
Cache-Control: no-store
Secure-Session-Challenge: "DBSC-m74paggdrt";id="3ab57e6b-d886-4cc8-801c-ec1db4403ac9"
Access-Control-Allow-Origin: <origin>
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: Secure-Session-Registration, Secure-Session-Challenge

Response Body

OK

Questions

  1. Session Identifier Matching: The id parameter matches the session_identifier from registration. Are there any additional requirements for this matching?

  2. Response Format: Is there any requirement for the response body format beyond plain text? The spec mentions 403 but doesn't specify body requirements.

  3. Timing: Could there be a timing issue where Chrome marks session_ended before processing the challenge header?

  4. Error Handling: What specific conditions cause Chrome to mark a session as session_ended during the challenge step?

Additional Context

  • The registration flow works correctly (Chrome successfully registers the session)
  • The session_identifier sent during registration matches the id parameter in the challenge header
  • The issue occurs consistently, not intermittently
  • Net-export logs confirm session_ended status

Thank you for your assistance, if you want I can provide even further details!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions