CVE-2025-59530: quic-go: Panic occurs when queuing undecryptable packets after handshake completion
7.5
Basic Information
Technical Details
| Package Name | Ecosystem | Vulnerable Versions | First Patched Version |
|---|---|---|---|
| github.com/quic-go/quic-go | go | < 0.49.1 | 0.49.1 |
| github.com/quic-go/quic-go | go | >= 0.50.0, < 0.54.1 | 0.54.1 |
Vulnerability Intelligence
Miggo AI
Root Cause Analysis
The vulnerability exists in the handleHandshakeConfirmed function in connection.go. When a QUIC client receives a HANDSHAKE_DONE frame from the server, this function is called to finalize the handshake and drop the now-unnecessary handshake encryption keys. However, a malicious or misbehaving server can send this frame before the handshake is truly complete from the client's perspective. In this scenario, the client might still have packets encrypted with the initial keys in its processing queue. The vulnerable version of handleHandshakeConfirmed only dropped the handshake keys. A subsequent check in the code asserts that no packets should be queued after the handshake is confirmed, which would fail because of the remaining initial packets, causing the client process to crash. The patch fixes this by ensuring that handleHandshakeConfirmed also drops any remaining initial keys, thus preventing the assertion failure and the resulting denial of service.
Vulnerable functions
(*Conn).handleHandshakeConfirmedconnection.go