QUIC: rejected CRYPTO frames received in 1-RTT packets

If a CRYPTO frame was received after the handshake, ngx_quic_handshake()
ran the handshake completion for the second time.  With the check added
in 6f8c520f4, this is limited to short header packets.

Since a client has nothing to send in a CRYPTO frame once the handshake
is complete, such frames are now rejected with the "unexpected_message"
connection error, as does TLS 1.3 for handshake messages received out of
order, and QUIC requires for KeyUpdate.
This commit is contained in:
Vadim Zhestikov authored and Sergey Kandaurov committed 2026-10-02 18:33:28 +04:00
1 parent f14320c401
commit 3c34f86e5a
1 file changed
+9
+9
View File
@@ -642,6 +642,15 @@ ngx_quic_handle_crypto_frame(ngx_connection_t *c, ngx_quic_header_t *pkt,
return NGX_OK;
}
if (c->ssl->handshaked) {
/* QUIC doesn't define post-handshake messages for a client */
qc->error = NGX_QUIC_ERR_CRYPTO(SSL_AD_UNEXPECTED_MESSAGE);
qc->error_reason = "unexpected CRYPTO frame";
return NGX_ERROR;
}
ctx = ngx_quic_get_send_ctx(qc, pkt->level);
f = &frame->u.crypto;