VulnWatch VulnWatch
← Back to dashboard
High github · GHSA-gqch-g4w5-7qcw

MLflow: CreateModelVersion source validation does not check READ permission on referenced run_id

Published Aug 17, 2026 CVSS 7.1

Summary

The _validate_source_run and _validate_source_model functions in mlflow/server/handlers.py verify that a model version source path is within the artifact directory of a specified run or logged model, but do not check whether the caller has READ permission on that run or model. An authenticated MLflow user can therefore reference another user's run_id in CreateModelVersion, creating a model version whose artifact URI points at the victim's artifact directory. If the calling user has MANAGE permission on the registered model (which they do after creation), they can then read arbitrary files from the victim's artifact directory via GET /model-versions/get-artifact, bypassing the experiment-level READ permission gate on GET /get-artifact.

Details

POST /api/2.0/mlflow/model-versions/create is protected: the caller must have UPDATE permission on the registered model. However, the source/run_id validation performed inside _validate_source_run only verifies path containment, not caller authorization:

# mlflow/server/handlers.py  _validate_source_run()
def _validate_source_run(source: str, run_id: str) -> None:
    if is_local_uri(source):
        if run_id:
            store = _get_tracking_store()
            run = store.get_run(run_id)          #

Affected AI Products

training data mlflow
Get the weekly digest. Every Monday: top AI security stories of the week. Free.