<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:webfeeds="http://webfeeds.org/rss/1.0"><channel><title>Mlflow (&gt;= 2.1.0, &lt; 3.15.0) - CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/products/mlflow--2.1.0--3.15.0/</link><description>Trending threats, MITRE ATT&amp;CK coverage, and detection metadata. Fed continuously.</description><generator>Hugo</generator><language>en</language><managingEditor>hello@craftedsignal.io</managingEditor><webMaster>hello@craftedsignal.io</webMaster><lastBuildDate>Tue, 01 Sep 2026 18:00:04 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/products/mlflow--2.1.0--3.15.0/feed.xml" rel="self" type="application/rss+xml"/><image><url>https://feed.craftedsignal.io/favicon-32x32.png</url><title>CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/</link><width>32</width><height>32</height></image><webfeeds:icon>https://feed.craftedsignal.io/favicon.svg</webfeeds:icon><item><title>MLflow Statsmodels Flavor Security Control Bypass</title><link>https://feed.craftedsignal.io/briefs/2026-09-mlflow-statsmodels-bypass/</link><pubDate>Tue, 01 Sep 2026 18:00:04 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-09-mlflow-statsmodels-bypass/</guid><description>The MLflow 'statsmodels' flavor fails to implement the 'MLFLOW_ALLOW_PICKLE_DESERIALIZATION' security control, allowing unauthenticated attackers to achieve arbitrary code execution via crafted pickle model artifacts.</description><content:encoded><![CDATA[<p>MLflow contains a security vulnerability where the <code>mlflow.statsmodels</code> flavor bypasses the <code>MLFLOW_ALLOW_PICKLE_DESERIALIZATION</code> security control. This control was originally introduced to prevent unsafe <code>pickle.load</code> execution during model loading, specifically to mitigate risks associated with CVE-2024-37052 through CVE-2024-37060. When operators set this variable to <code>False</code>, they intend to block all pickle-based deserialization. However, the <code>mlflow.statsmodels</code> implementation completely omits this security guard. An attacker who can upload or place a crafted MLmodel artifact into an accessible artifact store can trigger arbitrary code execution on any system or process that invokes <code>mlflow.pyfunc.load_model()</code> against the malicious model, regardless of the environment configuration. This vulnerability effectively nullifies a primary defense-in-depth measure against remote code execution in MLflow deployments.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>Attacker identifies an accessible MLflow artifact store or model registry without authentication (default deployments).</li>
<li>Attacker crafts a malicious <code>model.pkl</code> payload that triggers command execution upon deserialization.</li>
<li>Attacker creates a corresponding <code>MLmodel</code> YAML file specifying <code>mlflow.statsmodels</code> as the loader module.</li>
<li>Attacker uploads the malicious <code>model.pkl</code> and <code>MLmodel</code> files to the target artifact store.</li>
<li>Attacker influences a target application or ML pipeline to call <code>mlflow.pyfunc.load_model()</code> with the path to the malicious model.</li>
<li>The <code>mlflow.pyfunc.load_model()</code> function dispatches the load request to <code>mlflow.statsmodels._load_pyfunc()</code>.</li>
<li><code>mlflow.statsmodels</code> executes <code>smio.load_pickle()</code> without checking the <code>MLFLOW_ALLOW_PICKLE_DESERIALIZATION</code> environment variable.</li>
<li>The malicious pickle payload deserializes, resulting in arbitrary code execution with the privileges of the calling process.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation allows unauthenticated attackers to execute arbitrary code with the permissions of the MLflow service or the application loading the model. This can lead to full system compromise, exfiltration of sensitive model data, or persistence within the environment. Targeted sectors include organizations leveraging MLflow for MLOps, particularly those with internet-exposed model registries lacking authentication.</p>
<h2 id="recommendation">Recommendation</h2>
<ol>
<li>Upgrade MLflow to version 3.15.0 or later immediately to include the guard logic.</li>
<li>Implement strict authentication for all MLflow artifact stores and model registries to prevent unauthorized model uploads.</li>
<li>Audit all artifact stores for suspicious or unknown <code>MLmodel</code> files referencing the <code>mlflow.statsmodels</code> flavor.</li>
<li>If upgrading is not immediately feasible, implement strict file-system access controls (ACLs) on model storage locations to ensure only trusted service identities can modify model artifacts.</li>
</ol>
]]></content:encoded><category domain="severity">high</category><category domain="type">advisory</category></item></channel></rss>