/

CVE-2026-114123

Severity:

HIGH RISK

(7.5)

Missing Authentication (CWE-306) in D365 F&O MCP Server

CVE-2026-114123

Deferred

Vulnerability type

Category:

Missing Authentication

CWE:

CWE-306, CWE-1188

Impact:

Sensitive Information Disclosure

Severity:

HIGH RISK

(7.5)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

Before version 1.11.0, the documented Azure deployment for D365 F&O MCP Server could leave API-key authentication disabled when the optional key was blank. If the service was publicly reachable without network or upstream protections, unauthenticated users could query MCP tools and retrieve proprietary X++ source snippets and metadata.

Before version 1.11.0, the documented Azure deployment for D365 F&O MCP Server could leave API-key authentication disabled when the optional key was blank. If the service was publicly reachable without network or upstream protections, unauthenticated users could query MCP tools and retrieve proprietary X++ source snippets and metadata.

Affected context

The issue occurs in Azure App Service deployments that use the documented infrastructure templates with an empty API key. It becomes risky when the resulting HTTP listener is publicly accessible and no separate authentication, network restriction, or trusted upstream control protects the /mcp endpoint. Read-only server mode limits write operations but does not prevent anonymous read and search requests.

The issue occurs in Azure App Service deployments that use the documented infrastructure templates with an empty API key. It becomes risky when the resulting HTTP listener is publicly accessible and no separate authentication, network restriction, or trusted upstream control protects the /mcp endpoint. Read-only server mode limits write operations but does not prevent anonymous read and search requests.

Exploit preconditions

  • Attack surface: Publicly reachable HTTP /mcp endpoint on the deployed App Service
  • Required access: No application authentication is required when the API key is unset or empty
  • Trigger point: Unauthenticated JSON-RPC tools/call requests to MCP read and search tools
  • Why exploitation is possible: The authentication middleware permits requests when no API key is configured, while the service binds to all interfaces by default
  • Scope limitation: Deployments with a configured API key, effective upstream authentication, or restrictive network controls are outside this exposure scenario
  • Attack surface: Publicly reachable HTTP /mcp endpoint on the deployed App Service
  • Required access: No application authentication is required when the API key is unset or empty
  • Trigger point: Unauthenticated JSON-RPC tools/call requests to MCP read and search tools
  • Why exploitation is possible: The authentication middleware permits requests when no API key is configured, while the service binds to all interfaces by default
  • Scope limitation: Deployments with a configured API key, effective upstream authentication, or restrictive network controls are outside this exposure scenario

Why this happens

The deployment templates initialize an authentication secret to an empty value and pass it into the application configuration. The middleware interprets the missing or empty value as a reason to bypass authentication rather than fail closed, creating a permissive security default. This maps primarily to CWE-306: Missing Authentication for Critical Function and also relates to CWE-1188: Insecure Default Initialization of Resource, because a security-sensitive setting is initialized insecurely.

The deployment templates initialize an authentication secret to an empty value and pass it into the application configuration. The middleware interprets the missing or empty value as a reason to bypass authentication rather than fail closed, creating a permissive security default. This maps primarily to CWE-306: Missing Authentication for Critical Function and also relates to CWE-1188: Insecure Default Initialization of Resource, because a security-sensitive setting is initialized insecurely.

Potential impact

  • Attackers could retrieve proprietary X++ source snippets
  • Exposed data may reveal business logic and implementation details
  • Security roles, privileges, and authorization structure could be disclosed
  • Extension and event-handler relationships could be enumerated
  • Labels and metadata indexed from PackagesLocalDirectory could be exposed
  • Disclosure could support targeted attacks, code analysis, or intellectual-property theft
  • Attackers could retrieve proprietary X++ source snippets
  • Exposed data may reveal business logic and implementation details
  • Security roles, privileges, and authorization structure could be disclosed
  • Extension and event-handler relationships could be enumerated
  • Labels and metadata indexed from PackagesLocalDirectory could be exposed
  • Disclosure could support targeted attacks, code analysis, or intellectual-property theft

General mitigation guidance

Mitigation generally focuses on enforcing authentication by default and preventing insecure deployment configuration.

Common defensive patterns include:

  • Fail closed when an API key or equivalent credential is absent, empty, or invalid
  • Require explicit configuration of strong secrets before the service starts
  • Place the MCP endpoint behind independently enforced identity-aware authentication
  • Restrict ingress with private networking, allowlists, or equivalent network policy
  • Minimize the data exposed through read and search tools and apply authorization per operation
  • Run the service with least privilege and avoid indexing more source or metadata than necessary
  • Add deployment-policy checks that reject empty authentication settings

Mitigation generally focuses on enforcing authentication by default and preventing insecure deployment configuration.

Common defensive patterns include:

  • Fail closed when an API key or equivalent credential is absent, empty, or invalid
  • Require explicit configuration of strong secrets before the service starts
  • Place the MCP endpoint behind independently enforced identity-aware authentication
  • Restrict ingress with private networking, allowlists, or equivalent network policy
  • Minimize the data exposed through read and search tools and apply authorization per operation
  • Run the service with least privilege and avoid indexing more source or metadata than necessary
  • Add deployment-policy checks that reject empty authentication settings

How teams detect issues like this

Organizations can identify this class of issue through:

  • Static analysis and configuration checks for empty authentication defaults
  • Code review of middleware branches that bypass validation for missing credentials
  • Infrastructure-as-code rules detecting blank API-key parameters or publicly exposed listeners
  • Deployment scans that verify authentication and ingress restrictions are effective
  • Runtime monitoring for anonymous requests to /mcp and unusual enumeration of read or search tools
  • Policy enforcement requiring non-empty secrets and approved network boundaries before deployment

Automated code and infrastructure review tools can help detect these patterns during pull requests and release workflows.

Organizations can identify this class of issue through:

  • Static analysis and configuration checks for empty authentication defaults
  • Code review of middleware branches that bypass validation for missing credentials
  • Infrastructure-as-code rules detecting blank API-key parameters or publicly exposed listeners
  • Deployment scans that verify authentication and ingress restrictions are effective
  • Runtime monitoring for anonymous requests to /mcp and unusual enumeration of read or search tools
  • Policy enforcement requiring non-empty secrets and approved network boundaries before deployment

Automated code and infrastructure review tools can help detect these patterns during pull requests and release workflows.

Sources

SourceLink
github.comgithub.com/dynamics365ninja/d365fo-mcp-server/commit/384394a81e1c6c1e0149586203395240a38fc818
github.comgithub.com/dynamics365ninja/d365fo-mcp-server/commit/e70bd051f817ebb652d664b10a944fe2c5495de2
github.comgithub.com/dynamics365ninja/d365fo-mcp-server/releases/tag/v1.11.0
github.comgithub.com/dynamics365ninja/d365fo-mcp-server/security/advisories/GHSA-8764-fh3m-wf7g

Frequently asked

questions

It can be remotely exploitable when the App Service is publicly reachable and authentication or equivalent network controls are absent. It is not applicable to deployments that effectively restrict attacker access.

No application account or API key is required when the API key setting is empty and the middleware permits unauthenticated requests.

Configure authentication to fail closed, require a valid credential or trusted identity before serving requests, and place the endpoint behind effective network restrictions or upstream authentication.

Treat security settings as mandatory deployment inputs, reject empty secrets in infrastructure validation, and continuously test deployed endpoints for anonymous access and excessive data exposure.

It can be remotely exploitable when the App Service is publicly reachable and authentication or equivalent network controls are absent. It is not applicable to deployments that effectively restrict attacker access.

No application account or API key is required when the API key setting is empty and the middleware permits unauthenticated requests.

Configure authentication to fail closed, require a valid credential or trusted identity before serving requests, and place the endpoint behind effective network restrictions or upstream authentication.

Treat security settings as mandatory deployment inputs, reject empty secrets in infrastructure validation, and continuously test deployed endpoints for anonymous access and excessive data exposure.

Find out what's already
exploitable in your codebase.