CVE-2024-32650
High · 7.5CVSS
7.5
EPSS
0.9%
Published
Apr 19, 2024
CISA due date
—
Cloudanix analysis
A bug in a widely used encryption library can let a remote attacker freeze servers that rely on it by sending two specific messages in quick succession.
- 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
The flaw allows a blocking rustls server to enter an infinite loop in ConnectionCommon::complete_io when a client sends a close_notify alert immediately after the ClientHello message.
Why it matters to the business
Servers built on affected rustls versions can be made unresponsive by a remote attacker, disrupting availability of TLS-protected services with minimal effort.
How an attack unfolds
An attacker opens a TCP connection to a blocking rustls-based server, transmits a standard TLS ClientHello, and immediately follows it with a close_notify alert; the server's complete_io routine never exits the loop, consuming the thread indefinitely.
How to fix it
Upgrade rustls to version 0.23.5, 0.22.4, or 0.21.11 (or later) and rebuild all dependent applications. For swift-nio consumers, update to the commit 695afc5205aaa49fca092b94b479ff71c43d9d3c or newer equivalent release.
How to confirm the fix worked
Confirm the deployed rustls crate version is at or above a fixed release, then test the server with a minimal client that sends ClientHello followed immediately by close_notify and verify the connection handler terminates cleanly.
Typical attack path
- Establish TCP connection to target server
- Send TLS ClientHello record
- Immediately send TLS close_notify alert
- Observe server thread enter infinite loop and stop processing further connections
How to detect it
Search server logs and process listings for repeated or stuck TLS handshake threads that show no progress after receiving a ClientHello; correlate with inbound connections that terminate abnormally after the first two TLS records.
What your security team should do
- Prioritize upgrade of rustls in all blocking server deployments within the next maintenance window
- Review application code for direct or transitive use of rustls::ConnectionCommon::complete_io in blocking contexts
- Add automated dependency scanning to catch future rustls updates
- Monitor EPSS and exploit maturity; current values remain low but re-evaluate after any public proof-of-concept
The record
Rustls is a modern TLS library written in Rust. `rustls::ConnectionCommon::complete_io` could fall into an infinite loop based on network input. When using a blocking rustls server, if a client send a `close_notify` message immediately after `client_hello`, the server's `complete_io` will get in an infinite loop. This vulnerability is fixed in 0.23.5, 0.22.4, and 0.21.11.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| crates.io | rustls | 0.0.0-0 | 0.21.11 |
| crates.io | rustls | 0.20 | No fix |
| crates.io | rustls | 0.21.0 | 0.21.11 |
| crates.io | rustls | 0.22.0 | 0.22.4 |
| crates.io | rustls | 0.23.0 | 0.23.5 |
| Chainguard | cargo-audit | 0 | 0.21.2-r1 |
| Chainguard | cargo-audit-doc | 0 | 0.21.2-r1 |
| Chainguard | kdash | 0 | 0.6.1-r0 |
| Chainguard | pgcat | 0 | 1.2.0-r1 |
| Chainguard | samply | 0 | 0.12.0-r2 |
| Chainguard | wasmcloud | 0 | 1.1.0-r0 |
| Chainguard | xh | 0 | 0.22.2-r3 |
| Debian:12 | rust-rustls | 0 | No fix |
| Debian:13 | rust-rustls | 0 | 0.21.12-1 |
| SUSE:Linux Enterprise Module for Desktop Applications 15 SP6 | gstreamer-plugins-rs | 0 | 0.12.11-150600.3.3.1 |
| SUSE:Linux Enterprise Module for Desktop Applications 15 SP7 | gstreamer-plugins-rs | 0 | 0.12.11-150600.3.3.1 |
| SUSE:Package Hub 15 SP5 | git-cliff | 0 | 2.2.2-bp155.2.3.1 |
| Ubuntu:24.04:LTS | rust-rustls | 0 | No fix |
| Ubuntu:24.10 | rust-rustls | 0 | No fix |
| Ubuntu:25.04 | rust-rustls | 0 | No fix |
| Ubuntu:25.10 | rust-rustls | 0 | No fix |
| Wolfi | cargo-audit | 0 | 0.21.2-r1 |
| Wolfi | cargo-audit-doc | 0 | 0.21.2-r1 |
| Wolfi | kdash | 0 | 0.6.1-r0 |
| Wolfi | pgcat | 0 | 1.2.0-r1 |
| Wolfi | samply | 0 | 0.12.0-r2 |
| Wolfi | wasmcloud | 0 | 1.1.0-r0 |
| Wolfi | xh | 0 | 0.22.2-r3 |
| cargo | rustls | 0.20 | No fix |
| cargo | rustls | 0.21.0 | 0.21.11 |
| cargo | rustls | 0.22.0 | 0.22.4 |
| cargo | rustls | 0.23.0 | 0.23.5 |
| openSUSE:Leap 15.5 | git-cliff | 0 | 2.2.2-bp155.2.3.1 |
| openSUSE:Leap 15.6 | gstreamer-plugins-rs | 0 | 0.12.11-150600.3.3.1 |
| openSUSE:Tumbleweed | gitoxide | 0 | 0.38.0-1.1 |
| openSUSE:Tumbleweed | kubetui | 0 | 1.5.1-1.1 |
| openSUSE:Tumbleweed | sccache | 0 | 0.8.0~3-1.1 |
| openSUSE:Tumbleweed | shadowsocks-rust | 0 | 1.18.3-1.1 |
| openSUSE:Tumbleweed | teleport | 0 | 15.2.4-1.1 |
| openSUSE:Tumbleweed | tlrc | 0 | 1.9.2+0-1.1 |
| openSUSE:Tumbleweed | topgrade | 0 | 14.0.1-2.1 |
Related vulnerabilities
- CVE-2026-31812 Quinn is a pure-Rust, async-compatible implementation of the IETF QUIC transport protocol. Also affects cargo-audit
- CVE-2026-25727 time provides date and time handling in Rust. Also affects cargo-audit
- CVE-2026-25541 Bytes is a utility library for working with bytes. Also affects cargo-audit
- CVE-2026-0810 A flaw was found in gix-date. Also affects cargo-audit
- CVE-2024-12224 `idna` accepts Punycode labels that do not produce any non-ASCII when decoded 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
- CVE-2024-35186 gitoxide is a pure Rust implementation of Git. Also affects cargo-audit