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



CVE-2026-71308

CVE-2026-71308: Missing Authorization and Lifecycle Hijacking in Netflix Lemur

Alon Barad
Alon Barad
Software Engineer

Aug 19, 2026·7 min read·3 visits

Executive Summary (TL;DR)

Missing authorization in Netflix Lemur's certificate replacement logic allows standard users to hijack TLS certificate rotation and silence expiration alerts.

Netflix Lemur before 1.9.3 contains a missing authorization vulnerability (CWE-862, CWE-639) when handling certificate creation, upload, or modification. Authenticated non-read-only users can manipulate the replaces parameter to silence expiration notifications and hijack certificate rotation tasks for arbitrary targets, leading to unauthorized TLS certificate deployment and traffic interception.

Vulnerability Overview

Netflix Lemur is an enterprise-grade certificate management framework designed to orchestrate the lifecycle of Transport Layer Security (TLS) and Secure Sockets Layer (SSL) certificates. It acts as a central repository and broker, coordinating certificate generation, renewal, and deployment across diverse infrastructure providers, including cloud platforms like Amazon Web Services (AWS) and container orchestration engines such as Kubernetes.

Because Lemur possesses administrative privileges to integrate with external load balancers, content delivery networks (CDNs), and keystores, it represents a high-value target for security architecture. Any vulnerability within its API endpoints can expose wide-ranging downstream infrastructure to unauthorized modifications.

CVE-2026-71308 describes a severe missing authorization flaw in Lemur's certificate-associated endpoints. In versions from 0.5.0 up to (but excluding) 1.9.3, the system fails to validate whether a user requesting a certificate creation, upload, or modification has permissions to modify certificates referenced in the replaces or replacements arrays. This lack of authorization allows authenticated users to hijack the rotation and notification lifecycles of any arbitrary certificate managed within the system.

Root Cause Analysis

The core of the vulnerability lies in Lemur's processing of relationship models during deserialization. When a certificate is uploaded, created, or updated via API requests, the input is processed by Lemur's marshmallow schemas, specifically the schemas defining certificate associations. If the payload contains the replaces or replacements parameters, Lemur uses a generic utility called fetch_objects to query and instantiate corresponding Certificate SQLAlchemy database records.

Historically, Lemur did not verify if the requesting user owned, created, or possessed the necessary role permissions (CertificatePermission) for the target certificates resolved via fetch_objects. This omission allowed any authenticated, non-read-only user to link their newly created certificate to an arbitrary, pre-existing certificate in the system.

Once the relationship is established, SQLAlchemy triggers an append event listener bound to the Certificate.replaces relationship. This database event automatically executes several mutations on the target certificate: it toggles the notify parameter to False to silence upcoming expiration alerts and marks the certificate as replaced. This prevents administrators from receiving warnings when the victim certificate is near expiration, while preparing the platform to deploy the attacker-controlled certificate in its place during subsequent scheduled background rotation tasks.

Code Analysis

The resolution to CVE-2026-71308 is implemented in commit 286874535160952143b0afe2d356642669f9d4c6. The patch introduces an authorization helper, authorize_certificate_replacement, within lemur/certificates/service.py and integrates it into the relevant endpoints in lemur/certificates/views.py.

Before the patch, endpoints like /api/1/certificates/upload did not evaluate permissions for the certificate IDs passed in the replaces list. The following diff highlights the introduction of this authorization check:

# lemur/certificates/service.py
+def authorize_certificate_replacement(certificates, current_user):
+    """
+    Ensures the current user owns, holds a role on, or is the creator of every certificate
+    being marked as replaced. Marking a certificate as replaced silences its expiration
+    notifications and retargets its rotation, so it requires the same authorization as
+    revoking or editing that certificate directly.
+    """
+    for cert in certificates:
+        if current_user == cert.user:
+            continue
+
+        owner_role = role_service.get_by_name(cert.owner)
+        permission = CertificatePermission(owner_role, [r.name for r in cert.roles])
+
+        if not permission.can():
+            raise UnauthorizedError(
+                f"You are not authorized to replace certificate: {cert.name}"
+            )

The check verifies whether the current user is the owner, or if their roles match the certificate's permission policies. The view handlers in lemur/certificates/views.py are patched to execute this function before saving state changes:

# lemur/certificates/views.py
@@ -651,6 +653,12 @@ def post(self, data=None):
         if not StrictRolePermission().can():
             return dict(message="You are not authorized to upload a certificate."), 403
 
+        if data.get("replaces"):
+            try:
+                service.authorize_certificate_replacement(data["replaces"], g.current_user)
+            except UnauthorizedError as e:
+                return dict(message=str(e)), 403

This ensures that if the input payload attempts to associate a new certificate as a replacement for an existing one, the operation fails immediately with a 403 Forbidden unless the user holds adequate privileges over the target certificate.

Exploitation & Proof-of-Concept Analysis

Exploitation of CVE-2026-71308 requires an attacker to possess network access to the Lemur instance and valid credentials belonging to any non-read-only role. The attack proceeds through discrete phases, beginning with active reconnaissance of vulnerable targets via the Lemur API.

First, the attacker enumerates active certificates. Although default read permissions might restrict write access, standard users typically have read access to metadata. The attacker identifies the ID of a target certificate (e.g., 9999).

Next, the attacker constructs a payload representing a new certificate. This certificate may contain an attacker-controlled private key. The attacker calls the upload or creation endpoint, appending the targeted certificate ID into the replaces field.

Once submitted, the database updates immediately. The original certificate is flagged as replaced, its notifications are silenced, and when Lemur's cron-based automation cycles execute certificate_rotate, it automatically pushes the attacker's newly associated certificate to the integrated AWS ELBs, CloudFront distributions, or Kubernetes secrets previously tied to the original certificate. This results in direct traffic interception.

Impact Assessment

The security impact of CVE-2026-71308 is classified as High, with a CVSS v3.1 base score of 8.1. The attack complexity is Low since exploitation does not depend on complex timing or environment states. Because Lemur is designed to automate certificate rotations to critical entry points, the downstream consequences are far-reaching.

By successfully mapping a malicious or unapproved certificate to an active deployment target, an attacker achieves complete control over TLS endpoints. This allows the interception and decryption of encrypted user traffic (Man-in-the-Middle), leading to the exposure of credentials, session tokens, and sensitive data.

Furthermore, silencing expiration notifications for critical endpoints compromises availability. If the original certificate is replaced by an invalid or unapproved certificate, production services may experience complete denial of service when client browsers or systems reject the untrusted or misconfigured certificate. The lack of auditing before version 1.9.3 makes identifying such modifications difficult without manual database verification.

Remediation & Detection Guidance

The definitive remediation for CVE-2026-71308 is updating Netflix Lemur to version 1.9.3 or later. This version enforces complete role-based and ownership-based validation during certificate replacement processing, terminating unauthorized attempts prior to database persistence.

For environments unable to deploy the patch immediately, the following temporary mitigations are recommended:

  1. Restrict API access to non-administrative users. Revoke write permissions (POST, PUT) from user roles that do not strictly require certificate issuance or upload capabilities.

  2. Monitor server logs for incoming requests to /api/1/certificates/upload or /api/1/certificates/<id> containing the replaces JSON field. Flag and investigate any requests where the submitting identity does not match the recorded owner of the referenced certificate.

  3. Perform regular database integrity checks. Administrators can execute queries to detect discrepancies where the creator of a replacing certificate differs from the owner of the replaced certificate, indicating a potential compromise.

Fix Analysis (1)

Technical Appendix

CVSS Score
8.1/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H

Affected Systems

Netflix Lemur

Affected Versions Detail

Product
Affected Versions
Fixed Version
Lemur
Netflix
>= 0.5.0, < 1.9.31.9.3
AttributeDetail
CWE IDCWE-862 / CWE-639
Attack VectorNetwork (AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H)
CVSS Score8.1 (High)
Exploit Statuspoc
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1068Exploitation for Privilege Escalation
Privilege Escalation
CWE-862
Missing Authorization

The system does not perform authorization checks or improperly restricts access based on user-controlled object keys when managing object associations.

References & Sources

  • [1]Netflix Lemur Authorization Fix Commit
  • [2]Netflix Lemur Release Tag v1.9.3
  • [3]GitHub Security Advisory GHSA-cfh6-pv5c-38jv
  • [4]NVD CVE-2026-71308 Detail
  • [5]CVE Program CVE-2026-71308 Record

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

•39 minutes ago•CVE-2026-71307
7.7

CVE-2026-71307: Plaintext Credential Exposure in Netflix Lemur Destinations API

An authorization bypass and information disclosure vulnerability in Netflix Lemur before version 1.9.3 allows authenticated, low-privilege users to retrieve raw destination configurations, exposing plaintext credentials such as SFTP passwords and private key passphrases.

Amit Schendel
Amit Schendel
1 views•6 min read
•about 3 hours ago•CVE-2026-71317
6.5

CVE-2026-71317: Missing Authorization in Netflix Lemur Allows Unauthorized Subordinate CA Creation

CVE-2026-71317 is a critical Broken Object-Level Authorization (BOLA) / Missing Authorization vulnerability in Netflix Lemur versions prior to 1.9.3. When the self-service authority creation option is enabled (ADMIN_ONLY_AUTHORITY_CREATION = False), Lemur allows authenticated non-read-only users to request the creation of a subordinate Certificate Authority (sub-CA) chained to any internal parent authority, even if the requesting user lacks administrative or usage permissions over that parent CA. This allows attackers to generate subordinate CAs signed by trusted root certificates, exposing private keys and compromising the organizational PKI trust chain.

Alon Barad
Alon Barad
4 views•7 min read
•about 4 hours ago•CVE-2026-71322
4.3

CVE-2026-71322: Missing Authorization Check in Netflix Lemur Certificate Export

Netflix Lemur, a TLS/SSL certificate management framework, contains a missing authorization check in its certificate export endpoint. Prior to version 1.9.3, the validation logic verifying whether a user had permission to export a certificate was incorrectly placed inside a block that executed only if the selected plugin required a private key. When an authenticated user attempted to export a certificate using a plugin that did not require the private key, the authorization check was bypassed, allowing unauthorized access to the public portions of the certificate and producing misleading audit logs.

Alon Barad
Alon Barad
3 views•6 min read
•about 5 hours ago•GHSA-JF24-8G2H-2WG7
7.2

GHSA-JF24-8G2H-2WG7: Remote Code Execution in LibreNMS AboutController via Binary Path Substitution

A critical security flaw in LibreNMS allows authenticated administrators to execute arbitrary commands by modifying the configured binary path for snmpget and accessing the About page. This occurs due to insufficient verification of the executable file's identity and integrity prior to executing it with shell_exec.

Amit Schendel
Amit Schendel
2 views•6 min read
•about 6 hours ago•GHSA-7CJ5-V4PP-V632
4.8

GHSA-7cj5-v4pp-v632: Stored Cross-Site Scripting in LibreNMS Graph Descriptions

LibreNMS versions prior to 26.7.0 are vulnerable to a stored Cross-Site Scripting (XSS) vulnerability. An authenticated administrator can inject arbitrary HTML or JavaScript into graph descriptions via specific administrative configuration endpoints. When another authenticated user views the affected graph, the unescaped payload executes within their browser context.

Alon Barad
Alon Barad
3 views•5 min read
•about 7 hours ago•GHSA-7GWW-X7FH-JF9J
8.1

GHSA-7GWW-X7FH-JF9J: SSRF-Driven Stored Cross-Site Scripting in LibreNMS Oxidized Integration

An injection vulnerability in LibreNMS's Oxidized integration component allows administrative or network-positioned attackers to achieve stored cross-site scripting (XSS). By setting a malicious oxidized.url endpoint, the server makes outbound queries and processes returned JSON fields containing malicious HTML or JavaScript. These payloads are outputted directly in the web UI without appropriate output encoding.

Amit Schendel
Amit Schendel
3 views•6 min read