Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconDeveloper invokes winml-cli serve on localhost
-
DeliveryAttacker lures developer to malicious webpage
-
ExploitBrowser sends cross-origin POST to localhost API endpoint
-
InstallPayload sets trust_remote_code=true parameter
-
C2Server passes flag to AutoConfig.from_pretrained
-
ExecuteServer downloads attacker-controlled model Python code
-
ImpactArbitrary code executes as developer user
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A02:2025 - Security Misconfiguration
ASVS 5.0
V13 - Configuration CORS policy restriction
|
| Exploitation Conditions | The |
| Impact | The CVSS 4.0 score of 8.6 (AV:N/AC:L/AT:N/PR:N/UI:A/VC:H/VI:H/VA:H) reflects the realistic threat model accurately: the API is effectively network-accessible via any browser tab, no authentication is required, but active user interaction - visiting a malicious site while the server is running - is a mandatory precondition. Real-world risk is bounded by the requirement that the victim be a developer actively running |
| Exploit ScenarioDerived | A developer running |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 02, 2026
Unauthenticated cross-origin RCE in Windows ML CLI (winml-cli < 0.4.0) is reachable when a developer runs the serve command, which exposes a localhost HTTP API with a wildcard CORS policy and no authentication gate. Any malicious webpage visited by the user while the server is running can send cross-origin requests to /v1/cli/build or /v1/cli/config, inject trust_remote_code=true, and cause the server to call AutoConfig.from_pretrained(trust_remote_code=True) - downloading and executing attacker-controlled Python code from a remote model repository as the server user. The vendor has released a fix in version 0.4.0; no public exploit is identified at time of analysis.
RemediationAI
Upgrade to Windows ML CLI 0.4.0, which introduces SameOriginMiddleware (added in src/winml/modelkit/serve/_security.py) that validates the HTTP Origin header on every request and returns HTTP 403 for cross-origin requests, a loopback-only route restriction for sensitive API paths, and a _require_remote_code_execution_allowed() guard in both _autoconfig.py and hf.py that must be satisfied before trust_remote_code=True is accepted. The fix also sets proxy_headers=False in uvicorn invocations to block header-spoofing bypass paths. The patch is confirmed via commit f4073e0ef4700a25b623487e7e45c421ca0b9993 and PR #1321 at https://github.com/microsoft/winml-cli/pull/1321. For users who cannot upgrade immediately, avoid running winml-cli serve concurrently with general web browsing sessions, and restrict the server's listening port using a host-based firewall rule to deny connections from browser processes - noting this workaround is operationally fragile and does not substitute for the patch.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in pypi
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Windows ML CLI is a Microsoft open-source developer tool (CPE: cpe:2.3:a:microsoft:winml-cli) for packaging, optimizing, and serving AI models on Windows ML. The serve subcommand starts a uvicorn/FastAPI HTTP server on localhost. The root cause is CWE-942 (Permissive Cross-domain Policy with Untrusted Domains): both src/winml/modelkit/serve/cli_api.py and src/winml/modelkit/serve/app.py configure CORS with a wildcard allow_origins='*', which instructs the browser to permit cross-origin responses from any web origin. Because the API has no authentication layer, any JavaScript running in the browser can successfully POST to the localhost endpoints. The dangerous path flows through src/winml/modelkit/loader/_autoconfig.py, which passes trust_remote_code=True directly to Hugging Face's AutoConfig.from_pretrained(), causing Python module code embedded in an attacker-controlled model repository to be imported and executed on the server.
Know when Winml Cli gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Network-reachable via browser with no API auth (PR:N), but requires user to visit malicious site (UI:R); full RCE grants C:H/I:H/A:H on the developer's system without scope change.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Windows ML CLI is a command line tool for building portable, performant, and high-quality AI models for Windows ML. Prior to 0.4.0, the src/winml/modelkit/serve/cli_api.py component exposes WinML CLI commands through a localhost HTTP API without authentication and configures the allow_origins setting as a wildcard in both src/winml/modelkit/serve/cli_api.py and src/winml/modelkit/serve/app.py. A malicious website loaded by a user can send cross-origin requests to /v1/cli/build or /v1/cli/config and set the trust_remote_code parameter to true, which is converted to the --trust-remote-code command-line flag without validation. This reaches AutoConfig.from_pretrained with trust_remote_code=True in src/winml/modelkit/loader/_autoconfig.py and imports Python code from an attacker-controlled model repository, resulting in arbitrary code execution as the server user. This issue is fixed in version 0.4.0.
Articles & Coverage 1
Technical POC Analysis
CWE-942 - permissive cross-domain policy combined with a missing authentication gate on a localhost HTTP API.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Windows ML CLI versions below 0.4.0 allow unauthenticated remote code execution through the local model serving feature; any malicious webpage visited by a developer while the server is running can inject code and execute arbitrary Python commands on their machine. This directly threatens development environments and proprietary ML model assets across teams using Microsoft's ML.NET framework.
Apply vendor patch (winml-cli 0.4.0 or later). If immediate patching is unavailable, restrict the serve command to isolated development networks disconnected from shared internet access; enforce browser policies to disable JavaScript in environments running the model server; and monitor localhost connections for anomalous cross-origin requests to /v1/cli/build and /v1/cli/config endpoints.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
EUVD-2026-70264
GHSA-96p9-rh4f-92cf
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB