Skip to content

QUIC: Retry Source CID is Not Validated Against Transport Parameters #5306

@t-minzheng

Description

@t-minzheng

Description
According to RFC 9000 7.3. Authenticating Connection IDs
The codebase does not validate that the retry_source_connection_id transport parameter matches the actual Source Connection ID (SCID) used in the Retry packet. This is a violation of RFC 9000 §7.3, which explicitly requires validating all handshake CIDs, including the Retry SCID.

While the code does check for the presence of the retry_source_connection_id field, it does not compare its value to the SCID received in the Retry packet. This leaves a standards-compliance gap that could allow an attacker to tamper with Retry packets or transport parameters.

In QuicConnValidateTransportParameterCIDs (connection.c), a // TODO - Validate comment suggests this validation was known to be missing.

The encoder stores no record of the Retry SCID, making it impossible to compare it during handshake parameter validation.

Suggested fix
Add a comparison between Connection->RetrySCID and Connection->PeerTransportParams.RetrySourceConnectionID similar to the other validations. If mismatched, return an error (ConnError)."

Metadata

Metadata

Assignees

No one assigned

    Labels

    Area: CoreRelated to the shared, core protocol logicTriagedThis item has been triaged by an MsQuic owner

    Type

    Projects

    Status

    Planned

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions