Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessDiscover public App Service /mcp endpoint
-
ExploitSend unauthenticated JSON-RPC tools/call request
-
ExecutionInvoke read tools (search, get_object_info, find_references)
-
ImpactExfiltrate indexed X++ source, metadata, and security-role structure
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Authentication required for critical functions
MITRE ATT&CK
1 technique across 1 tactic: Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires that the server was provisioned via the officially documented Azure one-click deployment (infrastructure/azuredeploy.json and infrastructure/main.bicep) with the optional apiKey parameter left at its empty-string default, which propagates to an unset/empty API_KEY App Service setting; apiKeyAuth.ts then passes requests through without authentication while index.ts binds the listener to 0.0.0.0, yielding a publicly reachable App Service. The attacker must additionally be able to reach the /mcp endpoint over the network. Limiting factors that place a deployment OUTSIDE this exposure: a configured API key, effective upstream authentication, or network restrictions blocking attacker access. Note that MCP_SERVER_MODE=read-only does NOT mitigate it - it only limits the exposure to read/search tools (search, get_object_info, batch_get_info, extension_info, security_info, find_references, find_event_handlers). Affected versions are those prior to 1.11.0. |
| Impact | The CVSS 3.1 base score of 7.5 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N) frames this as a trivially reachable, unauthenticated, network-facing confidentiality breach, and the vector is internally consistent with CWE-306 (Missing Authentication). However, the description makes clear the exposure is conditional on operator behavior: it only arises when a deployer uses the Azure one-click template, leaves the optional apiKey blank, and adds no network restriction or upstream authentication - so the raw PR:N score somewhat overstates universal risk, since correctly keyed or network-restricted deployments are explicitly out of scope. Impact is confidentiality-only (I:N/A:N): the read-only mode permits information disclosure of proprietary X++ source and metadata but not modification or denial of service, so this is a source/IP-leak issue rather than RCE. No EPSS score, no CISA KEV listing, and no public exploit are present in the provided data, so there is no evidence of active exploitation or mass scanning; prioritization should be driven by whether an organization actually ran the keyless public deployment, not by the headline score alone. Key missing signals: EPSS probability is absent and KEV status is not confirmed - treat widespread-exploitation assumptions as unverified. |
| Exploit ScenarioDerived | An organization follows the documented Azure one-click deployment, accepts the default empty apiKey, and leaves the App Service publicly reachable on 0.0.0.0 with no network controls. Because AV:N/AC:L/PR:N, a remote unauthenticated attacker who discovers the /mcp endpoint sends JSON-RPC tools/call requests and invokes read tools such as search and get_object_info to pull indexed X++ source and metadata. No public exploit is identified at time of analysis, but exploitation requires only a standard HTTP client and no special tooling. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 21, 2026
Unauthenticated network access to D365 F&O MCP Server instances prior to version 1.11.0 exposes indexed proprietary X++ source code and metadata through the /mcp JSON-RPC endpoint. The officially documented Azure one-click deployment (infrastructure/azuredeploy.json and infrastructure/main.bicep) defaults the optional apiKey parameter to an empty string and passes it into the App Service API_KEY setting; with that value empty, src/middleware/apiKeyAuth.ts lets requests through without authentication while src/index.ts binds the listener to 0.0.0.0, so any deployer who leaves the key blank and adds no network restrictions or upstream authentication publishes the server to the internet. Attackers can then invoke read/search tools (search, get_object_info, batch_get_info, extension_info, security_info, find_references, find_event_handlers) to harvest business logic, extension and event-handler wiring, and security-role and privilege structure; the CVSS 3.1 score is 7.5 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N) matching CWE-306, and no public exploit was identified at time of analysis.
RemediationAI
Vendor-released patch: upgrade to D365FO MCP Server v1.11.0 (release https://github.com/dynamics365ninja/d365fo-mcp-server/releases/tag/v1.11.0), which integrates fixes from commits 384394a81e1c6c1e0149586203395240a38fc818 and e70bd051f817ebb652d664b10a944fe2c5495de2 - the server now resolves the bind host from the key state, defaulting to 127.0.0.1 when no API key is present, refusing startup if HOST requests a public interface without a key, and the Azure templates no longer silently produce an unauthenticated public App Service. For deployments that cannot upgrade immediately, the primary compensating control is to set a strong API_KEY on the App Service (for example generate one with 'openssl rand -hex 32') and supply it as X-Api-Key or Authorization: Bearer from MCP clients, with the trade-off of requiring key distribution and rotation to every client; alternatively enable App Service Authentication/Easy Auth in front of the site (trade-off: requires Entra ID or another identity provider configuration and all clients must authenticate at the platform layer), or apply App Service access restrictions / private endpoints / IP allowlists so /mcp is unreachable from untrusted networks (trade-off: blocks legitimate remote clients unless their egress ranges are enumerated). Do not rely on MCP_SERVER_MODE=read-only as a mitigation - it only narrows the exposed toolset to read/search functions and does not prevent anonymous access. Confirm the remediation by requesting /mcp without credentials and verifying the server rejects unauthenticated JSON-RPC calls; consult https://github.com/dynamics365ninja/d365fo-mcp-server/security/advisories/GHSA-8764-fh3m-wf7g for the vendor advisory.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The D365 F&O MCP Server is a Model Context Protocol (MCP) server written in TypeScript that exposes Dynamsoft 365 Finance & Operations X++ code and metadata - originally indexed from PackagesLocalDirectory - to MCP clients over HTTP using JSON-RPC tools/call requests at the /mcp path. Authentication is implemented as Express-style middleware in src/middleware/apiKeyAuth.ts, which expects a shared secret in API_KEY and checks it via the X-Api-Key header or Authorization: Bearer token; the root cause is CWE-306 (Missing Authentication for Critical Function), because when API_KEY is unset or empty the middleware short-circuits into a pass-through mode rather than failing closed. Compounding this, src/index.ts binds the HTTP transport to 0.0.0.0 by default, and the Azure deployment templates in infrastructure/azuredeploy.json and infrastructure/main.bicep declare apiKey as an optional parameter with an empty-string default that is wired directly into the App Service configuration, so a template-driven deployment can silently produce a publicly reachable App Service with no authentication layer. The MCP_SERVER_MODE=read-only setting only restricts which tools are exposed; it does not gate access, so the read/search toolset still returns source snippets, extension and event-handler registrations, and security-role and privilege metadata to anonymous callers. The fix in 1.11.0 introduces a resolveBindHost helper that defaults the bind address to 127.0.0.1 when no API key (or explicit ALLOW_UNAUTHENTICATED) is configured, and refuses to start if HOST explicitly requests a public interface without a key.
Know when Azure 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
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
A keyless public App Service passes unauthenticated HTTP requests, so AV:N/AC:L/PR:N/UI:N; read-only tools disclose proprietary source and metadata (C:H) with no write or availability impact (I:N/A:N).
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
D365 F&O MCP Server is a Model Context Protocol server for querying Dynamics 365 Finance & Operations X++ code and metadata. Prior to version 1.11.0, the officially documented Azure one-click deployment uses infrastructure/azuredeploy.json and infrastructure/main.bicep to default the apiKey parameter to an empty string and pass it to the App Service API_KEY setting. With API_KEY unset or empty, src/middleware/apiKeyAuth.ts passes requests through without authentication, while src/index.ts binds the HTTP listener to 0.0.0.0 by default. If the deployer leaves the optional key blank and does not add separate network restrictions or upstream authentication, the resulting public App Service allows unauthenticated JSON-RPC tools/call requests to /mcp. The deployment's MCP_SERVER_MODE=read-only setting does not prevent anonymous access to read/search tools, including search, get_object_info, batch_get_info, extension_info, security_info, find_references, and find_event_handlers, exposing indexed proprietary X++ source snippets and metadata. Exposed information can include business logic, extension and event-handler wiring, security-role and privilege structure, and labels originally indexed from PackagesLocalDirectory. Deployments protected by a configured API key, effective upstream authentication, or network restrictions preventing attacker access are outside this unauthenticated exposure scenario. This issue is fixed in version 1.11.0.
Technical POC Analysis
CWE-306 (Missing Authentication for Critical Function), with a secondary CWE-1188 (insecure default initialization) contribution from the deployment templates.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Azure one-click deployments of the Dynamics 365 Finance & Operations MCP Server can silently publish the organization's proprietary X++ source code, extension and event-handler wiring, and security-role and privilege structure to the public internet whenever the optional apiKey parameter is left at its documented empty-string default. No credentials or user interaction are required, so the exposure is invisible to traditional access monitoring and persists until someone checks the configuration. Leadership should treat this as an intellectual-property and reconnaissance exposure affecting any business unit running D365 F&O with this tooling deployed from the vendor templates, since the harvested security model materially shortens the path for follow-on attacks against the ERP platform.
No vendor-released patch identified at time of analysis; interim mitigations are to set a strong, non-empty API_KEY on every App Service instance (overriding the empty-string template default), enforce App Service access restrictions or a private endpoint so /mcp is not internet-reachable, front the service with an authenticating reverse proxy or WAF, and retire or stop any MCP Server instance not actively in use. Because no public exploit was identified at time of analysis, prompt configuration hardening closes the exposure without requiring a code fix.
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
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
Privilege escalation in Microsoft's Azure Billing service allows unauthenticated, remote attackers to reach full comprom
Path traversal in pnpm's tarball extraction on Windows allows attackers to write files outside the intended package dire
Default password in Himmelblau Azure Entra ID suite 3.0.0-3.0.x. CVSS 10.0.
Privilege escalation in Azure Database for PostgreSQL allows an authenticated attacker with low privileges to elevate pr
Path traversal in Microsoft's Azure Logic Apps (CWE-22) lets a remote, unauthenticated attacker escape an intended restr
Default credentials in Cisco ISE cloud deployments on AWS/Azure/OCI. CVSS 9.9.
Unauthenticated remote attackers can reach a critical function inside Microsoft Azure AI Foundry that performs a privile
Deserialization of untrusted data in Azure SDK allows unauthorized code execution over a network. EPSS 0.32%.
Elevation of privilege vulnerability in Azure Front Door allows attackers to gain elevated access. Microsoft Azure cloud
Azure Front Door has an improper access control vulnerability (CVSS 9.8) allowing unauthorized attackers to elevate priv
Azure AD auth bypass in Devolutions Server 2025.3.15.0 and earlier.
Fleet device management software has a signature verification bypass that allows attackers to install malicious firmware
EUVD-2026-107365
NVD
CVE.org
EPSS
GitHub
VulDB
Exploit-DB