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

CVE-2026-69146: Missing Authorization Bypass in MLflow Basic Authentication Middleware

Alon Barad
Alon Barad
Software Engineer

Aug 17, 2026·7 min read·20 visits

Executive Summary (TL;DR)

An authorization bypass vulnerability in MLflow's basic-auth middleware allows authenticated users to inject arbitrary dataset records into other users' runs without UPDATE permissions.

This technical report details a missing authorization vulnerability (CVE-2026-69146 / GHSA-3p64-6gvh-82v5) affecting the MLflow platform from version 3.13.0 to 3.15.0. When MLflow is configured with the built-in basic-auth plugin, authenticated users can bypass run-level UPDATE authorization checks, enabling unauthorized dataset and model lineage metadata injection.

Vulnerability Overview

MLflow is an open-source platform designed to orchestrate machine learning lifecycles, managing experiments, runs, and model deployment pipelines. Within distributed enterprise environments, MLflow implements basic authentication to partition access control, ensuring that only authorized users can read or write to target runs and datasets. The tracking server exposes a suite of API endpoints to log metrics, parameters, and artifact lineages, relying on internal middleware checks to enforce proper access barriers.

The vulnerability designated as CVE-2026-69146 lies in the authentication and authorization middleware component under mlflow/server/auth. Specifically, the system omits authorization verification when handling tracking operations for certain newly introduced API endpoints. This flaw belongs to the Missing Authorization class defined by CWE-862, where an actor can perform actions that should otherwise require higher permission tiers.

The omission permits any authenticated user to interact with the runs of other platform users, specifically injecting arbitrary data inputs into their active metadata pipelines. This bypass degrades the integrity of the ML model tracking database, creating security exposures in downstream workflows that rely on lineage telemetry. The flaw operates across network vectors, requiring no human interaction from the targeted user.

Root Cause Analysis

The structural flaw is located in the fail-open design of MLflow's tracking server request interceptor. When an HTTP request reaches the server, a custom authorization hook (_before_request) intercepts the request to evaluate credentials. The middleware extracts the Protobuf request class mapped to the HTTP route and attempts to retrieve a corresponding validator callback from the global BEFORE_REQUEST_HANDLERS dictionary.

If the incoming request class does not exist within the BEFORE_REQUEST_HANDLERS dictionary, the registration check returns a null value. Instead of raising an exception or denying access when a lookup fails, the interceptor defaults to allowing the transaction. This implementation choice creates a security model that fails open when new routes are introduced without explicit security registration.

Between versions 3.13.0 and 3.14.3, MLflow introduced the LogInputs and LogOutputs Protobuf classes to facilitate the tracking of dataset-level lineage metrics. Developers did not register these two classes in the initialization module of the server authentication package. Consequently, any request targeted at these endpoints bypassed the validator execution flow entirely, transitioning directly to backend database write operations.

Code Analysis

The remediation of this vulnerability requires registering the omitted Protobuf request classes within the authentication registry. Prior to the patch, the file mlflow/server/auth/__init__.py lacked the imports for LogInputs and LogOutputs, preventing them from being mapped to their corresponding protection rules. Without these imports, the mapping registry failed to invoke the necessary verification handler for these commands.

Below is the annotated representation of the patch introduced in PR #24291, showing the inclusion of the target classes and their explicit registration into the request interceptor structure:

# Patch applied to mlflow/server/auth/__init__.py
@@ -168,9 +168,11 @@
     ListScorerVersions,
     ListWorkspaces,
     LogBatch,
+    # Import the omitted dataset lineage input logging request class
+    LogInputs,
     LogLoggedModelParamsRequest,
     LogMetric,
     LogModel,
+    # Import the omitted dataset lineage output logging request class
+    LogOutputs,
     LogParam,
     QueryTraceMetrics,
     RegisterScorer,
@@ -2461,7 +2463,9 @@ def filter_list_review_queues(resp: Response) -> None:
     UpdateRun: validate_can_update_run,
     LogMetric: validate_can_update_run,
     LogBatch: validate_can_update_run,
+    # Map LogInputs to the run update validation routine
+    LogInputs: validate_can_update_run,
     LogModel: validate_can_update_run,
+    # Map LogOutputs to the run update validation routine
+    LogOutputs: validate_can_update_run,
     SetTag: validate_can_update_run,
     DeleteTag: validate_can_update_run,
     LogParam: validate_can_update_run,

This registration directly resolves the security issue by mapping the incoming commands to validate_can_update_run. This validation routine executes during the preprocessing stage, verifying that the authenticated user possesses EDIT privileges over the parent experiment containing the target run. The diagram below illustrates the routing logic and the interceptor pathway before and after the modification:

The implementation of the fix is robust as it leverages the pre-existing authorization context used for other run modifications. This minimizes the risk of regression or introducing logical loopholes during validation. However, the architectural reliance on an opt-in registration dictionary highlights a recurring vulnerability vector in systems where developers must manually declare every newly added endpoint to maintain security parity.

Exploitation & Reproduction

Exploitation of CVE-2026-69146 requires the attacker to have network access to the MLflow tracking server and valid, low-privileged credentials for the basic-auth mechanism. The attacker does not need administrative privileges or access keys to the victim's experiments. Because the server does not enforce checks on the resource boundaries of LogInputs and LogOutputs, the attacker only needs to obtain the unique identifier (run_id) of the target run to manipulate its recorded history.

An attacker can retrieve target identifiers through log monitoring, directory service listings, or guessing techniques if predictable UUID structures are in place. Once a run_id is acquired, the attacker transmits a structured JSON payload directly to the /api/2.0/mlflow/runs/log-inputs endpoint. This operation registers unauthorized datasets into the metadata database of the target run, indicating incorrect source storage locations or altered checksums.

The following payload structure outlines the request format used to insert anomalous lineage metadata into a targeted victim run:

POST /api/2.0/mlflow/runs/log-inputs HTTP/1.1
Host: mlflow-server.internal:5000
Authorization: Basic bG93X3ByaXZfdXNlcjpwYXNzd29yZA==
Content-Type: application/json
 
{
  "run_id": "victims_sensitive_run_uuid_here",
  "datasets": [
    {
      "dataset": {
        "name": "poisoned_dataset",
        "digest": "attacker_hash_value",
        "source_type": "s3",
        "source": "s3://attacker-controlled-bucket/malicious_data.csv"
      },
      "tags": [
        {
          "key": "injected_by",
          "value": "external_attacker"
        }
      ]
    }
  ]
}

The testing framework included in the patch suite confirms this vulnerability state by running localized requests where two distinct authenticated identities operate independently. When running on an unpatched server, the second user can successfully modify the run metadata belonging to the first user without triggering errors. Following the application of the patch, identical requests correctly terminate with an explicit permission denied exception.

Impact Assessment

The primary impact of this vulnerability is the compromise of metadata integrity across machine learning experiments and production run histories. By injecting unauthorized dataset definitions, an attacker can falsify the audit trails that track what data was used to train specific models. This capability undermines compliance verification processes, which are critical in regulated industries such as healthcare, finance, and automotive safety.

Furthermore, automated training and deployment pipelines often ingest this lineage data to trigger retraining runs or validate model deployment criteria. If an attacker injects a malicious data source path into the tracking system, subsequent automated processes might access the untrusted storage location. This can lead to downstream compromise if the data ingestion system parses unvalidated files from an external registry.

The Common Vulnerability Scoring System (CVSS) v3.1 assigns this flaw a base score of 6.5, reflecting medium severity. The impact vector CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N establishes that the threat vector operates over the network with low complexity. While there is no immediate loss of system availability or data confidentiality from this exploit, the high integrity impact warrants prompt remediation.

Remediation & Defensive Mitigation

The definitive solution to mitigate CVE-2026-69146 is upgrading the MLflow installation to version 3.15.0 or later. This release permanently maps the dataset logging endpoints to the appropriate validation functions. Deployment managers should apply this update to all tracking instances where the basic-auth plugin is active.

For environments where immediate software upgrades are not possible, administrators should deploy external access controls. Applying web application firewall rules or reverse proxy filters to block incoming traffic to /api/2.0/mlflow/runs/log-inputs and /api/2.0/mlflow/runs/log-outputs protects vulnerable servers from external exploitation. These filtering rules should remain active until the tracking server can undergo a clean package upgrade.

Security operations teams should also establish regular monitoring of tracking server logs for unexpected POST operations. Reviewing the relational associations between the initiating accounts and the experiments being updated helps identify anomalous behavior. Implementing structured audit checks on MLflow tracking backends ensures that database entries are consistent with authentic developer activities.

Fix Analysis (1)

Technical Appendix

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

Affected Systems

MLflow Platform Tracking Server

Affected Versions Detail

Product
Affected Versions
Fixed Version
MLflow
mlflow
>= 3.13.0, < 3.15.03.15.0
AttributeDetail
CWE IDCWE-862
Attack VectorNetwork (AV:N)
CVSS6.5
EPSS StatusNot Populated
ImpactHigh Integrity (I:H)
Exploit StatusPOC / Test-Suite Verified
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.

Known Exploits & Detection

MLflow Unit TestsUnit tests verifying missing validation boundaries on LogInputs and LogOutputs endpoints.

References & Sources

  • [1]NVD CVE-2026-69146 Detail
  • [2]GitHub Security Advisory GHSA-3p64-6gvh-82v5
  • [3]MLflow Security Fix Pull Request #24291

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

•1 day ago•CVE-2026-11748
6.9

CVE-2026-11748: Unauthenticated LDAP Injection in Central Dogma Server Authentication

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.

Alon Barad
Alon Barad
9 views•6 min read
•1 day ago•CVE-2026-11746
9.4

CVE-2026-11746: Use of Hard-coded ZooKeeper Replication Secret 'ch4n63m3' in Central Dogma Server

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.

Amit Schendel
Amit Schendel
7 views•6 min read
•1 day ago•CVE-2026-56665
4.2

CVE-2026-56665: Logical Validation Bypass in ZITADEL External JWT Identity Provider

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.

Alon Barad
Alon Barad
6 views•7 min read
•1 day ago•CVE-2026-59149
6.5

CVE-2026-59149: Sibling Directory Path Traversal in Mockoon Backend Server

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.

Amit Schendel
Amit Schendel
9 views•5 min read
•1 day ago•CVE-2026-59148
8.8

CVE-2026-59148: Unauthenticated Administrative API and CORS Misconfiguration in Mockoon

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.

Alon Barad
Alon Barad
11 views•6 min read
•1 day ago•CVE-2026-56666
4.8

CVE-2026-56666: Account Takeover via Improper Email Verification in ZITADEL Federated Identity Handler

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.

Amit Schendel
Amit Schendel
7 views•7 min read