Skip to main content

MLflow EUVDEUVD-2026-109184

| CVE-2026-115886 MEDIUM
Use of Externally-Controlled Input to Select Classes or Code ('Unsafe Reflection') (CWE-470)
2026-10-23 GitHub_M GHSA-2wqp-q3c6-ccj5
6.5
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Reach unauthenticated scorer/invoke endpoint
  2. Delivery
    Craft trulens scorer JSON with attacker kwargs
  3. Exploit
    Reflective instantiation routes to LiteLLM fallback
  4. Execution
    Server sends outbound request to chosen host
  5. Impact
    SSRF reaches internal/metadata services

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V15 - Secure Coding and Architecture Reflection safety, class allowlisting
Exploitation Conditions

Requires three concrete conditions, all drawn from the advisory: (1) the MLflow tracking server (3.12.0rc0-3.16.x) must be network-reachable with no authentication configured - the handler _invoke_scorer_handler is guarded only by @catch_mlflow_exception/@_disable_if_artifacts_only, so no auth is needed against default server deployments; (2) the optional, not-bundled trulens AND trulens-providers-litellm packages must be installed in the server venv (a documented GenAI-eval setup) - without them the exploitable LiteLLM fallback branch is unreachable; (3) the attacker must supply a model URI outside MLflow's native provider registry (e.g. openai:/gpt-4o) to force the LiteLLM fallback that forwards raw api_base/api_key kwargs. The primary limiting factor is condition (2): absent the optional trulens providers, the SSRF sink cannot be reached. No user interaction and no authentication are required.

Impact

This is a genuine, prioritize-this-cycle issue rather than inflated-CVSS noise, but its blast radius is gated by one precondition. The CVSS vector (AV:N/AC:L/PR:N/UI:N) is corroborated by the GHSA advisory: the endpoint POST /ajax-api/3.0/mlflow/scorer/invoke carries no auth decorator and reflectively instantiates an attacker-named class with unconstrained kwargs, so PR:N (unauthenticated) is confirmed and consistent with the description. The vuln.today decision label is 'this_month' (not act_now/emergency), aligning with the moderate 6.5 base score. No CISA KEV listing and no EPSS score are present in the input, so there is no signal of active or probabilistic widespread exploitation - exploitation status is therefore 'no confirmed active exploitation'. However, a complete, working proof-of-concept is published directly in the vendor GHSA advisory, which materially raises practical risk versus a theoretical bug. The decisive constraint: exploitation only reaches the SSRF sink when the optional, not-bundled trulens + trulens-providers-litellm packages are installed; without them the reflective instantiation still occurs but the LiteLLM fallback that forwards api_base/api_key is unreachable. The SSRF reaching internal services and cloud-metadata endpoints is the real concern on exposed, unauthenticated tracking servers. Net: treat as an urgent patch where MLflow 3.12.0rc0-3.16.x is network-reachable AND the trulens providers are installed; lower urgency where those packages are absent.

Exploit ScenarioDerived

An attacker who can reach an unauthenticated MLflow tracking server (versions 3.12.0rc0-3.16.x) with the optional trulens and trulens-providers-litellm packages installed sends a crafted POST to /ajax-api/3.0/mlflow/scorer/invoke whose serialized scorer selects mlflow.genai.scorers.trulens with a model URI (e.g. openai:/gpt-4o) that routes to the LiteLLM fallback. The attacker-supplied api_base and api_key kwargs cause the server to issue a server-originated outbound HTTP request to an attacker-chosen or internal host with fully attacker-controlled headers and body, enabling SSRF against internal services or cloud-metadata endpoints. A full working proof-of-concept is published in the vendor GHSA advisory.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 23, 2026

Unauthenticated server-side request forgery in MLflow 3.12.0rc0 through 3.16.x lets remote attackers make the tracking server issue outbound HTTP requests to an arbitrary attacker-chosen host, including internal services or cloud-metadata endpoints, with attacker-controlled headers and body. The flaw is reachable through the scorer invoke, register, and GenAI evaluate endpoints (notably POST /ajax-api/3.0/mlflow/scorer/invoke), and is only exploitable when the optional trulens and trulens-providers-litellm packages are installed in the server environment; a model URI outside MLflow's native provider registry forces the LiteLLM fallback that forwards raw api_base and api_key values. It is fixed in MLflow 3.17.0. No CISA KEV listing or confirmed active exploitation exists, and the vendor advisory ships a public proof-of-concept script that has not been independently verified here as working exploit code; the vuln.today decision label places it in the current month's remediation cycle rather than the emergency queue.

RemediationAI

Vendor-released patch: upgrade MLflow to 3.17.0 (release https://github.com/mlflow/mlflow/releases/tag/v3.17.0, via PR https://github.com/mlflow/mlflow/pull/25890 and commit bac30b4148c4f40045b4d4db07ae60ab3838803f), which adds server-side validation that rejects third-party scorer kwargs capable of steering the judge's outbound requests, applied to both inline request payloads and scorers resolved from the tracking store. If upgrading immediately is not possible, the decisive compensating control is to remove the optional trulens and trulens-providers-litellm packages from the tracking server's virtual environment, since without them the LiteLLM fallback branch - and therefore the SSRF sink - is unreachable; the trade-off is that TruLens-based GenAI evaluation on that server stops working. Additionally, restrict outbound network egress from the tracking server host so it cannot reach internal services or cloud-metadata endpoints, which limits what an SSRF can touch but does not remove the vulnerable deserialization path, and place authentication or network ACLs in front of the /ajax-api/3.0/mlflow/scorer endpoints (invoke, register) and the GenAI evaluate endpoint so unauthenticated callers cannot reach them. Updating to 3.17.0 is the complete fix; the vendor advisory does not describe any configuration change other than the version upgrade that fully closes the issue while keeping the optional scorer providers installed.

Affected VersionsENISA

MLflow 3.12.0rc0, < 3.17.0

Affected Packages

pypi mlflow fix: 3.17.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in pypi

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The root cause is CWE-470: use of externally-controlled input to select classes or code. MLflow's Scorer.model_validate_json() reads a serialized payload's third_party_scorer_data, imports the module named in the 'module' field, and reflectively instantiates the class named in 'class' with a kwargs dictionary taken verbatim from the request. The allowlist in mlflow/genai/scorers/scorer_utils.py only constrains which module paths may be imported (mlflow.genai.scorers.ragas, .deepeval, .trulens, .phoenix); it never constrains the selected attribute, the constructor arguments, or the model URI. When a trulens scorer is chosen with a model URI outside MLflow's native provider registry (for example openai:/gpt-4o), the routing logic in mlflow/genai/scorers/trulens/models.py falls through to the LiteLLM branch and passes the attacker's kwargs straight to trulens.providers.litellm.LiteLLM, which forwards api_base and api_key into litellm.completion() - turning reflective deserialization into an SSRF sink (CWE-918) with header injection. The vulnerable reconstruction happens synchronously before any tracking-store lookup or job submission, and the invoke handler (mlflow/server/handlers.py) carries no authentication decorator, only @catch_mlflow_exception and @_disable_if_artifacts_only. The upstream fix in PR #25890 introduces _validate_serialized_scorer_payload() and _validate_third_party_scorer_data(), which reject gateway destination keys (api_base and aliases such as completion_kwargs/model_kwargs) at any nesting depth and across wrapping scorers such as ensembles and MemAlign judges, and applies the check both to caller-supplied payloads and to scorers resolved from the tracking store. The same change also server-side-enforces the existing block on decorator scorers carrying a call_source field that would otherwise be executed via exec() during deserialization.

Know when Mlflow gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 6.5 MEDIUM
AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N
vuln.today AI 6.5 MEDIUM

Unauthenticated network reach confirmed by the no-auth endpoint (PR:N, AV:N, AC:L); SSRF yields a forced server-originated request with limited confidentiality/integrity impact and no availability loss (C:L/I:L/A:N, S:U).

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N
Red Hat 6.5 MEDIUM

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
Low
Integrity
Low
Availability
None

Lifecycle Timeline

1
Patch available
Oct 23, 2026 - 22:03 EUVD

DescriptionCVE.org

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, the scorer invoke, register, and GenAI evaluate endpoints, including unauthenticated POST /ajax-api/3.0/mlflow/scorer/invoke, accept serialized third-party scorer data that Scorer.model_validate_json resolves using a module-path allowlist without constraining the selected class or its constructor arguments. When optional trulens and trulens-providers-litellm packages are installed, an attacker can select mlflow.genai.scorers.trulens, choose a model URI outside MLflow's native provider registry so execution uses the LiteLLM fallback, and supply api_base and api_key values that cause the server to send an outbound request to an attacker-chosen or internal host with attacker-controlled headers and body. The vulnerable deserialization occurs before a tracking-store lookup or job submission. This issue is fixed in version 3.17.0.

Threat Intelligence Overview

EPSS Score
0.4%
Top 62% exploitable
Prevalence
Medium
popular open-source MLOps platform, but domain-specific to ML teams
Threat Intel
1
1 sources
Exploit
POC
Public exploit code exists
Social Media
2
Sightings
Data Quality
6 sources
Confidence: High

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC Yes
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
Poc
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact· derived
Medium

Priority Score

52
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.

Insecure deserialization occurs when an application converts serialized data (a stream of bytes representing an object's state) back into a living object without proper validation.

More in Mlflow

View all
CVE-2026-64849 CRITICAL POC
9.3 Aug 17

Server-side request forgery in MLflow before 3.15.0 lets remote unauthenticated attackers coerce the server into making

CVE-2024-8859 HIGH POC
7.5 Mar 20

A path traversal vulnerability exists in mlflow/mlflow version 2.15.1. Rated high severity (CVSS 7.5), this vulnerabilit

CVE-2023-3765 CRITICAL POC
10.0 Jul 19

Absolute Path Traversal in GitHub repository mlflow/mlflow prior to 2.5.0. Rated critical severity (CVSS 10.0), this vul

CVE-2026-116692 CRITICAL POC
9.8 Oct 27

Unauthenticated remote code execution in MLflow 3.12.0rc0 through 3.16.x lets any network caller reach the tracking serv

CVE-2026-0545 CRITICAL POC
9.8 Apr 03

MLflow's FastAPI job endpoints bypass basic-auth entirely, allowing network attackers to submit and execute jobs without

CVE-2023-6975 CRITICAL POC
9.8 Dec 20

A malicious user could use this issue to get command execution on the vulnerable machine and get access to data & models

CVE-2023-6974 CRITICAL POC
9.8 Dec 20

A malicious user could use this issue to access internal HTTP(s) servers and in the worst case (ie: aws instance) it cou

CVE-2023-6014 CRITICAL POC
9.8 Nov 16

An attacker is able to arbitrarily create an account in MLflow bypassing any authentication requirment. Rated critical s

CVE-2023-6018 CRITICAL POC
9.8 Nov 16

An attacker can overwrite any file on the server hosting MLflow without any authentication. Rated critical severity (CVS

CVE-2023-2780 CRITICAL POC
9.8 May 17

Path Traversal: '\..\filename' in GitHub repository mlflow/mlflow prior to 2.3.1. Rated critical severity (CVSS 9.8), th

CVE-2023-1177 CRITICAL POC
9.8 Mar 24

Path Traversal: '\..\filename' in GitHub repository mlflow/mlflow prior to 2.2.1. Rated critical severity (CVSS 9.8), th

CVE-2024-27133 CRITICAL POC
9.6 Feb 23

Insufficient sanitization in MLflow leads to XSS when running a recipe that uses an untrusted dataset. Rated critical se

Vendor StatusVendor

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy