Every CVESearch/Get API key

CVE-2026-123613

Rustls 0.23.13 before 0.23.45 TLS 1.3 Handshake Encryption Level Bypass

6.9 MediumFix available

CVE-2026-123613 is a medium vulnerability (CVSS 6.9) in Rustls, published September 14, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.16%, the 4th percentile. Fixed in rustls 0.23.45.

What does this mean?
Severity
6.9 MediumCVSS 4.0, CVE List
Exploit chance
0.16%EPSS, 4th percentile
Exploitation
None knownNot on CISA’s or ENISA’s lists
Fixed in
0.23.45rustls +11 more

Description

Rustls from 0.23.13 before 0.23.45 accepts TLS 1.3 handshake messages at the wrong encryption level when they follow a key-changing message in the same record, because Deframer::aligned does not enforce RFC 8446 record-boundary alignment. A peer or on-path attacker can pack a plaintext EncryptedExtensions with the ServerHello, which rustls accepts unencrypted.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
Low
Privileges needed
None
User interaction
None

What an attacker can affect

Confidentiality
Low
Integrity
None
Availability
None

Exploit likelihood

0.16%Unchanged since Nov 8, 2026
90%50%10%1%

Affected products

Affected packages

Affected packages
PackageAffectedFixed
rustls
crates.io
0.23.13 up to 0.23.45
0.23.45
kata-containers
Azure Linux:3
through 4.1.0.kata2-1None known
kata-containers-cc
Azure Linux:3
through 3.15.0.aks0-24None known
rust
Azure Linux:3
through 1.75.0-31None known
rust
Azure Linux:3
1.85.0 to 1.98.1-1None known
rust-afterburn
Azure Linux:3
through 5.8.2-2None known
rust-rustls
Debian:12
All versions, plus listed versions
0.20.8-40.20.8-4.10.20.8-4.20.21.10-10.21.12-1
Show 45 moreShow less
0.21.12-20.21.12-30.21.12-40.21.12-50.21.12-60.21.12-70.21.12-80.21.12-90.21.5-10.21.5-20.21.5-30.21.5-40.21.5-50.21.6-10.21.6-20.21.6-30.21.6-40.21.7-10.21.8-10.21.8-20.21.8-30.21.8-3.10.21.9-10.23.16-10.23.20+ds-10.23.20+ds-100.23.20+ds-20.23.20+ds-30.23.20+ds-40.23.20+ds-50.23.20+ds-60.23.20+ds-70.23.20+ds-80.23.20+ds-90.23.25+ds-10.23.26+ds-10.23.31+ds-10.23.31+ds-20.23.31+ds-30.23.31+ds-40.23.31+ds-50.23.31+ds-60.23.31+ds-70.23.32+ds-10.23.32+ds-2
None known
rust-rustls
Debian:13
All versions, plus listed versions
0.23.26+ds-10.23.31+ds-10.23.31+ds-20.23.31+ds-30.23.31+ds-4
Show 20 moreShow less
0.23.31+ds-50.23.31+ds-60.23.31+ds-70.23.32+ds-10.23.32+ds-20.23.33+ds-10.23.33+ds-20.23.33+ds-30.23.33+ds-40.23.35+ds-10.23.36+ds-10.23.37+ds-10.23.37+ds-20.23.37+ds-30.23.38+ds-10.23.40+ds-10.23.41+ds-10.23.43+ds-10.23.45+ds-10.23.46+ds-1
None known
rust-rustls
Debian:14
before 0.23.45+ds-1, plus listed versions
0.23.26+ds-10.23.31+ds-10.23.31+ds-20.23.31+ds-30.23.31+ds-4
Show 18 moreShow less
0.23.31+ds-50.23.31+ds-60.23.31+ds-70.23.32+ds-10.23.32+ds-20.23.33+ds-10.23.33+ds-20.23.33+ds-30.23.33+ds-40.23.35+ds-10.23.36+ds-10.23.37+ds-10.23.37+ds-20.23.37+ds-30.23.38+ds-10.23.40+ds-10.23.41+ds-10.23.43+ds-1
0.23.45+ds-1
rust-rustls
Ubuntu:24.04:LTS
All versions, plus listed versions
0.21.6-30.21.7-10.21.9-10.21.10-1
None known
rust-rustls
Ubuntu:26.10
All versions, plus listed versions
0.23.36+ds-10.23.41+ds-1
None known
rust-rustls
Ubuntu:26.04:LTS
All versions, plus listed versions
0.23.26+ds-10.23.33+ds-3build20.23.35+ds-10.23.35+ds-1build10.23.36+ds-1
None known

What each source reports

CVE List Score used6.9

Rustls 0.23.13 before 0.23.45 TLS 1.3 Handshake Encryption Level Bypass

Rustls from 0.23.13 before 0.23.45 accepts TLS 1.3 handshake messages at the wrong encryption level when they follow a key-changing message in the same record, because Deframer::aligned does not enforce RFC 8446 record-boundary alignment. A peer or on-path attacker can pack a plaintext EncryptedExtensions with the ServerHello, which rustls accepts unencrypted.

Record
CVE-2026-123613
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N
CVSS 3.1
5.3 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
Weakness
CWE-20
Updated
2026-11-08
EUVDEUVD-2026-1193726.9

Rustls from 0.23.13 before 0.23.45 accepts TLS 1.3 handshake messages at the wrong encryption level when they follow a key-changing message in the same record, because Deframer::aligned does not enforce RFC 8446 record-boundary alignment. A peer or on-path attacker can pack a plaintext EncryptedExtensions with the ServerHello, which rustls accepts unencrypted.

Record
EUVD-2026-119372
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N
Updated
2026-11-08
GitHub AdvisoriesGHSA-2mjx-qc3c-rqvc5.3

Rustls: TLS 1.3 handshake messages incorrectly accepted across encryption level boundaries

Rustls accepted TLS 1.3 handshake messages sent at the wrong encryption level when they followed a key-changing message in the same record. The handshake transcript is still authenticated, so a network-position attacker cannot use this to alter or complete a handshake; the practical effect is that a peer could send handshake messages that should be encrypted in plaintext without rustls rejecting the connection.

This issue affects rustls versions 0.23.13 through 0.23.44 inclusive.

Original report

Summary

Rustls (tested version 0.23.44, and it appears still an issue on latest master though I have not tested this) accepts a TLS 1.3 server flight where a plaintext EncryptedExtensions is packed into the same record as the ServerHello.

This is very similar to Go's CVE-2025-61730 fixed in https://github.com/golang/go/commit/5046bdf8a612b35a2c1a9e168054c1d5c65e7dd7

Details

It appears Deframer::aligned considers itself aligned as long as all messages remaining in the buffer are complete. Rustls processes the ServerHello, installs the handshake keys, then pulls the complete (plaintext) EncryptedExtensions out of the buffer.

This is insufficient per RFC 8446 section 5.1's

Handshake messages MUST NOT span key changes. Implementations MUST verify that all messages immediately preceding a key change align with a record boundary; if not, then they MUST terminate the connection with an "unexpected_message" alert. Because the ClientHello, EndOfEarlyData, ServerHello, Finished, and KeyUpdate messages can immediately precede a key change, implementations MUST send these messages in alignment with a record boundary.

Impact

An on path attacker can inject plaintext messages that are accepted.

Tool Use Disclosure

This was discovered by a new TLS/DTLS test suite currently under construction. The specific testcase was inspired by the Go CVE. Other tested implementations (Botan, OpenSSL, BoringSSL, Go, wolfSSL) reject this protocol flow. Daybreak Blue reviewed the rustls code to identify probable root cause.

Record
GHSA-2mjx-qc3c-rqvc
CVSS 3.1
5.3 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
Updated
2026-11-02
GitHub AdvisoriesGHSA-rp7q-jxfg-4g6g6.9

Rustls from 0.23.13 before 0.23.45 accepts TLS 1.3 handshake messages at the wrong encryption...

Rustls from 0.23.13 before 0.23.45 accepts TLS 1.3 handshake messages at the wrong encryption level when they follow a key-changing message in the same record, because Deframer::aligned does not enforce RFC 8446 record-boundary alignment. A peer or on-path attacker can pack a plaintext EncryptedExtensions with the ServerHello, which rustls accepts unencrypted.

Record
GHSA-rp7q-jxfg-4g6g
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
CVSS 3.1
5.3 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
Weakness
CWE-20
Updated
2026-11-08
NVD6.9

Rustls from 0.23.13 before 0.23.45 accepts TLS 1.3 handshake messages at the wrong encryption level when they follow a key-changing message in the same record, because Deframer::aligned does not enforce RFC 8446 record-boundary alignment. A peer or on-path attacker can pack a plaintext EncryptedExtensions with the ServerHello, which rustls accepts unencrypted.

Record
CVE-2026-123613
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
CVSS 3.1
5.3 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
Weakness
CWE-20
Updated
2026-11-10
OSV6.9

Rustls 0.23.13 before 0.23.45 TLS 1.3 Handshake Encryption Level Bypass

Rustls from 0.23.13 before 0.23.45 accepts TLS 1.3 handshake messages at the wrong encryption level when they follow a key-changing message in the same record, because Deframer::aligned does not enforce RFC 8446 record-boundary alignment. A peer or on-path attacker can pack a plaintext EncryptedExtensions with the ServerHello, which rustls accepts unencrypted.

Record
CVE-2026-123613
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N
Weakness
CWE-20
Updated
2026-11-09
Show 9 moreShow less
OSVDEBIAN-CVE-2026-1236136.9

Rustls from 0.23.13 before 0.23.45 accepts TLS 1.3 handshake messages at the wrong encryption level when they follow a key-changing message in the same record, because Deframer::aligned does not enforce RFC 8446 record-boundary alignment. A peer or on-path attacker can pack a plaintext EncryptedExtensions with the ServerHello, which rustls accepts unencrypted.

Record
DEBIAN-CVE-2026-123613
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Updated
2026-11-11
OSVGHSA-2mjx-qc3c-rqvc5.3

Rustls: TLS 1.3 handshake messages incorrectly accepted across encryption level boundaries

Rustls accepted TLS 1.3 handshake messages sent at the wrong encryption level when they followed a key-changing message in the same record. The handshake transcript is still authenticated, so a network-position attacker cannot use this to alter or complete a handshake; the practical effect is that a peer could send handshake messages that should be encrypted in plaintext without rustls rejecting the connection.

This issue affects rustls versions 0.23.13 through 0.23.44 inclusive.

Original report

Summary

Rustls (tested version 0.23.44, and it appears still an issue on latest master though I have not tested this) accepts a TLS 1.3 server flight where a plaintext EncryptedExtensions is packed into the same record as the ServerHello.

This is very similar to Go's CVE-2025-61730 fixed in https://github.com/golang/go/commit/5046bdf8a612b35a2c1a9e168054c1d5c65e7dd7

Details

It appears Deframer::aligned considers itself aligned as long as all messages remaining in the buffer are complete. Rustls processes the ServerHello, installs the handshake keys, then pulls the complete (plaintext) EncryptedExtensions out of the buffer.

This is insufficient per RFC 8446 section 5.1's

Handshake messages MUST NOT span key changes. Implementations MUST verify that all messages immediately preceding a key change align with a record boundary; if not, then they MUST terminate the connection with an "unexpected_message" alert. Because the ClientHello, EndOfEarlyData, ServerHello, Finished, and KeyUpdate messages can immediately precede a key change, implementations MUST send these messages in alignment with a record boundary.

Impact

An on path attacker can inject plaintext messages that are accepted.

Tool Use Disclosure

This was discovered by a new TLS/DTLS test suite currently under construction. The specific testcase was inspired by the Go CVE. Other tested implementations (Botan, OpenSSL, BoringSSL, Go, wolfSSL) reject this protocol flow. Daybreak Blue reviewed the rustls code to identify probable root cause.

Record
GHSA-2mjx-qc3c-rqvc
CVSS 3.1
5.3 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
Updated
2026-11-08
OSVRUSTSEC-2026-02855.3

TLS 1.3 handshake messages incorrectly accepted across encryption level boundaries

Rustls accepted TLS 1.3 handshake messages sent at the wrong encryption level when they followed a key-changing message in the same record. For example, a plaintext EncryptedExtensions message packed into the same record as the ServerHello was accepted.

RFC 8446 section 5.1 requires that handshake messages do not span key changes, and that implementations terminate the connection with an "unexpected_message" alert if they do.

The handshake transcript is still authenticated, so a network-position attacker cannot use this to alter or complete a handshake; the practical effect is that a peer could send handshake messages that should be encrypted in plaintext without rustls rejecting the connection.

This is functionally the same bug as Go's GO-2026-4340 (CVE-2025-61730).

Record
RUSTSEC-2026-0285
CVSS 3.1
5.3 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
Updated
2026-11-08
OSVUBUNTU-CVE-2026-1236136.9

Rustls from 0.23.13 before 0.23.45 accepts TLS 1.3 handshake messages at the wrong encryption level when they follow a key-changing message in the same record, because Deframer::aligned does not enforce RFC 8446 record-boundary alignment. A peer or on-path attacker can pack a plaintext EncryptedExtensions with the ServerHello, which rustls accepts unencrypted.

Record
UBUNTU-CVE-2026-123613
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N
CVSS 3.1
5.3 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
Updated
2026-11-10
OSVAZL-113173No score

CVE-2026-123613 affecting package kata-containers 4.1.0.kata2-1

Rustls from 0.23.13 before 0.23.45 accepts TLS 1.3 handshake messages at the wrong encryption level when they follow a key-changing message in the same record, because Deframer::aligned does not enforce RFC 8446 record-boundary alignment. A peer or on-path attacker can pack a plaintext EncryptedExtensions with the ServerHello, which rustls accepts unencrypted.

Record
AZL-113173
Updated
2026-11-13
OSVAZL-113182No score

CVE-2026-123613 affecting package kata-containers-cc 3.15.0.aks0-24

Rustls from 0.23.13 before 0.23.45 accepts TLS 1.3 handshake messages at the wrong encryption level when they follow a key-changing message in the same record, because Deframer::aligned does not enforce RFC 8446 record-boundary alignment. A peer or on-path attacker can pack a plaintext EncryptedExtensions with the ServerHello, which rustls accepts unencrypted.

Record
AZL-113182
Updated
2026-11-13
OSVAZL-113260No score

CVE-2026-123613 affecting package rust 1.75.0-31

Rustls from 0.23.13 before 0.23.45 accepts TLS 1.3 handshake messages at the wrong encryption level when they follow a key-changing message in the same record, because Deframer::aligned does not enforce RFC 8446 record-boundary alignment. A peer or on-path attacker can pack a plaintext EncryptedExtensions with the ServerHello, which rustls accepts unencrypted.

Record
AZL-113260
Updated
2026-11-11
OSVAZL-113293No score

CVE-2026-123613 affecting package rust 1.98.1-1

Rustls from 0.23.13 before 0.23.45 accepts TLS 1.3 handshake messages at the wrong encryption level when they follow a key-changing message in the same record, because Deframer::aligned does not enforce RFC 8446 record-boundary alignment. A peer or on-path attacker can pack a plaintext EncryptedExtensions with the ServerHello, which rustls accepts unencrypted.

Record
AZL-113293
Updated
2026-11-11
OSVAZL-113305No score

CVE-2026-123613 affecting package rust-afterburn 5.8.2-2

Rustls from 0.23.13 before 0.23.45 accepts TLS 1.3 handshake messages at the wrong encryption level when they follow a key-changing message in the same record, because Deframer::aligned does not enforce RFC 8446 record-boundary alignment. A peer or on-path attacker can pack a plaintext EncryptedExtensions with the ServerHello, which rustls accepts unencrypted.

Record
AZL-113305
Updated
2026-11-11

History

History
RecordedChangedSources
affectedOSV
affected, aliases, referencesNVD, OSV
affected, aliases, referencesOSV
affected, aliases, published, referencesOSV
affected, aliases, facts, referencesNVD, OSV
publishedEUVD
publishedEUVD
aliases, referencesGitHub Advisories
aliases, products, publishedEUVD
first indexedCVE List
first indexedGitHub Advisories, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

References

Show 11 moreShow less
This page doesn't list everything

Left out here: 15 versions. The JSON record has them.

MoveEnter Open