RUSTSEC-2026-0347Low· 2.3▾ SunlitBuffered application data sent to outer server after ECH rejection
▾ Sunlit zone — Low / medium · no exploitation signal
impact 12.6 · likelihood 0 · exploitation 0
Need a working PoC? Pro members can cast a request and our team develops one — it lands right here.
When a server rejects Encrypted Client Hello (ECH), the client completes the
handshake using the outer ClientHello and authenticates the server against the
ECH config's public_name. At the end of that handshake, rustls encrypted and
queued any application data buffered via ClientConnection::writer() before
queueing the ech_required alert.
The application correctly receives
Error::PeerIncompatible(ServerRejectedEncryptedClientHello), but the next
write_tls() call (needed to send the alert) also sends the buffered
application data. Plaintext meant for the inner server therefore goes to the
client-facing server named by public_name.
That server is authenticated, so this is not exploitable by an unauthenticated
party, but it violates RFC 9849 section 6.1.6, which requires the client to
abort with ech_required "before sending any application data to the server".
This affects only clients that:
EchMode::Enable (GREASE ECH is not affected),The underlying ordering bug is older, but before 0.23.44 the client checked
the server certificate against the inner server name rather than public_name,
so certificate verification failed first and no data was sent.
rustls >= 0.23.44, < 0.23.46Upgrade to a patched release:
rustls 0.23.46Connected by shared product, vendor, weakness, or advisory.
RUSTSEC-2026-0348Low· 3.7Brotli certificate decompression can allocate up to 1 GiB before authentication
RUSTSEC-2026-0349Low· 3.7Unauthenticated ServerHello can downgrade later connections to classical key exchange
RUSTSEC-2026-0346Medium· 4.0`Debug` impls for client session values expose TLS secrets
RUSTSEC-2026-0285Medium· 5.3TLS 1.3 handshake messages incorrectly accepted across encryption level boundaries
CVE-2024-32650High· 7.5`rustls::ConnectionCommon::complete_io` could fall into an infinite loop based on network input
GHSA-2mjx-qc3c-rqvcMedium· 5.3Rustls: TLS 1.3 handshake messages incorrectly accepted across encryption level boundaries