CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



GHSA-27JC-JMP8-QFW5

Trust No One (Except Everyone): The Keylime mTLS Bypass

Alon Barad
Alon Barad
Software Engineer

Feb 7, 2026·4 min read·62 visits

Executive Summary (TL;DR)

Keylime's Registrar component (v7.12.x-7.13.0) explicitly set SSL verification to 'Optional', effectively disabling mTLS authentication. Attackers could list, query, and delete TPM agent registrations without credentials.

For a framework dedicated to establishing the Root of Trust in hostile cloud environments, Keylime briefly forgot to verify who was knocking at the door. A critical misconfiguration in the Registrar component turned mandatory mutual TLS (mTLS) into a polite suggestion, allowing unauthenticated attackers to manipulate the attestation database.

The Hook: Who Watches the Watchmen?

In the world of Cloud Native computing, you can't trust the hardware you're running on. That's where Keylime comes in. It is the CNCF's heavy hitter for remote attestation—a fancy way of using a Trusted Platform Module (TPM) to mathematically prove that a server hasn't been tampered with before you send it your secrets.

The Keylime architecture relies on three pillars: the Agent (running on the node), the Verifier (checking the TPM quotes), and the Registrar. Think of the Registrar as the secure phonebook. It's the first place an Agent calls home to drop off its public keys (Endorsement Key and Attestation Identity Key). If you compromise the Registrar, you can disrupt the chain of trust before it even begins.

Usually, Keylime is paranoid. It uses Mutual TLS (mTLS) for everything. The Agent needs a cert, the Verifier needs a cert, and the Registrar needs a cert. It's a zero-trust party where everyone checks ID at the door. Or at least, it was supposed to be.

The Flaw: The Polite Bouncer

The vulnerability (CVE-2026-1709) is a classic case of 'Explicit is better than Implicit, unless you explicitly choose the wrong setting.'

In Python's ssl module, SSLContext.verify_mode controls how the server treats client certificates. A secure mTLS setup requires ssl.CERT_REQUIRED. This tells the server: 'If the client doesn't show a valid certificate signed by our CA, hang up immediately.'

However, in Keylime versions 7.12.0 through 7.13.0, the code was changed to use ssl.CERT_OPTIONAL. In the documentation, this mode sounds harmless enough: it asks for a certificate if the client has one. But the fatal nuance is what happens when the client doesn't have one. With CERT_OPTIONAL, the handshake succeeds anonymously.

It's like a bouncer at a club who asks for ID, but if you just shrug and say 'I left it at home,' he lets you in anyway. The authentication logic downstream assumed that if a connection existed, it must have been authenticated. It was not.

The Code: One Line to Break It All

Let's look at the smoking gun in keylime/web/base/server.py. The developers had a perfectly good helper function, web_util.init_mtls, which presumably set up the context correctly. But then, they manually overrode it.

Here is the diff that fixed the issue. Notice the line being removed:

# keylime/web/base/server.py
 
  self._ssl_ctx = web_util.init_mtls(component)
- self._ssl_ctx.verify_mode = CERT_OPTIONAL

That single line, - self._ssl_ctx.verify_mode = CERT_OPTIONAL, was the kill switch for authentication. It effectively downgraded the Registrar's API from a fortress to a public library. By removing this line in the patch, the _ssl_ctx reverts to the default secure settings defined in init_mtls, which enforces CERT_REQUIRED.

The Exploit: Knock Knock, Who's There? (Nobody)

Exploiting this does not require heap spraying, ROP chains, or race conditions. You just need curl and a lack of manners.

Normally, to talk to the Registrar, you'd need a command like this:

curl --cert client.crt --key client.key --cacert ca.crt https://registrar:8891/v2/agents/

But thanks to CERT_OPTIONAL, an attacker on the same network can simply do:

# The --insecure flag here just ignores the server's cert validity,
# but crucially, we are NOT providing a client cert.
curl --insecure https://registrar:8891/v2/agents/

The Result: Instead of a 401 Unauthorized or a TLS handshake failure, the server happily responds with a JSON list of all registered agents and their statuses.

From there, the attacker can:

  1. Recon: List every node in the cluster.
  2. Intel: Query specific UUIDs (/v2/agents/{uuid}) to grab public keys.
  3. Destruction: Issue a DELETE request to /v2/agents/{uuid}. This deregisters the node. When the Verifier next tries to attest that node, it will fail, likely causing the orchestration layer (Kubernetes/OpenShift) to mark the node as untrusted and terminate workloads. It is a trivial Denial of Service against the infrastructure's trust layer.

The Mitigation: Lock the Door

If you are running Keylime 7.12.x or 7.13.0, you are vulnerable. The fix is straightforward:

  1. Patch Immediately: Upgrade to 7.12.2 or 7.13.1. These versions remove the dangerous CERT_OPTIONAL override.
  2. Network Segmentation: Why is your management interface exposed to the general network? Restrict access to port 8891. Only the Tenant CLI and the Agents need to talk to the Registrar. Firewall everything else.
  3. Reverse Proxy: If you can't patch immediately, place an Nginx or HAProxy instance in front of the Registrar. Configure the proxy to enforce ssl_verify_client on; (in Nginx) and forward the traffic only if the certificate is valid.

Official Patches

KeylimeGitHub Commit fixing the issue

Fix Analysis (1)

Technical Appendix

CVSS Score
9.4/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
EPSS Probability
0.04%
Top 100% most exploited

Affected Systems

Keylime Registrar

Affected Versions Detail

Product
Affected Versions
Fixed Version
keylime
Keylime (CNCF)
>= 7.12.0, < 7.12.27.12.2
keylime
Keylime (CNCF)
== 7.13.07.13.1
AttributeDetail
CVECVE-2026-1709
CVSS v3.19.4 (Critical)
CWECWE-287 (Improper Authentication)
VectorAV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
PlatformPython (Tornado/SSL)
ImpactAuth Bypass / DoS

MITRE ATT&CK Mapping

T1553Subvert Trust Controls
Defense Evasion
T1040Network Sniffing
Credential Access
T1498Network Denial of Service
Impact
CWE-287
Improper Authentication

Improper Authentication

Known Exploits & Detection

ManualExploitation involves using standard TLS clients (curl, python-requests) without client certificates.

Vulnerability Timeline

Fix committed to Keylime repository
2026-02-04
CVE-2026-1709 Published
2026-02-06
GHSA Advisory Published
2026-02-06

References & Sources

  • [1]GitHub Advisory GHSA-4jqp-9qjv-57m2
  • [2]NVD - CVE-2026-1709

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•6 days ago•CVE-2026-87697
8.8

CVE-2026-87697: Untrusted Deserialization in .NET PresentationCore Clipboard Handling

A remote code execution vulnerability exists in Microsoft .NET due to untrusted data deserialization within the PresentationCore component. The flaw stems from implicit auto-conversion flags during clipboard data retrieval operations.

Alon Barad
Alon Barad
25 views•5 min read
•6 days ago•CVE-2026-70007
8.8

CVE-2026-70007: Out-of-Bounds Write Vulnerability in .NET Framework and WPF Subsystem

An out-of-bounds write vulnerability in Microsoft .NET Framework, .NET runtime, and Visual Studio allows unauthenticated remote attackers to execute arbitrary code via crafted pixel-shader bytecode or auto-converted clipboard payloads.

Amit Schendel
Amit Schendel
12 views•6 min read
•6 days ago•CVE-2026-70186
7.5

CVE-2026-70186: ASP.NET Core Denial of Service Vulnerability via Framework Deadlock

ASP.NET Core contains a thread deadlock vulnerability (CWE-833) that allows an unauthenticated remote attacker to cause a denial of service over the network by exhausting server thread pool resources.

Amit Schendel
Amit Schendel
15 views•5 min read
•6 days ago•CVE-2026-70035
8.8

CVE-2026-70035: Insecure Deserialization Remote Code Execution in Microsoft .NET Framework and .NET Runtime

CVE-2026-70035 is a high-severity Remote Code Execution (RCE) vulnerability in Microsoft .NET Framework, .NET runtime, and Visual Studio caused by improper handling during the deserialization of untrusted data (CWE-502). An unauthenticated attacker can execute arbitrary code within the context of the affected process by delivering a crafted serialized payload.

Amit Schendel
Amit Schendel
18 views•6 min read
•6 days ago•CVE-2026-70183
7.5

CVE-2026-70183: Elevation of Privilege in ASP.NET Core and Visual Studio via Concurrent Race Condition

An elevation of privilege vulnerability exists in ASP.NET Core and Microsoft Visual Studio due to improper synchronization during concurrent thread execution. Authenticated remote attackers with low privileges can exploit a timing window to manipulate shared resources and assume higher-level execution contexts.

Alon Barad
Alon Barad
18 views•5 min read
•9 days ago•CVE-2026-107844
5.3

CVE-2026-107844: Path Traversal Vulnerability in Contao ImagesController

A path traversal vulnerability (CWE-22) in Contao CMS allows unauthenticated remote attackers to bypass directory boundary restrictions in ImagesController and access files within the project directory.

Amit Schendel
Amit Schendel
23 views•5 min read