CVE-2026-116692: MLflow: scorer deserialization allows unauthenticated RCE
GHSA-26p8-2jq9-3vq9CRITICALMLflow 3.12.0rc0 through 3.16.x lets a caller upload a Python module through artifact endpoints and then have the server import and instantiate it via the third-party scorer invoke endpoint, giving arbitrary code execution on the tracking server (CWE-94, CVSS 9.8). It needs no credentials when authentication is disabled, which is a common default for internal MLflow deployments, and only an account that can create experiments, runs and artifacts when basic auth is on. The exploit also needs the allowed scorer package to be writable by the server process. No EPSS score, public exploit, Nuclei template or KEV listing exists yet, but the attack chain is simple and the advisory plus patch diff are public, so weaponization should be expected quickly. MLflow servers typically hold experiment data, model artifacts and cloud credentials, so compromise is a direct path to model tampering and lateral movement. Upgrade to 3.17.0 now, and until then restrict network access to the tracking server, enable authentication, and make the scorer package directory read-only.
What is the risk?
Critical. Network-reachable, low complexity, no user interaction, and no privileges on deployments with authentication disabled. Exposure depends on the writable-package precondition, which lowers real-world likelihood somewhat. There is no confirmed exploitation, no public exploit and no EPSS data, so the current exploitation likelihood is unquantified. The public patch and advisory make reverse-engineering easy. Impact is full compromise of the MLflow server process (confidentiality, integrity, availability). Many MLflow instances run internally with auth off, which raises exposure.
How does the attack unfold?
What systems are affected?
| Package | Ecosystem | Vulnerable Range | Patched |
|---|---|---|---|
| MLflow | pip | >= 3.12.0rc0, < 3.17.0 | 3.17.0 |
Do you use MLflow? You're affected.
How severe is it?
What is the attack surface?
What should I do?
1 step1) Upgrade MLflow to 3.17.0 or later (fix in PR #25906, commit a732443). 2) Until patched, do not expose the tracking server to untrusted networks; put it behind a VPN or authenticated reverse proxy. 3) Enable MLflow authentication and limit who can create experiments, runs and upload artifacts. 4) Make the allowed scorer package directories read-only for the server process and run it as a low-privilege user in a container. 5) Block or monitor requests to /ajax-api/3.0/mlflow/scorer/invoke and unexpected artifact uploads of .py files. 6) Hunt for unexpected Python files under the scorer package path and for anomalous child processes or outbound connections from the MLflow server. 7) Rotate credentials accessible to the server if compromise is suspected, and verify the integrity of registered models.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2026-116692?
MLflow 3.12.0rc0 through 3.16.x lets a caller upload a Python module through artifact endpoints and then have the server import and instantiate it via the third-party scorer invoke endpoint, giving arbitrary code execution on the tracking server (CWE-94, CVSS 9.8). It needs no credentials when authentication is disabled, which is a common default for internal MLflow deployments, and only an account that can create experiments, runs and artifacts when basic auth is on. The exploit also needs the allowed scorer package to be writable by the server process. No EPSS score, public exploit, Nuclei template or KEV listing exists yet, but the attack chain is simple and the advisory plus patch diff are public, so weaponization should be expected quickly. MLflow servers typically hold experiment data, model artifacts and cloud credentials, so compromise is a direct path to model tampering and lateral movement. Upgrade to 3.17.0 now, and until then restrict network access to the tracking server, enable authentication, and make the scorer package directory read-only.
Is CVE-2026-116692 actively exploited?
No confirmed active exploitation of CVE-2026-116692 has been reported, but organizations should still patch proactively.
How to fix CVE-2026-116692?
1) Upgrade MLflow to 3.17.0 or later (fix in PR #25906, commit a732443). 2) Until patched, do not expose the tracking server to untrusted networks; put it behind a VPN or authenticated reverse proxy. 3) Enable MLflow authentication and limit who can create experiments, runs and upload artifacts. 4) Make the allowed scorer package directories read-only for the server process and run it as a low-privilege user in a container. 5) Block or monitor requests to /ajax-api/3.0/mlflow/scorer/invoke and unexpected artifact uploads of .py files. 6) Hunt for unexpected Python files under the scorer package path and for anomalous child processes or outbound connections from the MLflow server. 7) Rotate credentials accessible to the server if compromise is suspected, and verify the integrity of registered models.
What systems are affected by CVE-2026-116692?
This vulnerability affects the following AI/ML architecture patterns: MLOps platforms, experiment tracking servers, model registries, GenAI evaluation pipelines, training pipelines.
What is the CVSS score for CVE-2026-116692?
CVE-2026-116692 has a CVSS v3.1 base score of 9.8 (CRITICAL). The EPSS exploitation probability is 0.70%.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0010.001AI SoftwareAML.T0012Valid AccountsAML.T0049Exploit Public-Facing ApplicationAML.T0050Command and Scripting InterpreterCompliance Controls Affected
What are the technical details?
Original Advisory
MLflow is an open source AI engineering platform for agents, large language models, and machine learning models. From 3.12.0rc0 until 3.17.0, third-party scorer deserialization in mlflow/genai/scorers/base.py accepts request-selected descendants of THIRD_PARTY_SCORER_ALLOWED_MODULES rather than requiring an exact allowed module. A caller can use MLflow artifact endpoints to place a Python module beneath a writable allowed package and submit its module and class through /ajax-api/3.0/mlflow/scorer/invoke. Scorer.model_validate_json() imports the module and constructs the class before trace processing. Authentication-disabled deployments permit this code execution without credentials, while basic-auth deployments require a principal capable of creating an experiment and run and uploading artifacts. In either configuration, the allowed scorer package must be writable by the server process. This issue is fixed in version 3.17.0.
Exploitation Scenario
An attacker finds an MLflow tracking server with authentication disabled, or uses a low-privilege account on one with basic auth. They create an experiment and run, upload a malicious Python module as an artifact so it lands beneath a writable allowed scorer package, then POST to /ajax-api/3.0/mlflow/scorer/invoke naming that module and class. Scorer.model_validate_json() imports the module and constructs the class, running the payload with the server's privileges. The attacker steals cloud and artifact-store credentials, backdoors production models in the registry, and uses the host as a pivot into the ML platform.
Weaknesses (CWE)
CWE-470Use of Externally-Controlled Input to Select Classes or Code ('Unsafe Reflection')PrimaryCWE-470Use of Externally-Controlled Input to Select Classes or Code ('Unsafe Reflection')PrimaryCWE-94Improper Control of Generation of Code ('Code Injection')PrimaryCWE-94Improper Control of Generation of Code ('Code Injection')PrimaryCWE-470Use of Externally-Controlled Input to Select Classes or Code ('Unsafe Reflection')CWE-94Improper Control of Generation of Code ('Code Injection')CWE-470 — Use of Externally-Controlled Input to Select Classes or Code ('Unsafe Reflection'): The product uses external input with reflection to select which classes or code to use, but it does not sufficiently prevent the input from selecting improper classes or code.
- [Architecture and Design] Refactor your code to avoid using reflection.
- [Architecture and Design] Do not use user-controlled inputs to select and load classes or code.
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HReferences
Timeline
Related Vulnerabilities
CVE-2025-1537910.0MLflow: RCE via unsanitized model dependency specs
Same package: mlflowCVE-2023-376510.0MLflow: path traversal allows arbitrary file read
Same package: mlflowCVE-2026-26359.8mlflow: security flaw enables exploitation
Same package: mlflowCVE-2023-11779.8MLflow: path traversal allows arbitrary file read/write
Same package: mlflowCVE-2023-27809.8MLflow: path traversal allows arbitrary file read/write
Same package: mlflow