MEDIUMCVSS v3.1 6.5Vulnerability

CVE-2026-115886

### Summary MLflow's tracking server exposes `POST /ajax-api/3.0/mlflow/scorer/invoke` with **no authentication**, and the handler reflectively instantiates an attacker-named class from attacker-supplied JSON with unconstrained constructor kwargs. With the optional `trulens` + `trulens-providers-litellm` packages installed, an unauthenticated attacker can force the server to make an outbound HTTP request to an arbitrary host of their choosing, carrying attacker-controlled headers (SSRF). ### Details `Scorer.model_validate_json()` reflects a class name from a JSON payload behind an import-path allowlist that never constrains the reflected attribute or its kwargs, in `mlflow/genai/scorers/base.py:549-604`: ```python data = serialized.third_party_scorer_data # attacker JSON module_path = data.get("module") or "" class_name = data.get("class") if not any(module_path == m or module_path.startswith(m + ".") for m in THIRD_PARTY_SCORER_ALLOWED_MODULES): raise MlflowException.invalid_parameter_value(...) module = importlib.import_module(module_path) scorer_class = getattr(module, class_name, None) # attribute NOT constrained ... init_kwargs: dict[str, Any] = dict(data.get("kwargs") or {}) # kwargs NOT constrained ... init_kwargs["model"] = data["model"] # attacker model URI scorer_instance = scorer_class(**init_kwargs) # reflective instantiation ``` The allowlist (`mlflow/genai/scorers/scorer_utils.py:46-51`) only gates the import path: ```python THIRD_PARTY_SCORER_ALLOWED_MODULES = frozenset({ "mlflow.genai.scorers.ragas", "mlflow.genai.scorers.deepeval", "mlflow.genai.scorers.trulens", "mlflow.genai.scorers.phoenix", }) ``` For a `mlflow.genai.scorers.trulens` class, the forwarded `model`/`kwargs` reach an outbound LLM client through a routing choice the attacker controls (`mlflow/genai/scorers/trulens/models.py:97-121`): ```python backend = ScorerLLMClient(model_uri) if backend.route == "databricks":

Properties

Summary
MLflow: SSRF on unauthenticated MLflow servers via third-party scorer kwargs in the scorer invoke, register, and GenAI evaluate endpoints
Severity
medium
Nvd fetched at
2026-10-23T22:30:12.098505+00:00
Cvss score
6.5
Cvss severity
MEDIUM
Retrieved at
2026-10-23T22:32:28+00:00
Ghsa published
2026-10-23T22:07:26Z
Source url
https://github.com/advisories/GHSA-2wqp-q3c6-ccj5
Ghsa updated
2026-10-23T22:07:27Z
Ghsa id
GHSA-2wqp-q3c6-ccj5
Last source
GitHub Advisory Database
Score
6.5
Cvss version
3.1
Cve id
CVE-2026-115886
Cvss vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N
First seen by Signal
2026-10-23T22:32:25+00:00
Is ghsa only
false
Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N
Published at
2026-10-23T22:16:58.110
Last modified
2026-10-23T22:16:58.110

Related Entities (4)

AFFECTS (1)

→[Software]pip/mlflow

VULNERABLE_TO (1)

←[Software]pip/mlflow

Explore deeper with Ninja Signal's threat intelligence graph

CVE-2026-115886 (CVSS v3.1 6.5) — Ninja Signal Threat Intelligence | Ninja Signal