Skip to content

QS06: separate composite-KEM construction risk from negotiation downgrade risk - #17

Open
m-khan-97 wants to merge 2 commits into
OWASP:mainfrom
m-khan-97:qs06-rewrite
Open

QS06: separate composite-KEM construction risk from negotiation downgrade risk#17
m-khan-97 wants to merge 2 commits into
OWASP:mainfrom
m-khan-97:qs06-rewrite

Conversation

@m-khan-97

Copy link
Copy Markdown

Addresses the conflation raised in #12 by @rot169, and updates two references that
have moved since the v0.1 entry was written.

The problem

The entry currently treats "hybrid misuse" as one undifferentiated risk, and opens
with the uncited claim that hybrid is "widely misimplemented". As #12 points out,
that does not match what practitioners observe: mainstream libraries implement
hybrid as standardised named groups, and OpenSSL 3.5 offers X25519MLKEM768 as a
default keyshare. Getting the construction wrong requires deliberately breaking
rule zero and hand-rolling a combiner.

The change

The rewrite separates three layers that need different mitigations, and drops the
uncited claim:

Layer Where the risk actually sits Evidence
Construction Custom combiners only. Standard named groups inherit a reviewed construction from RFC 9954 / draft-ietf-tls-ecdhe-mlkem. emerging
Negotiation & deployment The dominant transition-window risk: silent fallback, active downgrade, preference-list ordering, unverified negotiation, and middlebox failures that end with hybrid being switched off. demonstrated (downgrade is a well-established TLS attack pattern); emerging for PQC-specific stripping
Implementation Non-constant-time PQC code. demonstrated - KyberSlash key recovery; Clangover CVE-2024-37880

Per #12's suggestion, the negotiation layer is given the most weight: it is the one
that silently produces classical traffic in an estate recorded as migrated. A
downgraded session is a harvested session, so this entry now explicitly points
upstream to QS01.

Reference updates

Two anchors are stale, independent of the rewrite:

  • draft-ietf-tls-hybrid-design was published as RFC 9954 (Informational,
    July 2026). The entry cited it as a draft. QS05 cites the same draft and will
    need the same update - happy to do that in a separate PR rather than reach into
    another entry here.
  • draft-kwiatkowski-tls-ecdhe-mlkem was adopted by the TLS WG and is now
    draft-ietf-tls-ecdhe-mlkem (-05, May 2026), IESG-approved and awaiting RFC
    publication. It defines the X25519MLKEM768 group at the centre of QS06 phrasing #12's point
    and was not previously cited at all.

Added: KyberSlash (IACR TCHES), CVE-2024-37880, OpenSSL 3.5 release notes as
primary evidence for the default-groups claim. All references verified against
primary sources on 2026-07-27; the header comment records this.

Notes for reviewers

  • Two deliberate style deviations, both easy to revert if you would rather the
    entries stay uniform: the description is split into paragraphs rather than one
    block, because a three-layer model is hard to follow otherwise; and there is a
    third attack scenario covering the middlebox-to-disabled-hybrid path, which is
    the failure practitioners actually hit and which no other entry covers.
  • Possible rename. "Hybrid Misuse" now describes the smallest of the three
    layers. Something like "Insecure Migration: Downgrade and Hybrid Misuse" would
    track the content better, but I have left the title and filename unchanged since
    renaming affects the README table and any external links. Happy to do it if you
    want it.
  • The Standards and Regulatory Mapping section is kept with its TODO banner
    intact and updated in place. Its fate seems to belong to Proposal: Extend the OWASP Quantum Security Top 10 Entry Template to improve Consistency, Actionability and Verifiability #15 rather than here.
  • No other entries or files are touched.

@m-khan-97 m-khan-97 mentioned this pull request Jul 27, 2026
Addresses OWASP#12. The entry treated hybrid misuse as one undifferentiated
risk and opened with an uncited claim that hybrid is "widely
misimplemented". Standardised named groups inherit a reviewed
construction; the transition-window risk is dominated by negotiation
fallback and downgrade, and by demonstrated implementation timing leaks.

Also updates two stale anchors: draft-ietf-tls-hybrid-design was
published as RFC 9954 (July 2026), and draft-kwiatkowski-tls-ecdhe-mlkem
is now draft-ietf-tls-ecdhe-mlkem, which defines X25519MLKEM768.
@ossumpossum

Copy link
Copy Markdown

Splitting QS06 into construction / negotiation-and-deployment / implementation resolves the
conflation in #12 cleanly, and weighting the negotiation layer highest with an explicit upstream link to QS01 is
the right call. The added anchors help too; RFC 9954 and the implementation-layer evidence (KyberSlash,
Clangover / CVE-2024-37880) are material.

One refinement on the negotiation layer, to keep its mechanism as precise as the rest of the entry. Common
Example #2 and Scenario #1 attribute the downgrade to an active on-path attacker "stripping the PQC key share"
so the handshake completes classical and "leaves no operational trace." In TLS 1.3 that specific path doesn't
silently succeed: the Finished MAC authenticates the full handshake transcript, so an attacker who edits the
ClientHello's supported_groups / key_share makes the client and server transcripts diverge and the handshake
abort. (RFC 8446 §4.1.3 covers version downgrade; the transcript hash covers group/parameter tampering.) And
because RFC 9954 hybrids are single concatenated named groups, there is no half-share to strip. The attacker
can only remove the whole hybrid group, which is exactly what transcript authentication catches.

The more damaging vector is the one Example #1 called out: the client's own
fall-back-on-error retry. The attacker doesn't complete a stripped handshake; it makes the first (hybrid)
attempt fail, and the client voluntarily opens a fresh classical-only handshake that is internally valid and
leaves no failed-handshake trace. Preference-list ordering and middlebox-disable (Examples #3#4) reach the same
end state with no cryptographic attack at all.

Suggest reframing Scenario #1 around induced fallback / permissive negotiation rather than in-handshake
stripping. It makes "leaves no operational trace" accurate: a completed classical handshake, not a failed
stripped one, and keeps the entry from re-introducing, in a subtler form, the imprecision #12 set out to
remove. Happy to propose exact wording. (Context: I work on PQC migration guidance for a large pharma security
research org.)

TLS 1.3 transcript authentication means in-handshake stripping aborts
rather than completes, and RFC 9954 hybrids are single named groups with
no half-share to strip. The practical downgrade is the client's own
fallback logic retrying classical-only after an induced failure - a
completed, internally valid handshake with no tampering on the wire.

Description, Common Example OWASP#2, Scenario OWASP#1 and the fallback-testing
prevention step reframed accordingly. RFC 8446 Section 4.1.3 added to
references.
@m-khan-97

Copy link
Copy Markdown
Author

You are right, and thank you for the precision - this is exactly the standard the rewrite was aiming for and fell short of in one place. The Finished MAC over the transcript means edited groups produce divergence and an abort, not a completed classical handshake, and since the RFC 9954 hybrids are single concatenated named groups there is no half-share to strip in the first place. The stripping framing re-introduced the imprecision #12 was about, as you say.

Pushed a commit reframing it around induced fallback: the attacker only needs the first hybrid attempt to fail, and the client's own retry logic completes a fresh, internally valid classical handshake - which is also what makes "no operational trace" accurate, since the only thing on the wire is a clean classical session. Changes: the negotiation paragraph in the description, Common Example #2, Scenario #1, the fallback-testing prevention step, and RFC 8446 Section 4.1.3 added to the references. Preference-list ordering and the middlebox-disable path (Scenario #3) stay as the no-attacker-needed routes to the same end state.

If the wording anywhere still under- or over-claims, I would genuinely welcome the exact phrasing you had in mind.

@ossumpossum

Copy link
Copy Markdown

This reads accurately now; the negotiation paragraph, Example #2, Scenario #1, and the fallback-testing step all frame it correctly: the Finished MAC aborts tampered handshakes, and the real exposure is the endpoint's own fallback / preference-list / middlebox behavior. From my side it's good to merge.

One optional micro-precision, only because you asked for exact wording: reference #3 annotates §4.1.3 as "downgrade protection and transcript authentication," but §4.1.3 is specifically the version-downgrade sentinel (ServerHello.random). The transcript authentication that makes edited groups abort is the Finished MAC over the transcript hash (§4.4.4 + the key schedule), which is a separate mechanism. Your body text already keeps them distinct; only the reference note lumps them.

If you want it to mirror the body:

RFC 8446 - TLS 1.3: §4.1.3 version-downgrade protection (the ServerHello.random sentinel); handshake integrity against group/parameter tampering comes from the Finished MAC over the transcript (§4.4.4). Together these confine the practical downgrade path to endpoint fallback behavior rather than in-handshake tampering.

The entry is accurate as written; this just tightens the citation to match the body. Thanks!

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