CVE-2026-31812
Medium · 5.3CVSS
5.3
EPSS
0.9%
Published
Mar 10, 2026
CISA due date
—
Cloudanix analysis
An attacker can crash affected services by sending a specially malformed network packet, potentially causing outages until the software is updated.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Denial Of Service
- Component
- Library
- Class
- Denial of service
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Applications built with vulnerable Quinn versions before 0.11.14 can panic while parsing attacker-controlled QUIC transport parameters. The vulnerable quinn-proto parsing path decodes QUIC variable-length integers using unwrap(); when a crafted QUIC Initial packet contains a truncated or malformed varint inside quic_transport_parameters, parsing returns Err(UnexpectedEnd) and the process can terminate. The flaw is remotely reachable over the network, requires no authentication, no user interaction, and can be triggered with very low attack complexity using a single malformed QUIC packet. The primary impact is denial of service; confidentiality and integrity are not directly affected.
Why it matters to the business
Publicly reachable services that use Quinn for QUIC transport may be crashed by unauthenticated network traffic, causing outages, failed connections, degraded availability, and possible cascading failures in systems that depend on those services. Although the current EPSS is low and there is no known KEV listing or ransomware association, the bug is simple to trigger and affects availability directly, so internet-exposed QUIC services should be upgraded promptly. Organizations with products, agents, gateways, APIs, game servers, messaging systems, or internal service meshes using Quinn should treat this as an operational resilience issue even if active exploitation has not been reported.
How an attack unfolds
An attacker identifies a UDP service that speaks QUIC and is implemented with a vulnerable Quinn release. The attacker sends a crafted QUIC Initial packet that includes malformed quic_transport_parameters, specifically a truncated QUIC varint encoding. When the target application passes the packet into Quinn's protocol parser, quinn-proto attempts to decode attacker-controlled data and calls unwrap() on a failed result. The failed parse produces an UnexpectedEnd error, which is converted into a Rust panic. Depending on how the application is built and supervised, the panic may terminate a worker, crash the process, restart the service, drop active sessions, or make the service repeatedly unavailable if packets are resent. No credentials, established QUIC connection, prior trust relationship, or application-layer request is required.
How to fix it
Upgrade Quinn to version 0.11.14 or later wherever it is used directly or transitively. Because the provided affected product inventory is not enumerated, audit Rust dependencies for quinn and quinn-proto across applications, libraries, containers, and build artifacts. Use cargo tooling such as cargo tree, cargo update, cargo audit, and dependency lockfile review to identify vulnerable versions. If immediate upgrade is not possible, reduce exposure by limiting UDP/QUIC access to trusted networks, disabling QUIC listeners where operationally acceptable, applying rate limits for unauthenticated UDP traffic, and placing QUIC services behind network controls capable of filtering malformed or abusive UDP traffic. Supervisors can reduce downtime by restarting crashed services, but restarts do not remove the vulnerability and should only be considered a temporary resilience control.
How to confirm the fix worked
Confirm dependency resolution shows Quinn version 0.11.14 or later and no vulnerable quinn-proto version is present in Cargo.lock or built artifacts. Rebuild and redeploy all affected applications after updating dependencies, rather than only changing source manifests. Validate runtime exposure by inventorying UDP listeners and confirming which services speak QUIC. In staging or a controlled test environment, send malformed QUIC Initial traffic that previously caused a panic and verify the service rejects or ignores it without crashing. Review service health, crash counters, container restart counts, and logs after validation testing. For production, verify that externally reachable UDP/QUIC endpoints are either upgraded, filtered, or intentionally disabled.
Typical attack path
- Discover or enumerate services exposing QUIC over UDP, commonly on ports such as 443/UDP or other application-specific UDP ports.
- Confirm the service responds like a QUIC endpoint or is known to use a Quinn-based implementation.
- Craft a QUIC Initial packet containing malformed transport parameters with a truncated variable-length integer encoding.
- Send the malformed packet to the exposed UDP listener without authenticating or completing a connection.
- Trigger the vulnerable quinn-proto parsing path, causing Err(UnexpectedEnd) followed by a panic due to unwrap().
- Repeat traffic as needed to keep the service unstable or unavailable if a supervisor automatically restarts the process.
How to detect it
Look for evidence of unexpected crashes or restarts in applications using Quinn, especially immediately after inbound UDP traffic to QUIC listeners. Primary log sources include application logs, Rust panic output, systemd journals, container runtime logs, Kubernetes pod events, process supervisor logs, crash dumps, and network telemetry for UDP services. Search for Rust panic messages mentioning unwrap(), UnexpectedEnd, quinn-proto, QUIC transport parameters, or malformed Initial packets. Correlate crash timestamps with inbound UDP bursts, malformed QUIC Initial packets, repeated traffic from the same source IPs, or elevated UDP error/drop metrics. Packet captures may show QUIC Initial packets followed by no successful connection establishment and service restart events. Since no public threat actor exploitation is identified and no stable payload string is guaranteed, detection should focus on behavioral indicators: unauthenticated UDP traffic preceding application panics and repeated service restarts.
- called `Result::unwrap()` on an `Err` value: UnexpectedEnd
- Err(UnexpectedEnd)
- UnexpectedEnd
- quinn-proto
- quic_transport_parameters
- transport parameters
- QUIC Initial
- malformed QUIC
- thread '.*' panicked
- panicked at
- RUST_BACKTRACE=1
- Backtrace
- CrashLoopBackOff
- signal: 6
- SIGABRT
- core dumped
What your security team should do
- Prioritize internet-facing UDP/QUIC services and products known or suspected to use Quinn; upgrade them to Quinn 0.11.14 or later first.
- Search source repositories, SBOMs, lockfiles, container images, and vendor components for quinn and quinn-proto versions earlier than 0.11.14.
- Add monitoring for Rust panic messages and abnormal restarts in QUIC-speaking services, especially messages containing UnexpectedEnd or quinn-proto.
- Apply network-layer rate limiting and exposure reduction for unauthenticated UDP/QUIC traffic until all affected services are patched.
- Coordinate with application owners to ensure dependency updates are actually compiled, tested, and deployed, not only committed to manifests.
- Because the issue is not currently in KEV and EPSS remains low, align remediation with normal urgent patch workflows, but do not defer internet-facing systems because exploitation requires only one packet.
- Update incident response runbooks for unexplained QUIC service crashes to include malformed Initial packet abuse as a possible cause.
The record
Quinn is a pure-Rust, async-compatible implementation of the IETF QUIC transport protocol. Prior to 0.11.14, a remote, unauthenticated attacker can trigger a denial of service in applications using vulnerable quinn versions by sending a crafted QUIC Initial packet containing malformed quic_transport_parameters. In quinn-proto parsing logic, attacker-controlled varints are decoded with unwrap(), so truncated encodings cause Err(UnexpectedEnd) and panic. This is reachable over the network with a single packet and no prior trust or authentication. This vulnerability is fixed in 0.11.14.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| crates.io | quinn-proto | 0 | 0.11.14 |
| crates.io | quinn-proto | 0.5.0 | 0.11.14 |
| Chainguard | asciinema | 0 | 3.2.0-r1 |
| Chainguard | berg | 0 | 0.5.5-r2 |
| Chainguard | cargo-audit | 0 | 0.22.1-r3 |
| Chainguard | fnm | 0 | 1.39.0-r1 |
| Chainguard | komodo-cli | 0 | 1.19.5-r5 |
| Chainguard | komodo-core | 0 | 1.19.5-r5 |
| Chainguard | komodo-periphery | 0 | 1.19.5-r5 |
| Chainguard | lychee | 0 | 0.23.0-r2 |
| Chainguard | nushell | 0 | 0.111.0-r4 |
| Chainguard | nushell-plugins | 0 | 0.111.0-r4 |
| Chainguard | parseable | 0 | 2.5.14-r2 |
| Chainguard | pixi | 0 | 0.65.0-r2 |
| Chainguard | py3.10-hf-xet | 0 | 1.4.0-r1 |
| Chainguard | py3.11-hf-xet | 0 | 1.4.0-r1 |
| Chainguard | py3.12-hf-xet | 0 | 1.4.0-r1 |
| Chainguard | py3.13-hf-xet | 0 | 1.4.0-r1 |
| Chainguard | qdrant | 0 | 1.17.0-r2 |
| Chainguard | samply | 0 | 0.13.1-r10 |
| Chainguard | sccache | 0 | 0.14.0-r2 |
| Chainguard | uv | 0 | 0.10.9-r1 |
| Chainguard | wadm | 0 | 0.21.1-r5 |
| Chainguard | wasmcloud | 0 | 1.9.2-r2 |
| Chainguard | xh | 0 | 0.25.3-r4 |
| Chainguard | zed | 0 | 0.226.5-r1 |
| Chainguard | zizmor | 0 | 1.23.1-r2 |
| Chainguard | zola | 0 | 0.22.1-r3 |
| SUSE:Linux Enterprise High Performance Computing 15 SP4-ESPOS | rust | 0 | 1.94.0-150400.24.71.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP4-ESPOS | rust1.94 | 0 | 1.94.0-150300.7.6.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP4-LTSS | rust | 0 | 1.94.0-150400.24.71.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP4-LTSS | rust1.94 | 0 | 1.94.0-150300.7.6.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP5-ESPOS | rust | 0 | 1.94.0-150500.27.65.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP5-ESPOS | rust1.94 | 0 | 1.94.0-150300.7.6.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP5-LTSS | rust | 0 | 1.94.0-150500.27.65.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP5-LTSS | rust1.94 | 0 | 1.94.0-150300.7.6.1 |
| SUSE:Linux Enterprise Module for Development Tools 15 SP7 | rust | 0 | 1.94.0-150500.27.65.1 |
| SUSE:Linux Enterprise Module for Development Tools 15 SP7 | rust1.92 | 0 | 1.92.0-150300.7.6.1 |
| SUSE:Linux Enterprise Module for Development Tools 15 SP7 | rust1.93 | 0 | 1.93.0-150300.7.6.1 |
| SUSE:Linux Enterprise Module for Development Tools 15 SP7 | rust1.94 | 0 | 1.94.0-150300.7.6.1 |
| SUSE:Linux Enterprise Server 15 SP4-LTSS | rust | 0 | 1.94.0-150400.24.71.1 |
| SUSE:Linux Enterprise Server 15 SP4-LTSS | rust1.94 | 0 | 1.94.0-150300.7.6.1 |
| SUSE:Linux Enterprise Server 15 SP5-LTSS | rust | 0 | 1.94.0-150500.27.65.1 |
| SUSE:Linux Enterprise Server 15 SP5-LTSS | rust1.94 | 0 | 1.94.0-150300.7.6.1 |
| SUSE:Linux Enterprise Server 15 SP6-LTSS | rust | 0 | 1.94.0-150500.27.65.1 |
| SUSE:Linux Enterprise Server 15 SP6-LTSS | rust1.94 | 0 | 1.94.0-150300.7.6.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP4 | rust | 0 | 1.94.0-150400.24.71.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP4 | rust1.94 | 0 | 1.94.0-150300.7.6.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP5 | rust | 0 | 1.94.0-150500.27.65.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP5 | rust1.94 | 0 | 1.94.0-150300.7.6.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP6 | rust | 0 | 1.94.0-150500.27.65.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP6 | rust1.94 | 0 | 1.94.0-150300.7.6.1 |
| Wolfi | berg | 0 | 0.5.5-r2 |
| Wolfi | cargo-audit | 0 | 0.22.1-r3 |
| Wolfi | lychee | 0 | 0.23.0-r2 |
| Wolfi | nushell | 0 | 0.111.0-r4 |
| Wolfi | nushell-plugins | 0 | 0.111.0-r4 |
| Wolfi | parseable | 0 | 2.5.14-r2 |
| Wolfi | pixi | 0 | 0.65.0-r2 |
| Wolfi | py3.10-hf-xet | 0 | 1.4.0-r1 |
| Wolfi | py3.11-hf-xet | 0 | 1.4.0-r1 |
| Wolfi | py3.12-hf-xet | 0 | 1.4.0-r1 |
| Wolfi | py3.13-hf-xet | 0 | 1.4.0-r1 |
| Wolfi | qdrant | 0 | 1.17.0-r2 |
| Wolfi | samply | 0 | 0.13.1-r10 |
| Wolfi | sccache | 0 | 0.14.0-r2 |
| Wolfi | uv | 0 | 0.10.9-r1 |
| Wolfi | wadm | 0 | 0.21.1-r5 |
| Wolfi | wasmcloud | 0 | 1.9.2-r2 |
| Wolfi | xh | 0 | 0.25.3-r4 |
| Wolfi | zed | 0 | 0.226.5-r1 |
| Wolfi | zizmor | 0 | 1.23.1-r2 |
| Wolfi | zola | 0 | 0.22.1-r3 |
| openSUSE:Leap 15.6 | rust | 0 | 1.94.0-150500.27.65.1 |
| openSUSE:Leap 15.6 | rust1.92 | 0 | 1.92.0-150300.7.6.1 |
| openSUSE:Leap 15.6 | rust1.93 | 0 | 1.93.0-150300.7.6.1 |
| openSUSE:Leap 15.6 | rust1.94 | 0 | 1.94.0-150300.7.6.1 |
| openSUSE:Leap 16.0 | rust1.94 | 0 | 1.94.1-160000.1.1 |
| openSUSE:Tumbleweed | python-uv | 0 | 0.10.11-1.1 |
| openSUSE:Tumbleweed | rust1.92 | 0 | 1.92.0-2.1 |
| openSUSE:Tumbleweed | rust1.93 | 0 | 1.93.0-3.1 |
| openSUSE:Tumbleweed | rust1.94 | 0 | 1.94.0-2.1 |
Related vulnerabilities
- RUSTSEC-2026-0037 Denial of service in Quinn endpoints Same vulnerability
- CVE-2026-25541 Bytes is a utility library for working with bytes. Also affects asciinema
- CVE-2026-25727 time provides date and time handling in Rust. Also affects berg
- CVE-2024-12224 `idna` accepts Punycode labels that do not produce any non-ASCII when decoded Also affects berg
- CVE-2024-43806 Rustix is a set of safe Rust bindings to POSIX-ish APIs. Also affects berg
- CVE-2026-0810 A flaw was found in gix-date. Also affects cargo-audit
- CVE-2024-45405 `gix-path` is a crate of the `gitoxide` project (an implementation of `git` written in… Also affects cargo-audit
- CVE-2024-45305 gix-path is a crate of the gitoxide project dealing with git paths and their conversions. Also affects cargo-audit