CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
Lifecycle Timeline
4Description
Calling Verify with a VerifyOptions.KeyUsages that contains ExtKeyUsageAny unintentionally disabledpolicy validation. This only affected certificate chains which contain policy graphs, which are rather uncommon.
Analysis
Certificate policy validation bypass in cryptographic verification routines where specifying ExtKeyUsageAny in VerifyOptions.KeyUsages inadvertently disables policy validation checks. This affects applications performing X.509 certificate chain verification, particularly those validating certificates containing policy constraint graphs (an uncommon but security-critical scenario). An attacker can present a malicious certificate chain that would normally be rejected due to policy violations, potentially enabling unauthorized certificate acceptance and compromising trust validation in PKI-dependent systems.
Technical Context
This vulnerability exists in certificate verification logic (likely Go's crypto/x509 package or similar cryptographic libraries) where the ExtKeyUsageAny constant, when included in VerifyOptions.KeyUsages parameters, creates an unintended code path that bypasses policy validation mechanisms. X.509 certificate policies (defined in RFC 5280) are constraints used in PKI hierarchies to ensure certificates conform to specific validation rules. The bug appears to be a logic error where the presence of ExtKeyUsageAny flag causes the verification routine to skip policy graph evaluation entirely, rather than properly handling the 'any' EKU designation alongside policy validation. The issue is particularly dangerous because policy constraints are a sophisticated but essential security control in enterprise and government PKI deployments, and their bypass is non-obvious to callers who may not expect ExtKeyUsageAny to affect policy validation at all.
Affected Products
Based on the technical nature (certificate verification with policy handling), the most likely affected product is Go's standard library crypto/x509 package (CPE: cpe:2.3:a:golang:go:*). The vulnerability likely affects all Go versions from an undisclosed vulnerable version through a specific patch version. Without vendor advisory references in the provided data, specific version ranges cannot be confirmed, but similar CVEs in Go typically affect versions spanning multiple minor releases. Other cryptographic libraries implementing X.509 verification (OpenSSL, BoringSSL, libcurl with x509 policy support, or NSS) may be similarly affected depending on their implementation. Applications using these libraries for certificate verification—including TLS servers, certificate validation utilities, OCSP responders, and PKI infrastructure components—inherit this vulnerability.
Remediation
1) IMMEDIATE: Update affected cryptographic libraries to patched versions (vendor must provide specific version numbers in advisory—typically next minor or patch release). 2) CODE-LEVEL FIX: Cease using ExtKeyUsageAny in VerifyOptions.KeyUsages parameters when policy validation is required; instead, explicitly enumerate required EKU values or omit the KeyUsages check if policies must be validated. 3) VALIDATION LOGIC: For applications validating certificates with policy constraints, audit code to ensure policy validation is not inadvertently disabled by EKU parameters. 4) TESTING: Add regression tests that verify policy constraints are enforced even when EKU parameters are specified. 5) TEMPORARY MITIGATION: If patching is delayed, implement external policy validation checks separate from the VerifyOptions path. Consult vendor (Go, OpenSSL, etc.) security advisories for exact patch versions and availability timelines.
Priority Score
Vendor Status
Ubuntu
Priority: Medium| Release | Status | Version |
|---|---|---|
| jammy | DNE | - |
| noble | DNE | - |
| oracular | DNE | - |
| plucky | DNE | - |
| upstream | needs-triage | - |
| questing | DNE | - |
| Release | Status | Version |
|---|---|---|
| xenial | needs-triage | - |
| jammy | DNE | - |
| noble | DNE | - |
| oracular | DNE | - |
| plucky | DNE | - |
| upstream | needs-triage | - |
| questing | DNE | - |
| Release | Status | Version |
|---|---|---|
| bionic | needs-triage | - |
| jammy | DNE | - |
| noble | DNE | - |
| oracular | DNE | - |
| plucky | DNE | - |
| upstream | needs-triage | - |
| questing | DNE | - |
| Release | Status | Version |
|---|---|---|
| bionic | needs-triage | - |
| jammy | DNE | - |
| noble | DNE | - |
| oracular | DNE | - |
| plucky | DNE | - |
| upstream | needs-triage | - |
| questing | DNE | - |
| Release | Status | Version |
|---|---|---|
| trusty | needs-triage | - |
| xenial | needs-triage | - |
| bionic | needs-triage | - |
| jammy | DNE | - |
| noble | DNE | - |
| oracular | DNE | - |
| plucky | DNE | - |
| upstream | needs-triage | - |
| questing | DNE | - |
| Release | Status | Version |
|---|---|---|
| xenial | needs-triage | - |
| bionic | needs-triage | - |
| focal | needs-triage | - |
| jammy | needs-triage | - |
| noble | DNE | - |
| oracular | DNE | - |
| plucky | DNE | - |
| upstream | needs-triage | - |
| questing | DNE | - |
| Release | Status | Version |
|---|---|---|
| focal | needs-triage | - |
| jammy | DNE | - |
| noble | DNE | - |
| oracular | DNE | - |
| plucky | DNE | - |
| upstream | needs-triage | - |
| questing | DNE | - |
| Release | Status | Version |
|---|---|---|
| bionic | needs-triage | - |
| focal | needs-triage | - |
| jammy | DNE | - |
| noble | DNE | - |
| oracular | DNE | - |
| plucky | DNE | - |
| upstream | needs-triage | - |
| questing | DNE | - |
| Release | Status | Version |
|---|---|---|
| jammy | needs-triage | - |
| noble | DNE | - |
| oracular | DNE | - |
| plucky | DNE | - |
| upstream | needs-triage | - |
| questing | DNE | - |
| Release | Status | Version |
|---|---|---|
| xenial | needs-triage | - |
| bionic | needs-triage | - |
| jammy | needs-triage | - |
| noble | DNE | - |
| oracular | DNE | - |
| plucky | DNE | - |
| upstream | needs-triage | - |
| focal | needs-triage | - |
| questing | DNE | - |
| Release | Status | Version |
|---|---|---|
| jammy | needs-triage | - |
| noble | DNE | - |
| oracular | DNE | - |
| plucky | DNE | - |
| upstream | needs-triage | - |
| focal | needs-triage | - |
| questing | DNE | - |
| Release | Status | Version |
|---|---|---|
| jammy | needs-triage | - |
| noble | needs-triage | - |
| oracular | DNE | - |
| plucky | DNE | - |
| upstream | needs-triage | - |
| focal | needs-triage | - |
| questing | DNE | - |
| Release | Status | Version |
|---|---|---|
| plucky | DNE | - |
| upstream | needs-triage | - |
| jammy | not-affected | code not present |
| noble | not-affected | code not present |
| oracular | not-affected | code not present |
| focal | needs-triage | - |
| questing | DNE | - |
| Release | Status | Version |
|---|---|---|
| jammy | needs-triage | - |
| noble | needs-triage | - |
| upstream | needs-triage | - |
| oracular | ignored | end of life, was needs-triage |
| questing | needs-triage | - |
| plucky | ignored | end of life, was needs-triage |
| Release | Status | Version |
|---|---|---|
| oracular | DNE | - |
| upstream | needs-triage | - |
| jammy | needs-triage | - |
| noble | needs-triage | - |
| questing | needs-triage | - |
| plucky | ignored | end of life, was needs-triage |
Debian
Bug #1107364| Release | Status | Fixed Version | Urgency |
|---|---|---|---|
| bullseye | fixed | 1.15.15-1~deb11u4 | - |
| (unstable) | not-affected | - | - |
| Release | Status | Fixed Version | Urgency |
|---|---|---|---|
| bookworm | fixed | 1.19.8-2 | - |
| (unstable) | not-affected | - | - |
| Release | Status | Fixed Version | Urgency |
|---|---|---|---|
| trixie | fixed | 1.24.4-1 | - |
| forky, sid | fixed | 1.24.13-2 | - |
| (unstable) | fixed | 1.24.4-1 | - |
| Release | Status | Fixed Version | Urgency |
|---|---|---|---|
| (unstable) | not-affected | - | - |
Share
External POC / Exploit Code
Leaving vuln.today
EUVD-2025-18136