<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://db.gcve.eu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Tue, 27 Oct 2026 23:17:27 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-115886</title>
      <link>https://db.gcve.eu/vuln/fkie_cve-2026-115886</link>
      <description>&lt;p&gt;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&amp;#39;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.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;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&amp;#39;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.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/fkie_cve-2026-115886</guid>
    </item>
    <item>
      <title>GHSA-2wqp-q3c6-ccj5 — MLflow: SSRF on unauthenticated MLflow servers via third-party scorer kwargs in the scorer invoke, register, and GenAI…</title>
      <link>https://db.gcve.eu/vuln/ghsa-2wqp-q3c6-ccj5</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: mlflow&lt;/p&gt;
&lt;p&gt;### Summary
MLflow&amp;#39;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).&lt;/p&gt;
&lt;p&gt;### 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`:&lt;/p&gt;
&lt;p&gt;```python
data = serialized.third_party_scorer_data          # attacker JSON
module_path = data.get(&amp;#34;module&amp;#34;) or &amp;#34;&amp;#34;
class_name = data.get(&amp;#34;class&amp;#34;)
if not any(module_path == m or module_path.startswith(m + &amp;#34;.&amp;#34;)
           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(&amp;#34;kwargs&amp;#34;) or {})  # kwargs NOT constrained
...
init_kwargs[&amp;#34;model&amp;#34;] = data[&amp;#34;model&amp;#34;]               # attacker model URI
scorer_instance = scorer_class(**init_kwargs)      # reflective instantiation
```&lt;/p&gt;
&lt;p&gt;The allowlist (`mlflow/genai/scorers/scorer_utils.py:46-51`) only gates the import pat…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: mlflow&lt;/p&gt;
&lt;p&gt;### Summary
MLflow&amp;#39;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).&lt;/p&gt;
&lt;p&gt;### 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`:&lt;/p&gt;
&lt;p&gt;```python
data = serialized.third_party_scorer_data          # attacker JSON
module_path = data.get(&amp;#34;module&amp;#34;) or &amp;#34;&amp;#34;
class_name = data.get(&amp;#34;class&amp;#34;)
if not any(module_path == m or module_path.startswith(m + &amp;#34;.&amp;#34;)
           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(&amp;#34;kwargs&amp;#34;) or {})  # kwargs NOT constrained
...
init_kwargs[&amp;#34;model&amp;#34;] = data[&amp;#34;model&amp;#34;]               # attacker model URI
scorer_instance = scorer_class(**init_kwargs)      # reflective instantiation
```&lt;/p&gt;
&lt;p&gt;The allowlist (`mlflow/genai/scorers/scorer_utils.py:46-51`) only gates the import pat…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-2wqp-q3c6-ccj5</guid>
    </item>
  </channel>
</rss>
