{"vuid":"VU#369093","idnumber":"369093","name":"MLflow dspy and statsmodels flavors bypass pickle deserialization control","keywords":null,"overview":"### Overview\r\nA vulnerability in MLflow’s dspy and statsmodels model flavors allows unauthorized pickle deserialization executions despite a safety control. Specifically, the dspy flavor conditionally applies the control based on the model path’s file extension, and the statsmodels flavor does not apply the control.\r\n\r\n### Description\r\nMLflow is an open-source platform for managing machine learning lifecycles, including model packaging, versioning, and deployment. \"Flavors\" refer to the specialized frameworks through which supported models are stored and loaded. In response to previous vulnerability concerns, MLflow implemented the `MLFLOW_ALLOW_PICKLE_DESERIALIZATION` safety control to block and disable executing any pickle deserialization and subsequent loads per the user’s choice.\r\n\r\nWhen loading models through `mlflow.pyfunc.load_model(model)`, users must specify a model flavor and path in an MLmodel file. With the dspy flavor, MLflow checks the value of `MLFLOW_ALLOW_PICKLE_DESERIALIZATION`, and whether the specified model path ends in `.pkl`. A model path that does not end in `.pkl` (even if the file is actually a pickle file), will route to a separate branch for pickle deserialization, bypassing the safety control. However, when loading through the statsmodels flavor, there is no check for `MLFLOW_ALLOW_PICKLE_DESERIALIZATION` at all.\r\n\r\n### Impact\r\nExploitation of this vulnerability allows for arbitrary remote code execution through a malicious pickle-loaded payload, regardless of a user explicitly disallowing pickle serialization, through vulnerable flavor specifications in the MLmodel configuration file. The attack path requires write access to any location from which a user obtains MLflow models. This vulnerability was confirmed against MLflow 3.12.0.\r\n\r\n### Solution\r\nMLFlow could not be reached to coordinate this vulnerability; however, the statsmodels flavor was patched in versions >= 3.15.0. Users should upgrade immediately. Until a further fix remedying the dspy flavor vulnerability is available, MLflow users who wish to block pickle deserialization and loads should avoid loading any models via the dspy flavor.\r\n\r\n### Acknowledgements\r\nThanks to Prasanna Dabi for reporting this vulnerability. This document was written by Alex Lewis.","clean_desc":null,"impact":null,"resolution":null,"workarounds":null,"sysaffected":null,"thanks":null,"author":null,"public":["https://github.com/mlflow/mlflow/blob/master/mlflow/dspy/load.py","https://github.com/mlflow/mlflow/blob/master/mlflow/statsmodels/__init__.py","https://github.com/advisories/GHSA-gqvg-gmmx-x4hm"],"cveids":[],"certadvisory":null,"uscerttechnicalalert":null,"datecreated":"2026-09-16T17:10:46.218498Z","publicdate":"2026-09-16T17:10:46.009626Z","datefirstpublished":"2026-09-16T17:10:46.251142Z","dateupdated":"2026-09-16T17:10:46.009622Z","revision":1,"vrda_d1_directreport":null,"vrda_d1_population":null,"vrda_d1_impact":null,"cam_widelyknown":null,"cam_exploitation":null,"cam_internetinfrastructure":null,"cam_population":null,"cam_impact":null,"cam_easeofexploitation":null,"cam_attackeraccessrequired":null,"cam_scorecurrent":null,"cam_scorecurrentwidelyknown":null,"cam_scorecurrentwidelyknownexploited":null,"ipprotocol":null,"cvss_accessvector":null,"cvss_accesscomplexity":null,"cvss_authentication":null,"cvss_confidentialityimpact":null,"cvss_integrityimpact":null,"cvss_availabilityimpact":null,"cvss_exploitablity":null,"cvss_remediationlevel":null,"cvss_reportconfidence":null,"cvss_collateraldamagepotential":null,"cvss_targetdistribution":null,"cvss_securityrequirementscr":null,"cvss_securityrequirementsir":null,"cvss_securityrequirementsar":null,"cvss_basescore":null,"cvss_basevector":null,"cvss_temporalscore":null,"cvss_environmentalscore":null,"cvss_environmentalvector":null,"metric":null,"vulnote":247}