CVE-2026-45389
In OCaml-TLS before 2.1.0, the server implementation does insufficient checks of the certificate...
In OCaml-TLS before 2.1.0, the server implementation does insufficient checks of the certificate provided by the client (when doing client authentication), which allows impersonation with certificates that are not meant for client authentication (because of KeyUsage and ExtendedKeyUsage).
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- High
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
7.4
In OCaml-TLS before 2.1.0, the server implementation does insufficient checks of the certificate provided by the client (when doing client authentication), which allows impersonation with certificates that are not meant for client authentication (because of KeyUsage and ExtendedKeyUsage).
- Record
CVE-2026-45389- CVSS 3.1
- 7.4 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N - Weakness
- CWE-295
- Updated
- 2026-11-02
EUVDEUVD-2026-36765
7.4
In OCaml-TLS before 2.1.0, the server implementation does insufficient checks of the certificate provided by the client (when doing client authentication), which allows impersonation with certificates that are not meant for client authentication (because of KeyUsage and ExtendedKeyUsage).
- Record
EUVD-2026-36765- CVSS 3.1
- 7.4 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-8wf9-g5q8-gg97
9.1
In OCaml-TLS before 2.1.0, the server implementation does insufficient checks of the certificate...
In OCaml-TLS before 2.1.0, the server implementation does insufficient checks of the certificate provided by the client (when doing client authentication), which allows impersonation with certificates that are not meant for client authentication (because of KeyUsage and ExtendedKeyUsage).
- Record
GHSA-8wf9-g5q8-gg97- 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 - Weakness
- CWE-295
- Updated
- 2026-11-02
NVD
7.4
In OCaml-TLS before 2.1.0, the server implementation does insufficient checks of the certificate provided by the client (when doing client authentication), which allows impersonation with certificates that are not meant for client authentication (because of KeyUsage and ExtendedKeyUsage).
- Record
CVE-2026-45389- CVSS 3.1
- 7.4 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N - Weakness
- CWE-295
- Updated
- 2026-11-02
OSVOSEC-2026-07
7.4
TLS-server does insufficient client certificate checks (missing KeyUsage and ExtendedKeyUsage validation)
The TLS server implementation does not validate the KeyUsage and ExtendedKeyUsage extensions of client certificates when mutually authenticated TLS is requested. This can lead to impersonation with a certificate issued to a server.
Scenario
An operations engineer enables mTLS on the admin endpoint of a banking service. The setup is canonical: provide an authenticator on the ocaml-tls listener. She believes the gate is now set: only certificates issued under the corporate root, intended for client authentication, can authenticate at the admin endpoint.
An attacker inside the same corporate trust domain holds the legitimate TLS server cert for some internal HTTPS service they administer. The cert is real, signed by the corporate root, valid, not revoked. Its Extended Key Usage extension lists id-kp-serverAuth and nothing else — the cert was issued for serving HTTPS, not for authenticating clients. The X.509 RFC says exactly that distinction: a cert's role is constrained by its EKU, and a serverAuth-only cert is not authorised to act as a client.
The attacker presents that cert to the bank's ocaml-tls mTLS listener. The hook fires, the chain validates against the corporate root. The ocaml-tls library's does neither check that the presented certificate includes digitalSignature in its keyUsage, neither looks that clientAuth is present in the ExtendedKeyUsage. The handshake completes. The attacker is now authenticated as a client at the bank's admin endpoint, holding a cert the corporate CA never authorised for client identity. Every server cert under the same trust store is an mTLS client cert at this listener — with no further coordination, no compromise of the CA, and no compromise of any legitimate client.
The catastrophic deployment shape is the operator who puts Mozilla's public-PKI trust store on the mTLS-server side. There, every public TLS server certificate in the world — every Let's Encrypt cert, every DigiCert cert, anything an attacker can buy or freely issue for any domain they control — becomes an mTLS client cert at the listener, provided the application authorises identities by chain-validity alone rather than by post-validation CN/SAN gating. That branch reaches CVSS 9.1; the realistic dominant case is the corporate-internal-CA shape at 7.4.
Attack
Three actors: Operator (deploys ocaml-tls with mTLS for access control), Attacker (holds a CA-signed TLS server cert under a CA the operator's mTLS listener trusts), Server (the ocaml-tls listener serving the admin endpoint).
Corporate CA (in ocaml-tls trust store; also issues the Operator's internal HTTPS server certs)
│
├──▶ Operator's internal HTTPS service
│ cert: EKU={serverAuth}, used legitimately as TLS server
│
└──▶ Attacker (admins one of those internal HTTPS services)
cert: EKU={serverAuth} (legitimate)
key: in attacker's possession (legitimately)
Attacker presents own server cert as a client cert to:
Operator's ocaml-tls mTLS listener → HTTP 200 OK
Sequence:
- Operator runs ocaml-tls with
authenticator = Some X509.Authenticator.chain_of_trust <internal root CA>. - Attacker initiates a TLS handshake with the listener, presenting their existing serverAuth-only leaf in the
Certificatemessage. validateCerts(handshake_server.ml) oranswerClientCertificate(handshake_server13.ml) callvalidateChain, which passes.CertificateVerifyarrives, validates. Handshake completes.- WAI delivers the HTTP request to the application. The application reads the cert subject (CN, SAN) and treats it as the authenticated client identity for downstream authorization, audit logging, session binding.
Attack properties:
- The attacker needs a CA-signed leaf with EKU
{serverAuth}only, chained to a CA the listener trusts for client auth. The realistic corporate-internal-CA case: the…
- Record
OSEC-2026-07- CVSS 3.1
- 7.4 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N - Updated
- 2026-11-06
Affected packages
| Package | Affected | Fixed |
|---|---|---|
tlsopam |
before 2.1.0, plus listed versions 0.1.00.2.00.3.00.4.00.5.0 Show 45 moreShow less0.6.00.7.00.7.10.8.00.9.00.9.10.9.20.9.30.10.10.10.20.10.30.10.40.10.50.10.60.11.00.11.10.12.00.12.10.12.20.12.30.12.40.12.50.12.60.12.70.12.80.13.00.13.10.13.20.14.00.14.10.15.00.15.10.15.20.15.30.15.40.16.00.17.00.17.10.17.30.17.40.17.51.0.01.0.21.0.42.0.0 |
2.1.0 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, facts | 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-45389 is a high vulnerability (CVSS 7.4) in tls, published May 20, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.19%, the 8th percentile. Fixed in tls 2.1.0.
References
Left out here: 4 versions and the rest of 1 source description. The JSON record has them.