Aug 19, 2026·6 min read·9 visits
A flaw in Netflix Lemur prior to v1.9.3 allows authenticated operators to bypass Server-Side Request Forgery (SSRF) protections. This is accomplished using DNS rebinding and HTTP redirects during certificate revocation checking (CRL/OCSP), exposing private VPC infrastructure and AWS instance metadata (IMDS).
A security vulnerability in Netflix Lemur, a TLS certificate management framework, allows authenticated operators to bypass Server-Side Request Forgery (SSRF) mitigations. The issue exists within the certificate revocation verification workflow, specifically inside the CRL and OCSP retrieval logic. By exploiting HTTP redirects or DNS rebinding (Time-of-Check Time-of-Use) mechanisms, an attacker can coerce the server into issuing arbitrary network requests to internal services, such as the cloud instance metadata service (IMDS) or loopback addresses. This bypass neutralizes previous network-boundary validation logic and allows blind read/write SSRF targeting internal infrastructure resources.
Netflix Lemur orchestrates TLS certificate creation, tracking, and validation within enterprise and cloud environments. Prior to version 1.9.3, the validation component tasked with verifying Certificate Revocation List (CRL) distribution points and Online Certificate Status Protocol (OCSP) endpoints, implemented in lemur/certificates/verify.py, contained fundamental architectural weaknesses.
These weaknesses permitted authenticated operators with certificate-upload privileges to upload custom certificates embedded with malicious, attacker-controlled revocation endpoints. This capability exposed an active internal attack surface, allowing attackers to query resources inside private network spaces (RFC1918) or loopback boundaries.
The vulnerability is classified under CWE-918 (Server-Side Request Forgery) and CWE-367 (Time-of-Check Time-of-Use Race Condition). By abusing these flaws, attackers can establish blind outbound connections to local ports, container management endpoints, or cloud provider metadata endpoints (e.g., AWS IMDS), bypassing previous mitigations established for CVE-2026-55162.
The primary flaw resides in the execution sequence of the URL validation mechanism (_validate_revocation_url) relative to the actual network connections initiated by Lemur.
First, during Certificate Revocation List (CRL) retrieval, the system executed the standard Python requests.get(url) function on the extracted CRL URL. Because the default configuration of the requests library follows HTTP redirects (such as 301, 302, 303, 307, and 308 responses) automatically, an attacker-controlled external domain could pass the initial IP validation phase and then redirect the client connection to an internal address like 169.254.169.254 or 127.0.0.1.
Second, the validation workflow was vulnerable to a DNS Rebinding Time-of-Check Time-of-Use (TOCTOU) race condition. The validation logic initially resolved the target domain to verify that the target IP was not within a restricted, loopback, or link-local subnet range. However, immediately after passing this check, the application initiated a separate, independent network request via requests.get (for CRLs) or via the external openssl ocsp utility (for OCSP verification). This second request triggered a second DNS lookup.
By configuring an authoritative DNS server with a Time-to-Live (TTL) of 0 seconds, an attacker could program the server to return a safe, public IP during the validation phase (Time-of-Check) and then return a private, internal IP during the connection phase (Time-of-Use). This completely bypassed the host validation filter.
An analysis of the fix in commit ed504a830f38a83825b1570302e9f38d6553938a shows how the developer closed both bypass vectors by modifying lemur/certificates/verify.py.
In the patched version, _validate_revocation_url is updated to return the resolved IP address (str(addr)) after performing safety checks. This allows the calling functions to 'pin' the hostname to a specific, validated IP address.
To prevent DNS rebinding, the helper function _pin_url_to_ip(url, resolved_ip) replaces the hostname in the HTTP URL with the validated IP address. Because this replacement breaks HTTPS Server Name Indication (SNI) and TLS host verification, it is strictly restricted to http schemes. To ensure the remote server can route virtual hosts correctly, the original host header is preserved and explicitly passed as an HTTP header.
# Patched implementation in lemur/certificates/verify.py
def _pin_url_to_ip(url, resolved_ip):
parsed = urlparse(url)
if parsed.scheme != "http":
return url
port = parsed.port
netloc = f"{resolved_ip}:{port}" if port else resolved_ip
return parsed._replace(netloc=netloc).geturl()Additionally, the HTTP redirect vector is mitigated in crl_verify by explicitly setting allow_redirects=False in the requests.get call:
# Patched request invocation in crl_verify
response = requests.get(
pinned_url,
timeout=(3.05, 6),
allow_redirects=False,
headers={"Host": _host_header(point)},
)This modification prevents the client from following Location headers, neutralising the redirect bypass. However, the limitation of this patch is that HTTPS endpoints are not pinned to prevent rebinding, meaning a theoretical risk remains if an attacker can manipulate TLS bindings on internal endpoints.
An attacker seeking to exploit CVE-2026-70667 must possess certificate upload privileges on the target Lemur instance. The exploitation can proceed via two primary vectors depending on the targeted revocation path.
302 Found redirect pointing to http://169.254.169.254/latest/meta-data/.URI: http://attacker-server.com/crl.crl.POST /api/1/certificates/upload endpoint.attacker-server.com resolves to a public IP, and then makes a request to it. The server follows the redirect directly to the AWS IMDS endpoint, returning metadata to the log files or application responses.rebind.attacker.com with a TTL of 0.1.1.1.1 (public) and the second query to 127.0.0.1 (internal loopback).http://rebind.attacker.com/ocsp.1.1.1.1, and validates the URL. Then, the execution tool (openssl ocsp) queries DNS a second time, receives 127.0.0.1, and establishes a TCP handshake with the local interface on the Lemur host.The concrete impact of this vulnerability is a complete bypass of SSRF protections on the host server. An attacker can map internal ports, communicate with backend VPC databases, or query orchestrators. In AWS environments, this exposure can lead to the retrieval of IAM credentials, configuration parameters, and access keys from the Instance Metadata Service (IMDSv1).
To address this vulnerability, administrators must upgrade Netflix Lemur instances to version 1.9.3 or later. This version implements resolution pinning and disables HTTP redirects on CRL validation paths.
If immediate updates are not feasible, the following workarounds should be applied:
POST /api/1/certificates/upload endpoint using role-based access controls.169.254.169.254/32.CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L| Product | Affected Versions | Fixed Version |
|---|---|---|
Lemur Netflix | < 1.9.3 | 1.9.3 |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-918, CWE-367 |
| Attack Vector | Network |
| CVSS Score | 6.3 |
| EPSS Percentile | N/A |
| Impact | Server-Side Request Forgery (SSRF) bypass to internal targets |
| Exploit Status | Conceptual |
| KEV Status | Not Listed |
The web application server receives a URL or similar request from an upstream component and retrieves the resource without validating the destination.
An LDAP injection vulnerability exists in the centraldogma-server-auth-shiro module of LY Corporation Central Dogma before version 0.84.0. The search logic dynamically constructs LDAP search filters by interpolating user-provided usernames without escaping RFC 4515 metacharacters. Unauthenticated remote attackers can leverage this flaw to bypass authentication, enumerate directory hierarchies, and access unauthorized resources.
CVE-2026-11746 is a critical vulnerability in Central Dogma Server prior to version 0.84.0, where an embedded ZooKeeper replication secret silently falls back to a publicly known, hard-coded default string ('ch4n63m3'). Remote attackers with access to the replication network can authenticate as legitimate cluster peers, potentially leading to unauthorized data exposure, state manipulation, or complete cluster takeover.
A logical verification flaw in ZITADEL's external JWT Identity Provider validation allows attackers to bypass session expiration checks. If an incoming JWT lacks the 'exp' claim, the system skips validation entirely, creating an indefinitely valid session. This issue has been addressed in versions 3.4.12 and 4.15.2.
CVE-2026-59149 identifies a directory traversal vulnerability in `@mockoon/commons-server`, the backend mock-server library powering the Mockoon application. The flaw occurs in the path containment validation logic used during raw file response generation. An unauthenticated attacker can exploit this weakness to retrieve arbitrary files from sibling directories sharing a common prefix with the designated static base directory.
An in-depth analysis of CVE-2026-59148, a high-severity flaw in Mockoon where unauthenticated administrative endpoints and a wildcard Cross-Origin Resource Sharing (CORS) policy allow remote execution, state poisoning, and credential theft.
An improper authentication vulnerability (CWE-287) in ZITADEL's external identity provider handler before version 4.15.3 allows remote attackers to perform complete account takeover. When auto-linking by email is enabled, ZITADEL verifies that the local target account has a verified email address but fails to verify if the external provider confirmed ownership of that same email. Attackers can exploit this by registering an unverified account with a victim's email address on a permissive external provider, leading to unauthorized account binding and persistent access.