CVE-2026-89135 Overview
CVE-2026-89135 is a certificate validation flaw in wolfSSL affecting versions 5.8.4 through 5.9.2. A failed X509_verify_cert call permanently plants an unverified attacker-controlled Certificate Authority (CA) in the shared CertManager. All type-blind sibling consumers that rely on the same manager, including native Transport Layer Security (TLS), Online Certificate Status Protocol (OCSP), Certificate Revocation List (CRL), and direct CertManager verify paths, inherit the poisoned trust store. The flaw is tracked under CWE-295: Improper Certificate Validation.
Critical Impact
An attacker who can present a crafted certificate chain to any application that calls X509_verify_cert can inject an untrusted CA into the shared CertManager, enabling subsequent TLS, OCSP, and CRL operations to accept forged certificates.
Affected Products
- wolfSSL 5.8.4 through 5.9.2
- Builds with OPENSSL_EXTRA && !NO_CERTS && !WOLFCRYPT_ONLY macros defined
- Builds configured with --enable-opensslextra that invoke X509_verify_cert
Discovery Timeline
- 2026-09-27 - CVE-2026-89135 published to the National Vulnerability Database (NVD)
- 2026-09-29 - Last updated in NVD database
Technical Details for CVE-2026-89135
Vulnerability Analysis
The vulnerability resides in the OpenSSL compatibility layer path exercised by X509_verify_cert. When verification fails, intermediate CA material supplied by the caller is not rolled back from the shared CertManager structure. The CA entry remains loaded and marked usable for subsequent chain validations.
Because the CertManager is shared across protocol handlers, every consumer that performs trust decisions through the same manager inherits the poisoned state. This includes native wolfSSL TLS handshakes, OCSP responder validation, CRL signature checks, and direct wolfSSL_CertManagerVerify calls. The downstream consumers do not differentiate between CAs added through configuration and CAs introduced through a failed verification attempt.
The scope is bounded by build configuration. Applications compiled without OPENSSL_EXTRA, or those that avoid the compatibility API entirely, are not reachable through this code path. See the upstream wolfSSL Pull Request #11009 for the corrective change.
Root Cause
The root cause is missing cleanup of untrusted CA entries after X509_verify_cert returns a failure code. The function treats intermediate certificate insertion as a persistent side effect rather than a transaction scoped to the verification attempt. There is no type discrimination preventing sibling consumers from honoring these transient entries as fully trusted anchors.
Attack Vector
An attacker who can trigger a certificate verification against an application-supplied chain can embed a self-signed or attacker-controlled CA in the chain. The initial X509_verify_cert call fails as expected. The injected CA, however, persists in the CertManager. Any later TLS handshake, OCSP lookup, or CRL verification performed by the same process will treat certificates signed by the attacker CA as valid.
Exploitation requires network reachability to an application endpoint that processes attacker-supplied certificate material and later performs trust decisions through the same CertManager instance. Full exploitation details are described in the referenced wolfSSL pull request.
Detection Methods for CVE-2026-89135
Indicators of Compromise
- Unexpected CA subjects appearing in CertManager enumerations or logs for processes linking wolfSSL 5.8.4 through 5.9.2.
- Successful TLS, OCSP, or CRL verifications against certificates whose issuers were never provisioned in the application trust store.
- Application logs showing X509_verify_cert failures immediately followed by successful handshakes to previously untrusted peers.
Detection Strategies
- Inventory binaries and containers linking wolfSSL and confirm the version string and build flags, specifically OPENSSL_EXTRA and --enable-opensslextra.
- Instrument applications to log the full issuer chain accepted during TLS handshakes and compare against the configured trust anchors.
- Correlate repeated certificate verification failures with subsequent successful sessions from the same remote peer within short time windows.
Monitoring Recommendations
- Capture network telemetry on TLS endpoints served by wolfSSL-based applications and alert on handshakes negotiated with unknown issuer Distinguished Names (DNs).
- Monitor process memory or runtime diagnostics for growth in loaded CA counts within long-running wolfSSL processes.
- Forward application and TLS logs to a centralized data lake for cross-session correlation of verification outcomes.
How to Mitigate CVE-2026-89135
Immediate Actions Required
- Identify all deployments running wolfSSL 5.8.4 through 5.9.2 built with --enable-opensslextra and invoking X509_verify_cert.
- Upgrade to a wolfSSL release that incorporates the fix from wolfSSL Pull Request #11009.
- Restart long-running processes after upgrade to flush any CertManager state accumulated prior to patching.
Patch Information
The corrective change is tracked in wolfSSL Pull Request #11009. The patch removes untrusted CA material from the shared CertManager when X509_verify_cert fails, preventing cross-consumer poisoning. Apply the upstream fix and rebuild all dependent applications.
Workarounds
- Rebuild wolfSSL without OPENSSL_EXTRA or --enable-opensslextra if the compatibility layer is not required.
- Refactor applications to avoid X509_verify_cert and perform validation through native wolfSSL APIs with a dedicated, non-shared CertManager.
- Isolate certificate verification into short-lived processes so that any poisoned state does not persist across sessions.
# Verify installed wolfSSL version and build options
wolfssl-config --version
wolfssl-config --cflags | grep -E 'OPENSSL_EXTRA|opensslextra'
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.