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

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

Alon Barad
Alon Barad
Software Engineer

Aug 19, 2026·6 min read·0 visits

Executive Summary (TL;DR)

A structural nesting error in Netflix Lemur allows authenticated users to bypass ownership authorization checks and export public certificates by selecting export plugins that do not require private keys.

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.

Vulnerability Overview

Netflix Lemur serves as an orchestration platform for TLS/SSL certificate management, providing automated certificate provisioning, tracking, and renewal. It exposes an administrative REST API allowing users to manage, share, and export certificate material. Security boundaries are maintained via role-based access control (RBAC), restricting certificate modification and export operations to the certificate owner or designated administrators.

The vulnerability is classified as CWE-862 (Missing Authorization) and resides in the API endpoint handling certificate exports (POST /api/1/certificates/<certificate_id>/export). The core issue stems from nested logic that binds the execution of authorization checks to specific attributes of the selected export plugin rather than applying the permission check unconditionally to the target resource.

The attack surface is accessible to any authenticated user of the Lemur platform. Exploitation allows unauthorized users to retrieve truststore formats and public certificate data of assets they do not own, potentially disclosing internal network structures, domains, or certificate metadata.

Root Cause Analysis

The root cause of CVE-2026-71322 is a control flow defect in lemur/certificates/views.py. During an export operation, Lemur utilizes helper plugins to format the output data (such as JKS truststores or PKCS12 keystores). These plugins declare whether they require access to the certificate's private key via the boolean attribute plugin.requires_key.

In the unpatched code, the conditional block evaluating certificate permission was nested entirely within the scope of an if plugin.requires_key: block. If a plugin set this boolean value to False, the control flow completely bypassed the nested authorization check (CertificatePermission), proceeding directly to the export implementation phase.

Furthermore, the unpatched architecture executed log auditing (key_view) and parameter passing unconditionally outside this conditional branch. This design meant that the private key parameter was still passed to the plugin's export method, and a key_view audit entry was logged, even if the plugin had declared it did not need the private key. This logic flow resulted in false audit trails and potential exposure of sensitive key handles to unauthorized plugins.

Code Analysis and Patch Evaluation

An examination of the vulnerable code in lemur/certificates/views.py reveals the flawed logical nesting:

# VULNERABLE CODE PATH
if plugin.requires_key:
    if not cert.private_key:
        return (...)
    else:
        # Permission check nested only here
        if g.current_user != cert.user:
            owner_role = role_service.get_by_name(cert.owner)
            permission = CertificatePermission(owner_role, [x.name for x in cert.roles])
            if not permission.can():
                return (dict(message="Unauthorized"), 403)
 
# Bypassed code block executions
log_service.create(g.current_user, "key_view", certificate=cert)
extension, passphrase, data = plugin.export(
    cert.body, cert.chain, cert.private_key, options
)

The fix introduced in commit 5683bbea8b10cce07f9a8abf1e4a7d3b2031c585 corrects this flow by introducing an isolated private_key variable initialized to None and refactoring the logic structure:

# PATCHED CODE PATH
private_key = None
if plugin.requires_key:
    if not cert.private_key:
        return (...)
 
    # Permission validation is executed whenever requires_key is true
    if g.current_user != cert.user:
        owner_role = role_service.get_by_name(cert.owner)
        permission = CertificatePermission(owner_role, [x.name for x in cert.roles])
        if not permission.can():
            return (dict(message="Unauthorized"), 403)
 
    # Audit logging and key assignment are restricted strictly to this block
    log_service.create(g.current_user, "key_view", certificate=cert)
    private_key = cert.private_key
 
options = data["plugin"]["plugin_options"]
extension, passphrase, data = plugin.export(
    cert.body, cert.chain, private_key, options
)

The patch successfully mitigates the vulnerability by isolating the private key pointer. Because private_key is assigned None for plugins where requires_key = False, no private key is passed into the format handler. Furthermore, actual private key operations are bound directly to the user's role permission check, blocking unauthorized credential leakage.

Exploitation Methodology

To exploit this vulnerability, an attacker must possess authenticated API access to the Netflix Lemur target application. The attacker executes the attack using a custom REST request directed at the export endpoint.

First, the attacker identifies a certificate ID of interest (cert_id). The target certificate does not have to belong to the attacker's assigned user role. Second, the attacker generates a POST request to /api/1/certificates/{cert_id}/export specifying an export plugin that does not request private keys, such as java-truststore-jks:

{
  "plugin": {
    "slug": "java-truststore-jks",
    "plugin_options": []
  }
}

Because the requested plugin has requires_key = False, the unpatched Lemur instance skips the CertificatePermission verification check. The handler retrieves the certificate body and public chain, formats them into a Java KeyStore structure, and returns the file payload to the unauthorized user. The transaction completes with an HTTP status 200 OK.

Security Impact Assessment

The overall security impact is classified as Medium, yielding a CVSS score of 4.3. The vulnerability does not allow direct remote code execution or structural modifications to certificates. However, it severely degrades the confidentiality of public key infrastructure metadata and impairs audit log integrity.

Unauthorized export of public certificate structures allows actors to map out trusted target hostnames, subdomains, and certificate properties. Additionally, on unpatched servers, a successful exploit triggers a false positive key_view audit log entry in the database. This obscures genuine private-key export tracking, leading to audit pollution and making security operations detection efforts unreliable.

A latent risk also exists if a third-party or locally developed export plugin, configured with requires_key = False, internally processes or exfiltrates the third parameter during export. In such cases, unpatched Lemur systems would expose the raw private key parameters directly to the plugin without verifying user authorization.

Detection and Remediation

Remediation requires upgrading Netflix Lemur instances to version 1.9.3 or higher. This release relocates the authorization evaluations and limits private key material to authorized execution scopes.

If immediate software upgrade is not feasible, security engineers should implement temporary workarounds. First, restrict network-level access to the export API endpoints utilizing upstream gateways or Web Application Firewalls (WAF). Allow endpoint interaction only for authenticated administrators.

Second, review customized or third-party export plugins to ensure none declare requires_key = False if they perform caching, logging, or storage of execution arguments. To monitor for past exploitation attempts, audit Lemur logs for occurrences where key_view audit actions are linked to accounts that do not have authorization or owner status over the targeted certificates.

Official Patches

NetflixFix CertificatePermission authorization check bypass in CertificateExport
NetflixNetflix Lemur 1.9.3 Release

Fix Analysis (1)

Technical Appendix

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

Affected Systems

Netflix Lemur

Affected Versions Detail

Product
Affected Versions
Fixed Version
Lemur
Netflix
< 1.9.31.9.3
AttributeDetail
CWE IDCWE-862 (Missing Authorization)
Attack VectorNetwork
CVSS v3.14.3 (Medium)
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
Exploit Statusnone
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1068Exploitation for Privilege Escalation
Privilege Escalation
CWE-862
Missing Authorization

The software does not perform an authorization check when an actor attempts to access a resource or perform an action.

Vulnerability Timeline

Vulnerability identified and patched internally by Netflix
2026-07-01
GitHub Advisory Published and CVE-2026-71322 Registered
2026-08-18
Netflix Lemur v1.9.3 Released
2026-08-18

References & Sources

  • [1]GHSA-4h97-p9wq-chqj
  • [2]NVD - CVE-2026-71322

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

•21 minutes 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
0 views•7 min read
•about 2 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
1 views•6 min read
•about 3 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
2 views•5 min read
•about 4 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
2 views•6 min read
•about 5 hours ago•CVE-2026-17106
7.1

CVE-2026-17106: Container-to-Host Arbitrary File Write in moby/go-archive (CopyEscape)

CVE-2026-17106 (CopyEscape) is a container-to-host arbitrary file-write vulnerability within Docker's archiving and extraction library moby/go-archive. By utilizing a Time-of-Check to Time-of-Use (TOCTOU) race condition during the file-walking stage inside a running container, a malicious container process can force the host engine to produce a compromised tar stream. During client-side extraction, the Docker CLI resolves directory entries through absolute symbolic links, resulting in arbitrary file creation or modification on the host system.

Amit Schendel
Amit Schendel
4 views•6 min read
•about 6 hours ago•CVE-2026-73974
5.5

CVE-2026-73974: Local Path Traversal and Privilege Escalation in Linuxfabrik Monitoring Plugins

CVE-2026-73974 is a local path traversal vulnerability in linuxfabrik-lib and Linuxfabrik Monitoring Plugins. Under standard monitoring configurations running with elevated privileges via sudo, this flaw can be exploited by an unprivileged local user to read arbitrary root-only files, resulting in local privilege escalation.

Alon Barad
Alon Barad
4 views•5 min read