An open API service providing security vulnerability metadata for many open source software ecosystems.

GSA_kwCzR0hTQS12cjI2LWpjcTUtZmpqOM4AA_QI

High CVSS: 8.7 EPSS: 0.00136% (0.34434 Percentile) EPSS:

Denial of service in quinn-proto when using `Endpoint::retry()`

Affected Packages Affected Versions Fixed Versions
cargo:quinn-proto >= 0.11.0, < 0.11.7 0.11.7
41 Dependent packages
1,563 Dependent repositories
45,140,683 Downloads total

Affected Version Ranges

All affected versions

0.11.0, 0.11.1, 0.11.2, 0.11.3, 0.11.4, 0.11.5, 0.11.6

All unaffected versions

0.1.0, 0.2.0, 0.3.0, 0.4.0, 0.5.0, 0.5.2, 0.6.0, 0.6.1, 0.7.0, 0.7.1, 0.7.2, 0.7.3, 0.8.0, 0.8.1, 0.8.2, 0.8.3, 0.8.4, 0.9.0, 0.9.1, 0.9.2, 0.9.3, 0.9.4, 0.9.5, 0.9.6, 0.10.0, 0.10.1, 0.10.2, 0.10.3, 0.10.4, 0.10.5, 0.10.6, 0.11.7, 0.11.8, 0.11.9, 0.11.10, 0.11.11, 0.11.12

Summary

As of quinn-proto 0.11, it is possible for a server to accept(), retry(), refuse(), or ignore() an Incoming connection. However, calling retry() on an unvalidated connection exposes the server to a likely panic in the following situations:

  • Calling refuse or ignore on the resulting validated connection, if a duplicate initial packet is received
    • This issue can go undetected until a server's refuse()/ignore() code path is exercised, such as to stop a denial of service attack.
  • Accepting when the initial packet for the resulting validated connection fails to decrypt or exhausts connection IDs, if a similar initial packet that successfully decrypts and doesn't exhaust connection IDs is received.
    • This issue can go undetected if clients are well-behaved.

The former situation was observed in a real application, while the latter is only theoretical.

Details

Location of panic: https://github.com/quinn-rs/quinn/blob/bb02a12a8435a7732a1d762783eeacbb7e50418e/quinn-proto/src/endpoint.rs#L213

Impact

Denial of service for internet-facing server

References: