CVE-2026-69248
python-cryptography verifier accepts wildcard DNS names allowing escape from permittedSubtrees
cryptography is a package designed to expose cryptographic primitives and recipes to Python developers. In versions 45.0.0 through 48.0.0, if an intermediate constrained CA permits the DNS name foo.example.com, and the leaf certificate has a wildcard in its DNS SAN of *.example.com, python-cryptography's verifier accepts which allows escaping outside of the permitted names. The core issue is in DNSConstraint::matches, where a wildcard pattern was treated as matching a more-specific permitted constraint even though *.example.com can expand to sibling names such as bar.example.com outside foo.example.com. This allows acceptance of an invalid certificate chain. This issue is fixed in 49.0.0.
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
- High
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
6.9
python-cryptography verifier accepts wildcard DNS names allowing escape from permittedSubtrees
cryptography is a package designed to expose cryptographic primitives and recipes to Python developers. In versions 45.0.0 through 48.0.0, if an intermediate constrained CA permits the DNS name foo.example.com, and the leaf certificate has a wildcard in its DNS SAN of *.example.com, python-cryptography's verifier accepts which allows escaping outside of the permitted names. The core issue is in DNSConstraint::matches, where a wildcard pattern was treated as matching a more-specific permitted constraint even though *.example.com can expand to sibling names such as bar.example.com outside foo.example.com. This allows acceptance of an invalid certificate chain. This issue is fixed in 49.0.0.
- Record
CVE-2026-69248- CVSS 4.0
- 6.9 Medium
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:H/VA:N/SC:N/SI:N/SA:N/E:P - Weakness
- CWE-295
- Updated
- 2026-11-02
EUVDEUVD-2026-52448
6.9
cryptography is a package designed to expose cryptographic primitives and recipes to Python developers. In versions 45.0.0 through 48.0.0, if an intermediate constrained CA permits the DNS name foo.example.com, and the leaf certificate has a wildcard in its DNS SAN of *.example.com, python-cryptography's verifier accepts which allows escaping outside of the permitted names. The core issue is in DNSConstraint::matches, where a wildcard pattern was treated as matching a more-specific permitted constraint even though *.example.com can expand to sibling names such as bar.example.com outside foo.example.com. This allows acceptance of an invalid certificate chain. This issue is fixed in 49.0.0.
- Record
EUVD-2026-52448- CVSS 4.0
- 6.9 Medium
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:H/VA:N/SC:N/SI:N/SA:N/E:P - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-m2h6-j472-rp4c
6.9
python-cryptography verifier accepts wildcard DNS names allowing escape from permittedSubtrees
Summary
If an intermediate constrained CA permits the DNS name foo.example.com, and the leaf certificate has a wildcard in its DNS SAN of *.example.com, python-cryptography's verifier accepts which allows escaping outside of the permitted names.
PoC
#!/usr/bin/env python3
"""Standalone PoC: pyca's DNSConstraint::matches admits a too-broad wildcard SAN.
Setup:
Sub-CA permitted constraint: dNSName = foo.example.com
Leaf SAN: dNSName = *.example.com
Expected: rejection (RFC 5280 §4.2.1.10 + standard wildcard semantics).
Observed: pyca accepts; further, asks server-verifier whether the leaf is
authoritative for `bar.example.com` and pyca answers yes — a sub-CA scope
escape.
"""
import datetime
from cryptography import x509
from cryptography.x509.oid import NameOID
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.x509.verification import (
PolicyBuilder, Store, ExtensionPolicy, Criticality, VerificationError,
)
now = datetime.datetime(2027, 1, 1, tzinfo=datetime.timezone.utc)
day = datetime.timedelta(days=1)
def build(subject, issuer, key, issuer_key, ca, exts=()):
b = (x509.CertificateBuilder()
.subject_name(subject).issuer_name(issuer)
.public_key(key.public_key())
.serial_number(x509.random_serial_number())
.not_valid_before(now - 30 * day)
.not_valid_after(now + 3650 * day)
.add_extension(x509.BasicConstraints(ca=ca, path_length=None), critical=True))
for e, c in exts:
b = b.add_extension(e, c)
return b.sign(issuer_key, hashes.SHA256())
# Root
rk = ec.generate_private_key(ec.SECP256R1())
rn = x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, "Test Root")])
root = build(rn, rn, rk, rk, True)
# Sub-CA constrained to foo.example.com
sk = ec.generate_private_key(ec.SECP256R1())
sn = x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, "Sub-CA")])
nc = x509.NameConstraints(
permitted_subtrees=[x509.DNSName("foo.example.com")],
excluded_subtrees=None,
)
sub = build(sn, rn, sk, rk, True, [(nc, True)])
# Leaf with SAN *.example.com (over-broad relative to the constraint)
lk = ec.generate_private_key(ec.SECP256R1())
ln = x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, "Leaf")])
san = x509.SubjectAlternativeName([x509.DNSName("*.example.com")])
leaf = build(ln, sn, lk, sk, False, [(san, False)])
# Policies
ca_pol = ExtensionPolicy.permit_all().require_present(
x509.BasicConstraints, Criticality.AGNOSTIC, None,
)
ee_pol = ExtensionPolicy.permit_all().require_present(
x509.SubjectAlternativeName, Criticality.AGNOSTIC, None,
)
v = (
PolicyBuilder()
.store(Store([root]))
.time(now)
.extension_policies(ca_policy=ca_pol, ee_policy=ee_pol)
.build_server_verifier(x509.DNSName("bar.example.com"))
)
try:
v.verify(leaf, [sub])
print("BUG: pyca trusted leaf as bar.example.com though sub-CA was constrained to foo.example.com")
except VerificationError as e:
print(f"EXPECTED: VerificationError: {e}")
Impact
Acceptance of invalid certificate chain.
- Record
GHSA-m2h6-j472-rp4c- CVSS 4.0
- 6.9 Medium
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:H/VA:N/SC:N/SI:N/SA:N/E:P - Weakness
- CWE-295
- Updated
- 2026-11-02
NVD
6.9
cryptography is a package designed to expose cryptographic primitives and recipes to Python developers. In versions 45.0.0 through 48.0.0, if an intermediate constrained CA permits the DNS name foo.example.com, and the leaf certificate has a wildcard in its DNS SAN of *.example.com, python-cryptography's verifier accepts which allows escaping outside of the permitted names. The core issue is in DNSConstraint::matches, where a wildcard pattern was treated as matching a more-specific permitted constraint even though *.example.com can expand to sibling names such as bar.example.com outside foo.example.com. This allows acceptance of an invalid certificate chain. This issue is fixed in 49.0.0.
- Record
CVE-2026-69248- CVSS 4.0
- 6.9 Medium
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:H/VA:N/SC:N/SI:N/SA:N/E:P/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 - Weakness
- CWE-295
- Updated
- 2026-11-02
OSV
6.9
python-cryptography verifier accepts wildcard DNS names allowing escape from permittedSubtrees
cryptography is a package designed to expose cryptographic primitives and recipes to Python developers. In versions 45.0.0 through 48.0.0, if an intermediate constrained CA permits the DNS name foo.example.com, and the leaf certificate has a wildcard in its DNS SAN of *.example.com, python-cryptography's verifier accepts which allows escaping outside of the permitted names. The core issue is in DNSConstraint::matches, where a wildcard pattern was treated as matching a more-specific permitted constraint even though *.example.com can expand to sibling names such as bar.example.com outside foo.example.com. This allows acceptance of an invalid certificate chain. This issue is fixed in 49.0.0.
- Record
CVE-2026-69248- CVSS 4.0
- 6.9 Medium
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:H/VA:N/SC:N/SI:N/SA:N/E:P - Weakness
- CWE-295
- Updated
- 2026-11-02
OSVDEBIAN-CVE-2026-69248
6.9
cryptography is a package designed to expose cryptographic primitives and recipes to Python developers. In versions 45.0.0 through 48.0.0, if an intermediate constrained CA permits the DNS name foo.example.com, and the leaf certificate has a wildcard in its DNS SAN of *.example.com, python-cryptography's verifier accepts which allows escaping outside of the permitted names. The core issue is in DNSConstraint::matches, where a wildcard pattern was treated as matching a more-specific permitted constraint even though *.example.com can expand to sibling names such as bar.example.com outside foo.example.com. This allows acceptance of an invalid certificate chain. This issue is fixed in 49.0.0.
- Record
DEBIAN-CVE-2026-69248- CVSS 4.0
- 6.9 Medium
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:H/VA:N/SC:N/SI:N/SA:N/E:P/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-02
Show 22 moreShow less
OSVGHSA-m2h6-j472-rp4c
6.9
python-cryptography verifier accepts wildcard DNS names allowing escape from permittedSubtrees
Summary
If an intermediate constrained CA permits the DNS name foo.example.com, and the leaf certificate has a wildcard in its DNS SAN of *.example.com, python-cryptography's verifier accepts which allows escaping outside of the permitted names.
PoC
#!/usr/bin/env python3
"""Standalone PoC: pyca's DNSConstraint::matches admits a too-broad wildcard SAN.
Setup:
Sub-CA permitted constraint: dNSName = foo.example.com
Leaf SAN: dNSName = *.example.com
Expected: rejection (RFC 5280 §4.2.1.10 + standard wildcard semantics).
Observed: pyca accepts; further, asks server-verifier whether the leaf is
authoritative for `bar.example.com` and pyca answers yes — a sub-CA scope
escape.
"""
import datetime
from cryptography import x509
from cryptography.x509.oid import NameOID
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.x509.verification import (
PolicyBuilder, Store, ExtensionPolicy, Criticality, VerificationError,
)
now = datetime.datetime(2027, 1, 1, tzinfo=datetime.timezone.utc)
day = datetime.timedelta(days=1)
def build(subject, issuer, key, issuer_key, ca, exts=()):
b = (x509.CertificateBuilder()
.subject_name(subject).issuer_name(issuer)
.public_key(key.public_key())
.serial_number(x509.random_serial_number())
.not_valid_before(now - 30 * day)
.not_valid_after(now + 3650 * day)
.add_extension(x509.BasicConstraints(ca=ca, path_length=None), critical=True))
for e, c in exts:
b = b.add_extension(e, c)
return b.sign(issuer_key, hashes.SHA256())
# Root
rk = ec.generate_private_key(ec.SECP256R1())
rn = x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, "Test Root")])
root = build(rn, rn, rk, rk, True)
# Sub-CA constrained to foo.example.com
sk = ec.generate_private_key(ec.SECP256R1())
sn = x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, "Sub-CA")])
nc = x509.NameConstraints(
permitted_subtrees=[x509.DNSName("foo.example.com")],
excluded_subtrees=None,
)
sub = build(sn, rn, sk, rk, True, [(nc, True)])
# Leaf with SAN *.example.com (over-broad relative to the constraint)
lk = ec.generate_private_key(ec.SECP256R1())
ln = x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, "Leaf")])
san = x509.SubjectAlternativeName([x509.DNSName("*.example.com")])
leaf = build(ln, sn, lk, sk, False, [(san, False)])
# Policies
ca_pol = ExtensionPolicy.permit_all().require_present(
x509.BasicConstraints, Criticality.AGNOSTIC, None,
)
ee_pol = ExtensionPolicy.permit_all().require_present(
x509.SubjectAlternativeName, Criticality.AGNOSTIC, None,
)
v = (
PolicyBuilder()
.store(Store([root]))
.time(now)
.extension_policies(ca_policy=ca_pol, ee_policy=ee_pol)
.build_server_verifier(x509.DNSName("bar.example.com"))
)
try:
v.verify(leaf, [sub])
print("BUG: pyca trusted leaf as bar.example.com though sub-CA was constrained to foo.example.com")
except VerificationError as e:
print(f"EXPECTED: VerificationError: {e}")
Impact
Acceptance of invalid certificate chain.
- Record
GHSA-m2h6-j472-rp4c- CVSS 4.0
- 6.9 Medium
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:H/VA:N/SC:N/SI:N/SA:N/E:P - Weakness
- CWE-295
- Updated
- 2026-11-02
OSVPYSEC-2026-3554
6.9
python-cryptography verifier accepts wildcard DNS names allowing escape from permittedSubtrees
Summary
If an intermediate constrained CA permits the DNS name foo.example.com, and the leaf certificate has a wildcard in its DNS SAN of *.example.com, python-cryptography's verifier accepts which allows escaping outside of the permitted names.
PoC
#!/usr/bin/env python3
"""Standalone PoC: pyca's DNSConstraint::matches admits a too-broad wildcard SAN.
Setup:
Sub-CA permitted constraint: dNSName = foo.example.com
Leaf SAN: dNSName = *.example.com
Expected: rejection (RFC 5280 §4.2.1.10 + standard wildcard semantics).
Observed: pyca accepts; further, asks server-verifier whether the leaf is
authoritative for `bar.example.com` and pyca answers yes — a sub-CA scope
escape.
"""
import datetime
from cryptography import x509
from cryptography.x509.oid import NameOID
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.x509.verification import (
PolicyBuilder, Store, ExtensionPolicy, Criticality, VerificationError,
)
now = datetime.datetime(2027, 1, 1, tzinfo=datetime.timezone.utc)
day = datetime.timedelta(days=1)
def build(subject, issuer, key, issuer_key, ca, exts=()):
b = (x509.CertificateBuilder()
.subject_name(subject).issuer_name(issuer)
.public_key(key.public_key())
.serial_number(x509.random_serial_number())
.not_valid_before(now - 30 * day)
.not_valid_after(now + 3650 * day)
.add_extension(x509.BasicConstraints(ca=ca, path_length=None), critical=True))
for e, c in exts:
b = b.add_extension(e, c)
return b.sign(issuer_key, hashes.SHA256())
# Root
rk = ec.generate_private_key(ec.SECP256R1())
rn = x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, "Test Root")])
root = build(rn, rn, rk, rk, True)
# Sub-CA constrained to foo.example.com
sk = ec.generate_private_key(ec.SECP256R1())
sn = x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, "Sub-CA")])
nc = x509.NameConstraints(
permitted_subtrees=[x509.DNSName("foo.example.com")],
excluded_subtrees=None,
)
sub = build(sn, rn, sk, rk, True, [(nc, True)])
# Leaf with SAN *.example.com (over-broad relative to the constraint)
lk = ec.generate_private_key(ec.SECP256R1())
ln = x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, "Leaf")])
san = x509.SubjectAlternativeName([x509.DNSName("*.example.com")])
leaf = build(ln, sn, lk, sk, False, [(san, False)])
# Policies
ca_pol = ExtensionPolicy.permit_all().require_present(
x509.BasicConstraints, Criticality.AGNOSTIC, None,
)
ee_pol = ExtensionPolicy.permit_all().require_present(
x509.SubjectAlternativeName, Criticality.AGNOSTIC, None,
)
v = (
PolicyBuilder()
.store(Store([root]))
.time(now)
.extension_policies(ca_policy=ca_pol, ee_policy=ee_pol)
.build_server_verifier(x509.DNSName("bar.example.com"))
)
try:
v.verify(leaf, [sub])
print("BUG: pyca trusted leaf as bar.example.com though sub-CA was constrained to foo.example.com")
except VerificationError as e:
print(f"EXPECTED: VerificationError: {e}")
Impact
Acceptance of invalid certificate chain.
- Record
PYSEC-2026-3554- CVSS 4.0
- 6.9 Medium
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:H/VA:N/SC:N/SI:N/SA:N/E:P - Updated
- 2026-11-02
OSVRHSA-2026:55543
9.1
Red Hat Security Advisory: Red Hat Hardened Images RPMs bug fix and enhancement update
- Record
RHSA-2026:55543- CVSS 3.1
- 9.1 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N - Updated
- 2026-11-02
OSVRHSA-2026:64774
7.5
Red Hat Security Advisory: python3.14-cryptography security update
- Record
RHSA-2026:64774- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVRHSA-2026:64795
7.5
Red Hat Security Advisory: python3.14-cryptography security update
- Record
RHSA-2026:64795- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVRLSA-2026:64774
7.5
Important: python3.14-cryptography security update
Python is an interpreted, interactive, object-oriented programming language, which includes modules, classes, exceptions, very high level dynamic data types and dynamic typing. Python supports interfaces to many system calls and libraries, as well as to various windowing systems.
Security Fix(es):
-
python-cryptography: python-cryptography: Duplicate self-signed intermediates can cause exponential path-building (CVE-2026-69249)
-
python-cryptography: python-cryptography: python-cryptography verifier accepts wildcard DNS names allowing escape from permittedSubtrees (CVE-2026-69248)
For more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.
- Record
RLSA-2026:64774- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVRLSA-2026:64795
7.5
Important: python3.14-cryptography security update
Python is an interpreted, interactive, object-oriented programming language, which includes modules, classes, exceptions, very high level dynamic data types and dynamic typing. Python supports interfaces to many system calls and libraries, as well as to various windowing systems.
Security Fix(es):
-
python-cryptography: python-cryptography: Duplicate self-signed intermediates can cause exponential path-building (CVE-2026-69249)
-
python-cryptography: python-cryptography: python-cryptography verifier accepts wildcard DNS names allowing escape from permittedSubtrees (CVE-2026-69248)
For more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.
- Record
RLSA-2026:64795- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-69248
6.9
cryptography is a package designed to expose cryptographic primitives and recipes to Python developers. In versions 45.0.0 through 48.0.0, if an intermediate constrained CA permits the DNS name foo.example.com, and the leaf certificate has a wildcard in its DNS SAN of *.example.com, python-cryptography's verifier accepts which allows escaping outside of the permitted names. The core issue is in DNSConstraint::matches, where a wildcard pattern was treated as matching a more-specific permitted constraint even though *.example.com can expand to sibling names such as bar.example.com outside foo.example.com. This allows acceptance of an invalid certificate chain. This issue is fixed in 49.0.0.
- Record
UBUNTU-CVE-2026-69248- CVSS 4.0
- 6.9 Medium
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:H/VA:N/SC:N/SI:N/SA:N/E:P - Updated
- 2026-11-02
OSVALSA-2026:64774 No score
Important: python3.14-cryptography security update
Python is an interpreted, interactive, object-oriented programming language, which includes modules, classes, exceptions, very high level dynamic data types and dynamic typing. Python supports interfaces to many system calls and libraries, as well as to various windowing systems.
Security Fix(es):
- python-cryptography: python-cryptography: Duplicate self-signed intermediates can cause exponential path-building (CVE-2026-69249)
- python-cryptography: python-cryptography: python-cryptography verifier accepts wildcard DNS names allowing escape from permittedSubtrees (CVE-2026-69248)
For more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.
- Record
ALSA-2026:64774- Updated
- 2026-11-02
OSVALSA-2026:64795 No score
Important: python3.14-cryptography security update
Python is an interpreted, interactive, object-oriented programming language, which includes modules, classes, exceptions, very high level dynamic data types and dynamic typing. Python supports interfaces to many system calls and libraries, as well as to various windowing systems.
Security Fix(es):
- python-cryptography: python-cryptography: Duplicate self-signed intermediates can cause exponential path-building (CVE-2026-69249)
- python-cryptography: python-cryptography: python-cryptography verifier accepts wildcard DNS names allowing escape from permittedSubtrees (CVE-2026-69248)
For more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.
- Record
ALSA-2026:64795- Updated
- 2026-11-02
OSVCLSA-2026-1781225624 No score
TuxCare security update for cryptography (2 CVEs)
TuxCare rebuilt cryptography to address 2 CVEs. Fixed in 45.0.7.post3+tuxcare.
- Record
CLSA-2026-1781225624- Updated
- 2026-11-02
OSVCLSA-2026-1783645382 No score
TuxCare security update for cryptography (2 CVEs)
TuxCare rebuilt cryptography to address 2 CVEs. Fixed in 44.0.3.post3+tuxcare.
- Record
CLSA-2026-1783645382- Updated
- 2026-11-02
OSVCLSA-2026-1790065768 No score
TuxCare security update for cryptography (1 CVE)
TuxCare rebuilt cryptography to address 1 CVE. Fixed in 46.0.7.post3+tuxcare.
- Record
CLSA-2026-1790065768- Updated
- 2026-11-02
OSVCLSA-2026-1793701169 No score
TuxCare security update for cryptography (1 CVE)
TuxCare rebuilt cryptography to address 1 CVE. Fixed in 43.0.3.post6+tuxcare.
- Record
CLSA-2026-1793701169- Updated
- 2026-11-03
OSVopenSUSE-SU-2026:12133-1 No score
matrix-synapse-1.163.0-1.1 on GA media
These are all security issues fixed in the matrix-synapse-1.163.0-1.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:12133-1- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:21685-1 No score
Security update for python-cryptography
This update for python-cryptography fixes the following issues:
- CVE-2026-69247: PKCS#7
EnvelopedDatadecryption exposes a Bleichenbacher oracle through distinguishable errors and timing (bsc#1273551). - CVE-2026-69248: verifier accepts wildcard DNS names allowing escape from
permittedSubtrees(bsc#1273549). - CVE-2026-69249: duplicate self-signed intermediates can cause exponential path-building (bsc#1273516).
- Record
openSUSE-SU-2026:21685-1- Updated
- 2026-11-02
OSVROOT-APP-PYPI-CVE-2026-69248 No score
CVE-2026-69248 in cryptography - Patched by Root
Root has patched CVE-2026-69248 in the cryptography package for Root:PyPI. Multiple fixed versions available.
- Record
ROOT-APP-PYPI-CVE-2026-69248- Updated
- 2026-11-02
OSVSUSE-SU-2026:23196-1 No score
Security update for python-cryptography
This update for python-cryptography fixes the following issues:
- CVE-2026-69248: verifier accepts wildcard DNS names allowing escape from permittedSubtrees (bsc#1273549).
- CVE-2026-69249: duplicate self-signed intermediates can cause exponential path-building (bsc#1273516).
- Record
SUSE-SU-2026:23196-1- Updated
- 2026-11-02
OSVSUSE-SU-2026:23247-1 No score
Security update for python-cryptography
This update for python-cryptography fixes the following issues:
- CVE-2026-69248: verifier accepts wildcard DNS names allowing escape from permittedSubtrees (bsc#1273549).
- CVE-2026-69249: duplicate self-signed intermediates can cause exponential path-building (bsc#1273516).
- Record
SUSE-SU-2026:23247-1- Updated
- 2026-11-02
OSVSUSE-SU-2026:23404-1 No score
Security update for python-cryptography
This update for python-cryptography fixes the following issues:
- CVE-2026-69247: PKCS#7
EnvelopedDatadecryption exposes a Bleichenbacher oracle through distinguishable errors and timing (bsc#1273551). - CVE-2026-69248: verifier accepts wildcard DNS names allowing escape from
permittedSubtrees(bsc#1273549). - CVE-2026-69249: duplicate self-signed intermediates can cause exponential path-building (bsc#1273516).
- Record
SUSE-SU-2026:23404-1- Updated
- 2026-11-02
OSVSUSE-SU-2026:23570-1 No score
Security update for python-cryptography
This update for python-cryptography fixes the following issues:
- CVE-2026-69247: PKCS#7
EnvelopedDatadecryption exposes a Bleichenbacher oracle through distinguishable errors and timing (bsc#1273551). - CVE-2026-69248: verifier accepts wildcard DNS names allowing escape from
permittedSubtrees(bsc#1273549). - CVE-2026-69249: duplicate self-signed intermediates can cause exponential path-building (bsc#1273516).
- Record
SUSE-SU-2026:23570-1- Updated
- 2026-11-02
OSVUSN-8776-1 No score
python-cryptography vulnerabilities
It was discovered that python-cryptography incorrectly accepted objects with immutable buffers when performing certain cipher operations. This would result in corrupted output, contrary to expectations. This issue only affected Ubuntu 18.04 LTS. (CVE-2023-23931)
It was discovered that python-cryptography reported the outcome of decrypting PKCS#7 enveloped data in distinguishable ways, and with observable timing differences. A remote attacker could possibly use this issue to recover the key used to encrypt the message contents, and obtain sensitive information. This issue only affected Ubuntu 26.04 LTS. (CVE-2026-69247)
Jack Lloyd discovered that python-cryptography incorrectly handled wildcard DNS names when enforcing the name constraints of a certificate authority. A remote attacker could possibly use this issue to have an invalid certificate chain accepted, and use names outside of the permitted ones. This issue only affected Ubuntu 26.04 LTS. (CVE-2026-69248)
Samuel Judson discovered that python-cryptography incorrectly handled certificate chains that contained duplicate certificates. A remote attacker could possibly use this issue to cause python-cryptography to use excessive resources, leading to a denial of service. This issue only affected Ubuntu 26.04 LTS. (CVE-2026-69249)
- Record
USN-8776-1- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
cryptographyPyPI |
45.0.0 up to 49.0.0 | 49.0.0 |
python3.14-cryptographyAlmaLinux:9 From an advisory covering 2 CVEs |
before 45.0.4-4.el9_8.6 | 45.0.4-4.el9_8.6 |
python3.14-cryptographyAlmaLinux:10 From an advisory covering 2 CVEs |
before 45.0.4-4.el10_2.5 | 45.0.4-4.el10_2.5 |
cryptographyTuxCare:PyPI From an advisory covering 2 CVEs |
45.0.7 up to 45.0.7.post3+tuxcare, plus listed versions 45.0.7.post1+tuxcare45.0.7.post2+tuxcare |
45.0.7.post3+tuxcare |
cryptographyTuxCare:PyPI From an advisory covering 2 CVEs |
44.0.3 up to 44.0.3.post3+tuxcare, plus listed versions 44.0.3.post1+tuxcare44.0.3.post2+tuxcare |
44.0.3.post3+tuxcare |
cryptographyTuxCare:PyPI |
46.0.7 up to 46.0.7.post3+tuxcare, plus listed versions 46.0.7.post1+tuxcare46.0.7.post2+tuxcare |
46.0.7.post3+tuxcare |
cryptographyTuxCare:PyPI |
43.0.3 up to 43.0.3.post6+tuxcare, plus listed versions 43.0.3.post1+tuxcare43.0.3.post2+tuxcare43.0.3.post3+tuxcare43.0.3.post4+tuxcare43.0.3.post5+tuxcare |
43.0.3.post6+tuxcare |
python-cryptographyDebian:12 |
All versions, plus listed versions 38.0.4-338.0.4-3+deb12u138.0.4-441.0.7-141.0.7-2 Show 24 moreShow less41.0.7-341.0.7-441.0.7-542.0.5-142.0.5-243.0.0-143.0.0-243.0.0-344.0.2-144.0.2-245.0.6-145.0.6-1~exp145.0.7-146.0.1-146.0.1-1~exp146.0.5-146.0.5-246.0.6-146.0.7-147.0.0-149.0.0-149.0.0-1~exp149.0.0-250.0.2-1~exp1 |
None known |
python-cryptographyDebian:13 |
All versions, plus listed versions 43.0.0-343.0.0-3+deb13u144.0.2-144.0.2-245.0.6-1 Show 13 moreShow less45.0.6-1~exp145.0.7-146.0.1-146.0.1-1~exp146.0.5-146.0.5-246.0.6-146.0.7-147.0.0-149.0.0-149.0.0-1~exp149.0.0-250.0.2-1~exp1 |
None known |
python-cryptographyDebian:14 |
before 49.0.0-1, plus listed versions 43.0.0-344.0.2-144.0.2-245.0.6-145.0.6-1~exp1 Show 9 moreShow less45.0.7-146.0.1-146.0.1-1~exp146.0.5-146.0.5-246.0.6-146.0.7-147.0.0-149.0.0-1~exp1 |
49.0.0-1 |
Show 23 moreShow less
| Package | Affected | Fixed |
|---|---|---|
cryptographyPyPI |
45.0.0 up to 49.0.0, plus listed versions 45.0.145.0.245.0.345.0.445.0.5 Show 13 moreShow less45.0.645.0.746.0.046.0.146.0.246.0.346.0.446.0.546.0.646.0.747.0.048.0.048.0.1 |
49.0.0 |
cryptographyPyPI |
before 49.0.0, plus listed versions 0.10.20.2.10.2.20.3 Show 45 moreShow less0.40.50.5.10.5.20.5.30.5.40.60.6.10.70.7.10.7.20.80.8.10.8.20.90.9.10.9.20.9.31.01.0.11.0.21.11.1.11.1.21.21.2.11.2.21.2.31.31.3.11.3.21.3.31.3.41.41.51.5.11.5.21.5.31.61.71.7.11.7.21.81.8.11.8.2 |
49.0.0 |
python-cryptographyRed Hat:hummingbird:1 From an advisory covering 24 CVEs |
before 0:50.0.0-1.hum1 | 0:50.0.0-1.hum1 |
python3-cryptographyRed Hat:hummingbird:1 From an advisory covering 24 CVEs |
before 0:50.0.0-1.hum1 | 0:50.0.0-1.hum1 |
python3.14-cryptographyRed Hat:enterprise_linux:9::appstream From an advisory covering 2 CVEs |
before 0:45.0.4-4.el9_8.6 | 0:45.0.4-4.el9_8.6 |
python3.14-cryptography-debuginfoRed Hat:enterprise_linux:9::appstream From an advisory covering 2 CVEs |
before 0:45.0.4-4.el9_8.6 | 0:45.0.4-4.el9_8.6 |
python3.14-cryptography-debugsourceRed Hat:enterprise_linux:9::appstream From an advisory covering 2 CVEs |
before 0:45.0.4-4.el9_8.6 | 0:45.0.4-4.el9_8.6 |
python3.14-cryptographyRed Hat:enterprise_linux:10.2 From an advisory covering 2 CVEs |
before 0:45.0.4-4.el10_2.5 | 0:45.0.4-4.el10_2.5 |
python3.14-cryptography-debuginfoRed Hat:enterprise_linux:10.2 From an advisory covering 2 CVEs |
before 0:45.0.4-4.el10_2.5 | 0:45.0.4-4.el10_2.5 |
python3.14-cryptography-debugsourceRed Hat:enterprise_linux:10.2 From an advisory covering 2 CVEs |
before 0:45.0.4-4.el10_2.5 | 0:45.0.4-4.el10_2.5 |
python3.14-cryptographyRocky Linux:9 From an advisory covering 2 CVEs |
before 0:45.0.4-4.el9_8.6 | 0:45.0.4-4.el9_8.6 |
python3.14-cryptographyRocky Linux:10 From an advisory covering 2 CVEs |
before 0:45.0.4-4.el10_2.5 | 0:45.0.4-4.el10_2.5 |
cryptographyRoot:PyPI |
before 46.0.3+aikido.9 | 46.0.3+aikido.944.0.0+aikido.343.0.1+aikido.848.0.0+aikido.548.0.0+aikido.643.0.1+aikido.944.0.0+aikido.446.0.3+aikido.10 |
python-cryptographySUSE:Linux Micro 6.1 From an advisory covering 2 CVEs |
before 42.0.4-slfo.1.1_6.1 | 42.0.4-slfo.1.1_6.1 |
python-cryptographySUSE:Linux Micro 6.0 From an advisory covering 2 CVEs |
before 42.0.4-6.1 | 42.0.4-6.1 |
python-cryptographySUSE:Linux Micro 6.2 From an advisory covering 3 CVEs |
before 44.0.3-160000.5.1 | 44.0.3-160000.5.1 |
python-cryptographySUSE:Linux Enterprise Server 16.0 From an advisory covering 3 CVEs |
before 44.0.3-160000.5.1 | 44.0.3-160000.5.1 |
python-cryptographySUSE:Linux Enterprise Server for SAP applications 16.0 From an advisory covering 3 CVEs |
before 44.0.3-160000.5.1 | 44.0.3-160000.5.1 |
python-cryptographyUbuntu:26.04:LTS |
before 46.0.5-1ubuntu2.2, plus listed versions 43.0.0-1ubuntu146.0.1-1ubuntu246.0.5-1ubuntu146.0.5-1ubuntu2 |
46.0.5-1ubuntu2.2 |
python-cryptographyUbuntu:Pro:18.04:LTS From an advisory covering 4 CVEs |
before 2.1.4-1ubuntu1.4+esm6, plus listed versions 1.9-12.1.3-32.1.4-12.1.4-1build12.1.4-1build2 Show 7 moreShow less2.1.4-1ubuntu12.1.4-1ubuntu1.12.1.4-1ubuntu1.22.1.4-1ubuntu1.32.1.4-1ubuntu1.42.1.4-1ubuntu1.4+esm12.1.4-1ubuntu1.4+esm3 |
2.1.4-1ubuntu1.4+esm6 |
python-cryptographyUbuntu:26.04:LTS From an advisory covering 4 CVEs |
before 46.0.5-1ubuntu2.2, plus listed versions 43.0.0-1ubuntu146.0.1-1ubuntu246.0.5-1ubuntu146.0.5-1ubuntu2 |
46.0.5-1ubuntu2.2 |
matrix-synapseopenSUSE:Tumbleweed |
before 1.163.0-1.1 | 1.163.0-1.1 |
python-cryptographyopenSUSE:Leap 16.0 From an advisory covering 3 CVEs |
before 44.0.3-160000.5.1 | 44.0.3-160000.5.1 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, facts | ||
| affected, aliases | OSV | |
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-69248 is a medium vulnerability (CVSS 6.9) in Pyca Cryptography, published August 3, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.24%, the 15th percentile. Fixed in cryptography 49.0.0.
References
github.com/pyca/cryptography/security/advisories/GHSA-m2h6-j472-rp4c
github.com/pyca/cryptography/pull/14888
github.com/pyca/cryptography/commit/4d035a4225965edeffd312079a510ef25fcfdcb2
nvd.nist.gov/vuln/detail/CVE-2026-69248
github.com/pyca/cryptography/commit/286c89128
github.com/pypa/advisory-database/tree/main/vulns/cryptography/PYSEC-2026-3554.yaml
Show 145 moreShow less
github.com/advisories/GHSA-m2h6-j472-rp4c
access.redhat.com/errata/RHSA-2026:64774
access.redhat.com/security/cve/CVE-2026-69248
access.redhat.com/security/cve/CVE-2026-69249
bugzilla.redhat.com/2510815
bugzilla.redhat.com/2510830
errata.almalinux.org/9/ALSA-2026-64774.html
access.redhat.com/errata/RHSA-2026:64795
errata.almalinux.org/10/ALSA-2026-64795.html
github.com/CVEProject/cvelistV5/tree/main/cves/2026/69xxx/CVE-2026-69248.json
security-tracker.debian.org/tracker/CVE-2026-69248
github.com/pyca/cryptography
pypi.org/project/cryptography
access.redhat.com/errata/RHSA-2026:55543
images.redhat.com
access.redhat.com/security/cve/CVE-2026-54876
access.redhat.com/security/updates/classification
access.redhat.com/security/cve/CVE-2026-75803
access.redhat.com/security/cve/CVE-2026-69247
access.redhat.com/security/cve/CVE-2026-42769
access.redhat.com/security/cve/CVE-2026-42768
access.redhat.com/security/cve/CVE-2026-34181
access.redhat.com/security/cve/CVE-2026-34180
access.redhat.com/security/cve/CVE-2026-7383
access.redhat.com/security/cve/CVE-2026-45447
access.redhat.com/security/cve/CVE-2026-42766
access.redhat.com/security/cve/CVE-2026-45446
access.redhat.com/security/cve/CVE-2026-42767
access.redhat.com/security/cve/CVE-2026-45445
access.redhat.com/security/cve/CVE-2026-9076
access.redhat.com/security/cve/CVE-2026-34183
access.redhat.com/security/cve/CVE-2026-42765
access.redhat.com/security/cve/CVE-2026-42771
access.redhat.com/security/cve/CVE-2026-35188
access.redhat.com/security/cve/CVE-2026-42764
access.redhat.com/security/cve/CVE-2026-42770
access.redhat.com/security/cve/CVE-2026-34182
access.redhat.com/security/cve/CVE-2026-84782
security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_55543.json
bugzilla.redhat.com/show_bug.cgi?id=2481879
cve.org/CVERecord?id=CVE-2026-7383
nvd.nist.gov/vuln/detail/CVE-2026-7383
bugzilla.redhat.com/show_bug.cgi?id=2481880
cve.org/CVERecord?id=CVE-2026-9076
nvd.nist.gov/vuln/detail/CVE-2026-9076
bugzilla.redhat.com/show_bug.cgi?id=2481881
cve.org/CVERecord?id=CVE-2026-34180
nvd.nist.gov/vuln/detail/CVE-2026-34180
bugzilla.redhat.com/show_bug.cgi?id=2481882
cve.org/CVERecord?id=CVE-2026-34181
nvd.nist.gov/vuln/detail/CVE-2026-34181
bugzilla.redhat.com/show_bug.cgi?id=2481884
cve.org/CVERecord?id=CVE-2026-34182
nvd.nist.gov/vuln/detail/CVE-2026-34182
bugzilla.redhat.com/show_bug.cgi?id=2481885
cve.org/CVERecord?id=CVE-2026-34183
nvd.nist.gov/vuln/detail/CVE-2026-34183
bugzilla.redhat.com/show_bug.cgi?id=2481886
cve.org/CVERecord?id=CVE-2026-35188
nvd.nist.gov/vuln/detail/CVE-2026-35188
bugzilla.redhat.com/show_bug.cgi?id=2481887
cve.org/CVERecord?id=CVE-2026-42764
nvd.nist.gov/vuln/detail/CVE-2026-42764
bugzilla.redhat.com/show_bug.cgi?id=2481889
cve.org/CVERecord?id=CVE-2026-42765
nvd.nist.gov/vuln/detail/CVE-2026-42765
bugzilla.redhat.com/show_bug.cgi?id=2481890
cve.org/CVERecord?id=CVE-2026-42766
nvd.nist.gov/vuln/detail/CVE-2026-42766
bugzilla.redhat.com/show_bug.cgi?id=2481891
cve.org/CVERecord?id=CVE-2026-42767
nvd.nist.gov/vuln/detail/CVE-2026-42767
bugzilla.redhat.com/show_bug.cgi?id=2481892
cve.org/CVERecord?id=CVE-2026-42768
nvd.nist.gov/vuln/detail/CVE-2026-42768
bugzilla.redhat.com/show_bug.cgi?id=2481893
cve.org/CVERecord?id=CVE-2026-42769
nvd.nist.gov/vuln/detail/CVE-2026-42769
bugzilla.redhat.com/show_bug.cgi?id=2481894
cve.org/CVERecord?id=CVE-2026-42770
nvd.nist.gov/vuln/detail/CVE-2026-42770
bugzilla.redhat.com/show_bug.cgi?id=2481895
cve.org/CVERecord?id=CVE-2026-42771
nvd.nist.gov/vuln/detail/CVE-2026-42771
bugzilla.redhat.com/show_bug.cgi?id=2481896
cve.org/CVERecord?id=CVE-2026-45445
nvd.nist.gov/vuln/detail/CVE-2026-45445
bugzilla.redhat.com/show_bug.cgi?id=2481897
cve.org/CVERecord?id=CVE-2026-45446
nvd.nist.gov/vuln/detail/CVE-2026-45446
bugzilla.redhat.com/show_bug.cgi?id=2481898
cve.org/CVERecord?id=CVE-2026-45447
nvd.nist.gov/vuln/detail/CVE-2026-45447
bugzilla.redhat.com/show_bug.cgi?id=2511600
cve.org/CVERecord?id=CVE-2026-54876
nvd.nist.gov/vuln/detail/CVE-2026-54876
github.com/openssl/openssl/commit/155b5fe0f93365e6df1c56ee3606b121080c6c12
github.com/openssl/openssl/commit/d8c51048ac037a21bae0f41cad7a3920dc7f3638
openssl-library.org/news/secadv/20260805.txt
bugzilla.redhat.com/show_bug.cgi?id=2510835
cve.org/CVERecord?id=CVE-2026-69247
nvd.nist.gov/vuln/detail/CVE-2026-69247
github.com/pyca/cryptography/commit/53fccd93413a8d7f07d6d8999681f27b75cffa3f
github.com/pyca/cryptography/pull/15369
github.com/pyca/cryptography/security/advisories/GHSA-g6cj-pr64-35w5
bugzilla.redhat.com/show_bug.cgi?id=2510830
cve.org/CVERecord?id=CVE-2026-69248
bugzilla.redhat.com/show_bug.cgi?id=2510815
cve.org/CVERecord?id=CVE-2026-69249
nvd.nist.gov/vuln/detail/CVE-2026-69249
github.com/pyca/cryptography/commit/4a12cf49675a184e47f912b00b04f3a629283582
github.com/pyca/cryptography/pull/14960
github.com/pyca/cryptography/security/advisories/GHSA-jwv3-5hgf-82ww
bugzilla.redhat.com/show_bug.cgi?id=2523425
cve.org/CVERecord?id=CVE-2026-75803
nvd.nist.gov/vuln/detail/CVE-2026-75803
github.com/openssl/openssl/commit/119ab9555dc62275bbd71f6f49529b1a44feba42
github.com/openssl/openssl/commit/3621257986e27e540bf96a11570929a6e5a9e05b
github.com/openssl/openssl/commit/6c7aa6f8f6449b7fe0137ee8be65fcd239bd7d6a
github.com/openssl/openssl/commit/bdeb0cd994d915342787f117ee75044f0dc36f34
github.com/openssl/openssl/commit/bf95f5f772e9362f87b25cfa2f8cb15d984865b9
openssl-library.org/news/secadv/20260825.txt
bugzilla.redhat.com/show_bug.cgi?id=2537080
cve.org/CVERecord?id=CVE-2026-84782
nvd.nist.gov/vuln/detail/CVE-2026-84782
openssl-library.org/news/vulnerabilities
security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_64774.json
security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_64795.json
errata.rockylinux.org/RLSA-2026:64774
errata.rockylinux.org/RLSA-2026:64795
suse.com/support/update/announcement/2026/suse-su-202623196-1
bugzilla.suse.com/1273516
bugzilla.suse.com/1273549
suse.com/security/cve/CVE-2026-69248
suse.com/security/cve/CVE-2026-69249
suse.com/support/update/announcement/2026/suse-su-202623247-1
suse.com/support/update/announcement/2026/suse-su-202623404-1
bugzilla.suse.com/1273551
suse.com/security/cve/CVE-2026-69247
suse.com/support/update/announcement/2026/suse-su-202623570-1
ubuntu.com/security/CVE-2026-69248
ubuntu.com/security/notices/USN-8776-1
ubuntu.com/security/CVE-2023-23931
ubuntu.com/security/CVE-2026-69247
ubuntu.com/security/CVE-2026-69249
Left out here: 106 versions. The JSON record has them.