Every CVE Search/ Get API key

CVE-2026-45389

In OCaml-TLS before 2.1.0, the server implementation does insufficient checks of the certificate...

7.4 HighFix available

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

0.19%Up 0.1 points since Jun 16, 2026
90%50%10%1%

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 HighCVSS: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 HighCVSS: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 CriticalCVSS: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 HighCVSS: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:

  1. Operator runs ocaml-tls with authenticator = Some X509.Authenticator.chain_of_trust <internal root CA>.
  2. Attacker initiates a TLS handshake with the listener, presenting their existing serverAuth-only leaf in the Certificate message.
  3. validateCerts (handshake_server.ml) or answerClientCertificate (handshake_server13.ml) call validateChain, which passes.
  4. CertificateVerify arrives, validates. Handshake completes.
  5. 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 HighCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
Updated
2026-11-06

Affected packages

Affected packages
PackageAffectedFixed
tls
opam
before 2.1.0, plus listed versions
0.1.00.2.00.3.00.4.00.5.0
Show 45 moreShow less
0.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

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-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

This page doesn't list everything

Left out here: 4 versions and the rest of 1 source description. The JSON record has them.

MoveEnter Open