Every CVE Search/ Get API key

CVE-2026-69249

python-cryptography: Duplicate self-signed intermediates can cause exponential path-building

8.7 HighFix available

python-cryptography is a package designed to expose cryptographic primitives and recipes to Python developers. In versions 42.0.0 through 48.0.0, when resolving invalid certificate chains that include duplicate copies of self-signed certificates, the processing recursively invokes the same candidate, leading to an exponential blowup. Although the limitation that the chain depth cannot exceed a specified maximum depth prevents unbounded recursion and guarantees termination, an attacker-controlled certificate chain can lead the processing to easily take more than 5s to reject in testing. This amplification could form the basis for a resource exhaustion denial of service attack. The core issue arises in the recursive nature of build_chain_inner, which does not de-duplicate against previously analyzed candidates. As the correctness of validation is not affected, the integrity of a system cannot be compromised through this vector, only its availability. 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
None
Integrity
None
Availability
High

Exploit likelihood

0.26%Up 0.1 points since Aug 4, 2026
90%50%10%1%

What each source reports

CVE List Score used 8.7

python-cryptography: Duplicate self-signed intermediates can cause exponential path-building

python-cryptography is a package designed to expose cryptographic primitives and recipes to Python developers. In versions 42.0.0 through 48.0.0, when resolving invalid certificate chains that include duplicate copies of self-signed certificates, the processing recursively invokes the same candidate, leading to an exponential blowup. Although the limitation that the chain depth cannot exceed a specified maximum depth prevents unbounded recursion and guarantees termination, an attacker-controlled certificate chain can lead the processing to easily take more than 5s to reject in testing. This amplification could form the basis for a resource exhaustion denial of service attack. The core issue arises in the recursive nature of build_chain_inner, which does not de-duplicate against previously analyzed candidates. As the correctness of validation is not affected, the integrity of a system cannot be compromised through this vector, only its availability. This issue is fixed in 49.0.0.

Record
CVE-2026-69249
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Weakness
CWE-400
Updated
2026-11-02
EUVDEUVD-2026-52450 8.7

python-cryptography is a package designed to expose cryptographic primitives and recipes to Python developers. In versions 42.0.0 through 48.0.0, when resolving invalid certificate chains that include duplicate copies of self-signed certificates, the processing recursively invokes the same candidate, leading to an exponential blowup. Although the limitation that the chain depth cannot exceed a specified maximum depth prevents unbounded recursion and guarantees termination, an attacker-controlled certificate chain can lead the processing to easily take more than 5s to reject in testing. This amplification could form the basis for a resource exhaustion denial of service attack. The core issue arises in the recursive nature of build_chain_inner, which does not de-duplicate against previously analyzed candidates. As the correctness of validation is not affected, the integrity of a system cannot be compromised through this vector, only its availability. This issue is fixed in 49.0.0.

Record
EUVD-2026-52450
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Updated
2026-11-02
GitHub AdvisoriesGHSA-jwv3-5hgf-82ww 8.7

python-cryptography: Duplicate self-signed intermediates can cause exponential path-building

Summary

When resolving invalid certificate chains that include duplicate copies of self-signed certificates, the processing recursively invokes the same candidate, leading to an exponential blowup. Although the limitation that the chain depth cannot exceed a specified maximum depth prevents unbounded recursion and guarantees termination, an attacker-controlled certificate chain can lead the processing to easily take more than 5s to reject in testing. This amplification could form the basis for a resource exhaustion denial of service attack.

This work was completed by Trail of Bits as part of the Patch The Planet project in collaboration with OpenAI. The finding was identified primarily by the Codex coding agent, and manually reviewed before submission.

Details

The core issue arises in the recursive nature of build_chain_inner, which does not de-duplicate against previously analyzed candidates.

    fn build_chain_inner(
        &self,
        working_cert: &VerificationCertificate<'chain, B>,
        current_depth: u8,
        working_cert_extensions: &Extensions<'chain>,
        name_chain: NameChain<'_, 'chain>,
        budget: &mut Budget,
    ) -> ValidationResult<'chain, Chain<'chain, B>, B> {
        if let Some(nc) = working_cert_extensions.get_extension(&NAME_CONSTRAINTS_OID) {
            name_chain.evaluate_constraints(&nc.value()?, budget)?;
        }

        // Look in the store's root set to see if the working cert is listed.
        // If it is, we've reached the end.
        if self.store.contains(working_cert) {
            return Ok(vec![working_cert.clone()]);
        }

        // Check that our current depth does not exceed our policy-configured
        // max depth. We do this after the root set check, since the depth
        // only measures the intermediate chain's length, not the root or leaf.
        if current_depth > self.policy.max_chain_depth {
            return Err(ValidationError::new(ValidationErrorKind::Other(
                "chain construction exceeds max depth".into(),
            )));
        }

        // Otherwise, we collect a list of potential issuers for this cert,
        // and continue with the first that verifies.
        let mut last_err: Option<ValidationError<'_, B>> = None;
        for issuing_cert_candidate in self.potential_issuers(working_cert) {
            // A candidate issuer is said to verify if it both
            // signs for the working certificate and conforms to the
            // policy.
            let issuer_extensions = issuing_cert_candidate.certificate().extensions()?;
            match self.policy.valid_issuer(
                issuing_cert_candidate,
                working_cert,
                current_depth,
                &issuer_extensions,
            ) {
                Ok(_) => {
                    match self.build_chain_inner(

A sufficient patch is to track valid issuers, and to skip seen ones before recursing. By tracking valid issuers only, validation and custom extension-policy callbacks still run.

          let mut seen_valid_issuers = Vec::<&VerificationCertificate<'chain, B>>::new();
          for issuing_cert_candidate in self.potential_issuers(working_cert) {
          . . .
                  Ok(_) => {
                      if seen_valid_issuers.contains(&issuing_cert_candidate) {
                         continue;
                      }
                      seen_valid_issuers.push(issuing_cert_candidate);
 
                      match self.build_chain_inner(
                          issuing_cert_candidate,
                          // NOTE(ww): According to RFC 5280, we should only

In testing, this fix removed the exponential blowup without breaking apparent correctness.

duplicates,max_depth,result,seconds
1,7,rejected,0.000464 -> 1,7,rejected,0.000667
2,7,rejected,0.025154 -> 2,7,rejected,0.001229
3,7,rejected,0.489924 -> 3,7,rejected,0.001619 
4,7,rejected,4.309403 ->…
Record
GHSA-jwv3-5hgf-82ww
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Weakness
CWE-400
Updated
2026-11-02
NVD 8.7

python-cryptography is a package designed to expose cryptographic primitives and recipes to Python developers. In versions 42.0.0 through 48.0.0, when resolving invalid certificate chains that include duplicate copies of self-signed certificates, the processing recursively invokes the same candidate, leading to an exponential blowup. Although the limitation that the chain depth cannot exceed a specified maximum depth prevents unbounded recursion and guarantees termination, an attacker-controlled certificate chain can lead the processing to easily take more than 5s to reject in testing. This amplification could form the basis for a resource exhaustion denial of service attack. The core issue arises in the recursive nature of build_chain_inner, which does not de-duplicate against previously analyzed candidates. As the correctness of validation is not affected, the integrity of a system cannot be compromised through this vector, only its availability. This issue is fixed in 49.0.0.

Record
CVE-2026-69249
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/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
Weakness
CWE-400
Updated
2026-11-02
OSV 8.7

python-cryptography: Duplicate self-signed intermediates can cause exponential path-building

python-cryptography is a package designed to expose cryptographic primitives and recipes to Python developers. In versions 42.0.0 through 48.0.0, when resolving invalid certificate chains that include duplicate copies of self-signed certificates, the processing recursively invokes the same candidate, leading to an exponential blowup. Although the limitation that the chain depth cannot exceed a specified maximum depth prevents unbounded recursion and guarantees termination, an attacker-controlled certificate chain can lead the processing to easily take more than 5s to reject in testing. This amplification could form the basis for a resource exhaustion denial of service attack. The core issue arises in the recursive nature of build_chain_inner, which does not de-duplicate against previously analyzed candidates. As the correctness of validation is not affected, the integrity of a system cannot be compromised through this vector, only its availability. This issue is fixed in 49.0.0.

Record
CVE-2026-69249
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Weakness
CWE-400
Updated
2026-11-02
OSVDEBIAN-CVE-2026-69249 8.7

python-cryptography is a package designed to expose cryptographic primitives and recipes to Python developers. In versions 42.0.0 through 48.0.0, when resolving invalid certificate chains that include duplicate copies of self-signed certificates, the processing recursively invokes the same candidate, leading to an exponential blowup. Although the limitation that the chain depth cannot exceed a specified maximum depth prevents unbounded recursion and guarantees termination, an attacker-controlled certificate chain can lead the processing to easily take more than 5s to reject in testing. This amplification could form the basis for a resource exhaustion denial of service attack. The core issue arises in the recursive nature of build_chain_inner, which does not de-duplicate against previously analyzed candidates. As the correctness of validation is not affected, the integrity of a system cannot be compromised through this vector, only its availability. This issue is fixed in 49.0.0.

Record
DEBIAN-CVE-2026-69249
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/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-02
Show 32 moreShow less
OSVGHSA-jwv3-5hgf-82ww 8.7

python-cryptography: Duplicate self-signed intermediates can cause exponential path-building

Summary

When resolving invalid certificate chains that include duplicate copies of self-signed certificates, the processing recursively invokes the same candidate, leading to an exponential blowup. Although the limitation that the chain depth cannot exceed a specified maximum depth prevents unbounded recursion and guarantees termination, an attacker-controlled certificate chain can lead the processing to easily take more than 5s to reject in testing. This amplification could form the basis for a resource exhaustion denial of service attack.

This work was completed by Trail of Bits as part of the Patch The Planet project in collaboration with OpenAI. The finding was identified primarily by the Codex coding agent, and manually reviewed before submission.

Details

The core issue arises in the recursive nature of build_chain_inner, which does not de-duplicate against previously analyzed candidates.

    fn build_chain_inner(
        &self,
        working_cert: &VerificationCertificate<'chain, B>,
        current_depth: u8,
        working_cert_extensions: &Extensions<'chain>,
        name_chain: NameChain<'_, 'chain>,
        budget: &mut Budget,
    ) -> ValidationResult<'chain, Chain<'chain, B>, B> {
        if let Some(nc) = working_cert_extensions.get_extension(&NAME_CONSTRAINTS_OID) {
            name_chain.evaluate_constraints(&nc.value()?, budget)?;
        }

        // Look in the store's root set to see if the working cert is listed.
        // If it is, we've reached the end.
        if self.store.contains(working_cert) {
            return Ok(vec![working_cert.clone()]);
        }

        // Check that our current depth does not exceed our policy-configured
        // max depth. We do this after the root set check, since the depth
        // only measures the intermediate chain's length, not the root or leaf.
        if current_depth > self.policy.max_chain_depth {
            return Err(ValidationError::new(ValidationErrorKind::Other(
                "chain construction exceeds max depth".into(),
            )));
        }

        // Otherwise, we collect a list of potential issuers for this cert,
        // and continue with the first that verifies.
        let mut last_err: Option<ValidationError<'_, B>> = None;
        for issuing_cert_candidate in self.potential_issuers(working_cert) {
            // A candidate issuer is said to verify if it both
            // signs for the working certificate and conforms to the
            // policy.
            let issuer_extensions = issuing_cert_candidate.certificate().extensions()?;
            match self.policy.valid_issuer(
                issuing_cert_candidate,
                working_cert,
                current_depth,
                &issuer_extensions,
            ) {
                Ok(_) => {
                    match self.build_chain_inner(

A sufficient patch is to track valid issuers, and to skip seen ones before recursing. By tracking valid issuers only, validation and custom extension-policy callbacks still run.

          let mut seen_valid_issuers = Vec::<&VerificationCertificate<'chain, B>>::new();
          for issuing_cert_candidate in self.potential_issuers(working_cert) {
          . . .
                  Ok(_) => {
                      if seen_valid_issuers.contains(&issuing_cert_candidate) {
                         continue;
                      }
                      seen_valid_issuers.push(issuing_cert_candidate);
 
                      match self.build_chain_inner(
                          issuing_cert_candidate,
                          // NOTE(ww): According to RFC 5280, we should only

In testing, this fix removed the exponential blowup without breaking apparent correctness.

duplicates,max_depth,result,seconds
1,7,rejected,0.000464 -> 1,7,rejected,0.000667
2,7,rejected,0.025154 -> 2,7,rejected,0.001229
3,7,rejected,0.489924 -> 3,7,rejected,0.001619 
4,7,rejected,4.309403 ->…
Record
GHSA-jwv3-5hgf-82ww
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Weakness
CWE-400
Updated
2026-11-02
OSVOESA-2026-3457 8.7

python-cryptography security update

cryptography is a package designed to expose cryptographic primitives and recipes to Python developers.

Security Fix(es):

python-cryptography is a package designed to expose cryptographic primitives and recipes to Python developers. Prior to 49.0.0, when resolving invalid certificate chains that include duplicate copies of self-signed certificates, the processing recursively invokes the same candidate, leading to an exponential blowup. Although the limitation that the chain depth cannot exceed a specified maximum depth prevents unbounded recursion and guarantees termination, an attacker-controlled certificate chain can lead the processing to easily take more than 5s to reject in testing. This amplification could form the basis for a resource exhaustion denial of service attack. The core issue arises in the recursive nature of build_chain_inner, which does not de-duplicate against previously analyzed candidates. As the correctness of validation is not affected, the integrity of a system cannot be compromised through this vector, only its availability. This issue is fixed in 49.0.0.(CVE-2026-69249)

Record
OESA-2026-3457
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/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-02
OSVOESA-2026-3458 8.7

python-cryptography security update

cryptography is a package designed to expose cryptographic primitives and recipes to Python developers.

Security Fix(es):

python-cryptography is a package designed to expose cryptographic primitives and recipes to Python developers. Prior to 49.0.0, when resolving invalid certificate chains that include duplicate copies of self-signed certificates, the processing recursively invokes the same candidate, leading to an exponential blowup. Although the limitation that the chain depth cannot exceed a specified maximum depth prevents unbounded recursion and guarantees termination, an attacker-controlled certificate chain can lead the processing to easily take more than 5s to reject in testing. This amplification could form the basis for a resource exhaustion denial of service attack. The core issue arises in the recursive nature of build_chain_inner, which does not de-duplicate against previously analyzed candidates. As the correctness of validation is not affected, the integrity of a system cannot be compromised through this vector, only its availability. This issue is fixed in 49.0.0.(CVE-2026-69249)

Record
OESA-2026-3458
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/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-02
OSVOESA-2026-3459 8.7

python-cryptography security update

cryptography is a package designed to expose cryptographic primitives and recipes to Python developers.

Security Fix(es):

python-cryptography is a package designed to expose cryptographic primitives and recipes to Python developers. Prior to 49.0.0, when resolving invalid certificate chains that include duplicate copies of self-signed certificates, the processing recursively invokes the same candidate, leading to an exponential blowup. Although the limitation that the chain depth cannot exceed a specified maximum depth prevents unbounded recursion and guarantees termination, an attacker-controlled certificate chain can lead the processing to easily take more than 5s to reject in testing. This amplification could form the basis for a resource exhaustion denial of service attack. The core issue arises in the recursive nature of build_chain_inner, which does not de-duplicate against previously analyzed candidates. As the correctness of validation is not affected, the integrity of a system cannot be compromised through this vector, only its availability. This issue is fixed in 49.0.0.(CVE-2026-69249)

Record
OESA-2026-3459
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/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-02
OSVPYSEC-2026-3553 8.7

python-cryptography: Duplicate self-signed intermediates can cause exponential path-building

Summary

When resolving invalid certificate chains that include duplicate copies of self-signed certificates, the processing recursively invokes the same candidate, leading to an exponential blowup. Although the limitation that the chain depth cannot exceed a specified maximum depth prevents unbounded recursion and guarantees termination, an attacker-controlled certificate chain can lead the processing to easily take more than 5s to reject in testing. This amplification could form the basis for a resource exhaustion denial of service attack.

This work was completed by Trail of Bits as part of the Patch The Planet project in collaboration with OpenAI. The finding was identified primarily by the Codex coding agent, and manually reviewed before submission.

Details

The core issue arises in the recursive nature of build_chain_inner, which does not de-duplicate against previously analyzed candidates.

    fn build_chain_inner(
        &self,
        working_cert: &VerificationCertificate<'chain, B>,
        current_depth: u8,
        working_cert_extensions: &Extensions<'chain>,
        name_chain: NameChain<'_, 'chain>,
        budget: &mut Budget,
    ) -> ValidationResult<'chain, Chain<'chain, B>, B> {
        if let Some(nc) = working_cert_extensions.get_extension(&NAME_CONSTRAINTS_OID) {
            name_chain.evaluate_constraints(&nc.value()?, budget)?;
        }

        // Look in the store's root set to see if the working cert is listed.
        // If it is, we've reached the end.
        if self.store.contains(working_cert) {
            return Ok(vec![working_cert.clone()]);
        }

        // Check that our current depth does not exceed our policy-configured
        // max depth. We do this after the root set check, since the depth
        // only measures the intermediate chain's length, not the root or leaf.
        if current_depth > self.policy.max_chain_depth {
            return Err(ValidationError::new(ValidationErrorKind::Other(
                "chain construction exceeds max depth".into(),
            )));
        }

        // Otherwise, we collect a list of potential issuers for this cert,
        // and continue with the first that verifies.
        let mut last_err: Option<ValidationError<'_, B>> = None;
        for issuing_cert_candidate in self.potential_issuers(working_cert) {
            // A candidate issuer is said to verify if it both
            // signs for the working certificate and conforms to the
            // policy.
            let issuer_extensions = issuing_cert_candidate.certificate().extensions()?;
            match self.policy.valid_issuer(
                issuing_cert_candidate,
                working_cert,
                current_depth,
                &issuer_extensions,
            ) {
                Ok(_) => {
                    match self.build_chain_inner(

A sufficient patch is to track valid issuers, and to skip seen ones before recursing. By tracking valid issuers only, validation and custom extension-policy callbacks still run.

          let mut seen_valid_issuers = Vec::<&VerificationCertificate<'chain, B>>::new();
          for issuing_cert_candidate in self.potential_issuers(working_cert) {
          . . .
                  Ok(_) => {
                      if seen_valid_issuers.contains(&issuing_cert_candidate) {
                         continue;
                      }
                      seen_valid_issuers.push(issuing_cert_candidate);
 
                      match self.build_chain_inner(
                          issuing_cert_candidate,
                          // NOTE(ww): According to RFC 5280, we should only

In testing, this fix removed the exponential blowup without breaking apparent correctness.

duplicates,max_depth,result,seconds
1,7,rejected,0.000464 -> 1,7,rejected,0.000667
2,7,rejected,0.025154 -> 2,7,rejected,0.001229
3,7,rejected,0.489924 -> 3,7,rejected,0.001619 
4,7,rejected,4.309403 ->…
Record
PYSEC-2026-3553
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
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 CriticalCVSS: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 HighCVSS: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 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Updated
2026-11-02
OSVRHSA-2026:71658 7.5

Red Hat Security Advisory: python-cryptography security update

Record
RHSA-2026:71658
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Updated
2026-11-02
OSVRHSA-2026:71659 7.5

Red Hat Security Advisory: python-cryptography security update

Record
RHSA-2026:71659
CVSS 3.1
7.5 HighCVSS: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 HighCVSS: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 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Updated
2026-11-02
OSVRLSA-2026:71658 7.5

Important: python-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)

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:71658
CVSS 3.1
7.5 HighCVSS: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-69249 8.7

python-cryptography is a package designed to expose cryptographic primitives and recipes to Python developers. In versions 42.0.0 through 48.0.0, when resolving invalid certificate chains that include duplicate copies of self-signed certificates, the processing recursively invokes the same candidate, leading to an exponential blowup. Although the limitation that the chain depth cannot exceed a specified maximum depth prevents unbounded recursion and guarantees termination, an attacker-controlled certificate chain can lead the processing to easily take more than 5s to reject in testing. This amplification could form the basis for a resource exhaustion denial of service attack. The core issue arises in the recursive nature of build_chain_inner, which does not de-duplicate against previously analyzed candidates. As the correctness of validation is not affected, the integrity of a system cannot be compromised through this vector, only its availability. This issue is fixed in 49.0.0.

Record
UBUNTU-CVE-2026-69249
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
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
OSVALSA-2026:71658 No score

Important: python-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)

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:71658
Updated
2026-11-02
OSVAZL-94584 No score

CVE-2026-69249 affecting package python-cryptography for versions less than 42.0.5-6

python-cryptography is a package designed to expose cryptographic primitives and recipes to Python developers. In versions 42.0.0 through 48.0.0, when resolving invalid certificate chains that include duplicate copies of self-signed certificates, the processing recursively invokes the same candidate, leading to an exponential blowup. Although the limitation that the chain depth cannot exceed a specified maximum depth prevents unbounded recursion and guarantees termination, an attacker-controlled certificate chain can lead the processing to easily take more than 5s to reject in testing. This amplification could form the basis for a resource exhaustion denial of service attack. The core issue arises in the recursive nature of build_chain_inner, which does not de-duplicate against previously analyzed candidates. As the correctness of validation is not affected, the integrity of a system cannot be compromised through this vector, only its availability. This issue is fixed in 49.0.0.

Record
AZL-94584
Updated
2026-11-05
OSVCLSA-2026-1788513782 No score

TuxCare security update for cryptography (2 CVEs)

TuxCare rebuilt cryptography to address 2 CVEs. Fixed in 46.0.7.post2+tuxcare.

Record
CLSA-2026-1788513782
Updated
2026-11-02
OSVCLSA-2026-1789017625 No score

TuxCare security update for cryptography (2 CVEs)

TuxCare rebuilt cryptography to address 2 CVEs. Fixed in 45.0.7.post4+tuxcare.

Record
CLSA-2026-1789017625
Updated
2026-11-02
OSVCLSA-2026-1789365078 No score

TuxCare security update for cryptography (2 CVEs)

TuxCare rebuilt cryptography to address 2 CVEs. Fixed in 44.0.3.post4+tuxcare.

Record
CLSA-2026-1789365078
Updated
2026-11-02
OSVCLSA-2026-1789377631 No score

TuxCare security update for cryptography (1 CVE)

TuxCare rebuilt cryptography to address 1 CVE. Fixed in 43.0.1.post2+tuxcare.

Record
CLSA-2026-1789377631
Updated
2026-11-02
OSVCLSA-2026-1789377744 No score

TuxCare security update for cryptography (1 CVE)

TuxCare rebuilt cryptography to address 1 CVE. Fixed in 42.0.8.post3+tuxcare.

Record
CLSA-2026-1789377744
Updated
2026-11-02
OSVCLSA-2026-1789379340 No score

TuxCare security update for cryptography (1 CVE)

TuxCare rebuilt cryptography to address 1 CVE. Fixed in 42.0.0.post2+tuxcare.

Record
CLSA-2026-1789379340
Updated
2026-11-02
OSVCLSA-2026-1789552762 No score

TuxCare security update for cryptography (1 CVE)

TuxCare rebuilt cryptography to address 1 CVE. Fixed in 43.0.3.post4+tuxcare.

Record
CLSA-2026-1789552762
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 EnvelopedData decryption 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-69249 No score

CVE-2026-69249 in cryptography - Patched by Root

Root has patched CVE-2026-69249 in the cryptography package for Root:PyPI. Multiple fixed versions available.

Record
ROOT-APP-PYPI-CVE-2026-69249
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 EnvelopedData decryption 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 EnvelopedData decryption 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

Affected packages
PackageAffectedFixed
cryptography
PyPI
42.0.0 up to 49.0.0
49.0.0
python3.14-cryptography
AlmaLinux:9
From an advisory covering 2 CVEs
before 45.0.4-4.el9_8.6
45.0.4-4.el9_8.6
python3.14-cryptography
AlmaLinux:10
From an advisory covering 2 CVEs
before 45.0.4-4.el10_2.5
45.0.4-4.el10_2.5
python3-cryptography
AlmaLinux:10
before 43.0.0-4.el10_2.5
43.0.0-4.el10_2.5
python-cryptography
Azure Linux:3
before 42.0.5-6
42.0.5-6
cryptography
TuxCare:PyPI
From an advisory covering 2 CVEs
46.0.7 up to 46.0.7.post2+tuxcare, plus listed versions
46.0.7.post1+tuxcare
46.0.7.post2+tuxcare
cryptography
TuxCare:PyPI
From an advisory covering 2 CVEs
45.0.7 up to 45.0.7.post4+tuxcare, plus listed versions
45.0.7.post1+tuxcare45.0.7.post2+tuxcare45.0.7.post3+tuxcare
45.0.7.post4+tuxcare
cryptography
TuxCare:PyPI
From an advisory covering 2 CVEs
44.0.3 up to 44.0.3.post4+tuxcare, plus listed versions
44.0.3.post1+tuxcare44.0.3.post2+tuxcare44.0.3.post3+tuxcare
44.0.3.post4+tuxcare
cryptography
TuxCare:PyPI
43.0.1 up to 43.0.1.post2+tuxcare, plus listed versions
43.0.1.post1+tuxcare
43.0.1.post2+tuxcare
cryptography
TuxCare:PyPI
42.0.8 up to 42.0.8.post3+tuxcare, plus listed versions
42.0.8.post1+tuxcare42.0.8.post2+tuxcare
42.0.8.post3+tuxcare
Show 39 moreShow less
Affected packages
PackageAffectedFixed
cryptography
TuxCare:PyPI
42.0.0 up to 42.0.0.post2+tuxcare, plus listed versions
42.0.0.post1+tuxcare
42.0.0.post2+tuxcare
cryptography
TuxCare:PyPI
43.0.3 up to 43.0.3.post4+tuxcare, plus listed versions
43.0.3.post1+tuxcare43.0.3.post2+tuxcare43.0.3.post3+tuxcare
43.0.3.post4+tuxcare
python-cryptography
Debian: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 less
41.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-cryptography
Debian: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 less
45.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-cryptography
Debian: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 less
45.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
cryptography
PyPI
42.0.0 up to 49.0.0, plus listed versions
42.0.142.0.242.0.342.0.442.0.5
Show 29 moreShow less
42.0.642.0.742.0.843.0.043.0.143.0.344.0.044.0.144.0.244.0.345.0.045.0.145.0.245.0.345.0.445.0.545.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
python-cryptography
openEuler:24.03-LTS-SP3
before 42.0.2-10.oe2403sp3
42.0.2-10.oe2403sp3
python-cryptography
openEuler:24.03-LTS-SP4
before 42.0.2-10.oe2403sp4
42.0.2-10.oe2403sp4
python-cryptography
openEuler:24.03-LTS-SP1
before 42.0.2-10.oe2403sp1
42.0.2-10.oe2403sp1
cryptography
PyPI
before 49.0.0, plus listed versions
0.10.20.2.10.2.20.3
Show 45 moreShow less
0.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-cryptography
Red Hat:hummingbird:1
From an advisory covering 24 CVEs
before 0:50.0.0-1.hum1
0:50.0.0-1.hum1
python3-cryptography
Red Hat:hummingbird:1
From an advisory covering 24 CVEs
before 0:50.0.0-1.hum1
0:50.0.0-1.hum1
python3.14-cryptography
Red 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-debuginfo
Red 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-debugsource
Red 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
Red 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-debuginfo
Red 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-debugsource
Red 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
python-cryptography
Red Hat:enterprise_linux:10.2
before 0:43.0.0-4.el10_2.5
0:43.0.0-4.el10_2.5
python-cryptography-debugsource
Red Hat:enterprise_linux:10.2
before 0:43.0.0-4.el10_2.5
0:43.0.0-4.el10_2.5
python3-cryptography
Red Hat:enterprise_linux:10.2
before 0:43.0.0-4.el10_2.5
0:43.0.0-4.el10_2.5
python3-cryptography-debuginfo
Red Hat:enterprise_linux:10.2
before 0:43.0.0-4.el10_2.5
0:43.0.0-4.el10_2.5
python-cryptography
Red Hat:enterprise_linux_eus:10.0
before 0:43.0.0-4.el10_0.1
0:43.0.0-4.el10_0.1
python-cryptography-debugsource
Red Hat:enterprise_linux_eus:10.0
before 0:43.0.0-4.el10_0.1
0:43.0.0-4.el10_0.1
python3-cryptography
Red Hat:enterprise_linux_eus:10.0
before 0:43.0.0-4.el10_0.1
0:43.0.0-4.el10_0.1
python3-cryptography-debuginfo
Red Hat:enterprise_linux_eus:10.0
before 0:43.0.0-4.el10_0.1
0:43.0.0-4.el10_0.1
python3.14-cryptography
Rocky 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-cryptography
Rocky 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
python-cryptography
Rocky Linux:10
before 0:43.0.0-4.el10_2.5
0:43.0.0-4.el10_2.5
cryptography
Root:PyPI
before 48.0.0+aikido.4
48.0.0+aikido.446.0.7+aikido.446.0.6+aikido.546.0.5+aikido.736.0.1+aikido.746.0.3+aikido.844.0.0+aikido.243.0.1+aikido.745.0.7+aikido.541.0.3+aikido.345.0.5+aikido.946.0.1+aikido.646.0.3+aikido.944.0.0+aikido.343.0.1+aikido.848.0.0+aikido.548.0.1+aikido.346.0.7+aikido.246.0.7+aikido.344.0.0+aikido.145.0.5+aikido.745.0.5+aikido.836.0.1+aikido.646.0.5+aikido.645.0.7+aikido.446.0.3+aikido.746.0.1+aikido.548.0.0+aikido.346.0.6+aikido.443.0.1+aikido.641.0.3+aikido.241.0.3+aikido.448.0.1+aikido.448.0.0+aikido.643.0.1+aikido.944.0.0+aikido.445.0.5+aikido.1045.0.7+aikido.636.0.1+aikido.846.0.1+aikido.746.0.7+aikido.546.0.5+aikido.846.0.6+aikido.646.0.3+aikido.1047.0.0+aikido.546.0.4+aikido.7
python-cryptography
SUSE: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-cryptography
SUSE:Linux Micro 6.0
From an advisory covering 2 CVEs
before 42.0.4-6.1
42.0.4-6.1
python-cryptography
SUSE:Linux Micro 6.2
From an advisory covering 3 CVEs
before 44.0.3-160000.5.1
44.0.3-160000.5.1
python-cryptography
SUSE: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-cryptography
SUSE: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-cryptography
Ubuntu: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-cryptography
Ubuntu: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 less
2.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-cryptography
Ubuntu: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
python-cryptography
openSUSE:Leap 16.0
From an advisory covering 3 CVEs
before 44.0.3-160000.5.1
44.0.3-160000.5.1

History

History
RecordedChangedSources
affected
factsOSV
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

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

In short

CVE-2026-69249 is a high vulnerability (CVSS 8.7) 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.26%, the 18th percentile. Fixed in cryptography 49.0.0.

References

Show 154 moreShow less
This page doesn't list everything

Left out here: 106 versions and the rest of 3 source descriptions. The JSON record has them.

MoveEnter Open