Defender for Cloud attack path shows "internet exposure: TCP 3389 from 0.0.0.0/0" on a VM that has no public IP — insight never refreshes, Critical alert keeps re-notifying

Abou Ali 0 Reputation points
2026-10-19T11:33:42.2466667+00:00

Hi all,

I have a Critical attack-path alert in Defender for Cloud (CSPM) that re-notifies repeatedly with the same attack path ID. 14 attack paths in my sandbox subscription all enter through one Windows Server VM.

What the graph says

The path's "exposedToInternet" insight reports: effectiveRules = TCP 3389 from 0.0.0.0/0, exposureWidth "high". This has been identical since Oct 12 (same edge and node IDs).

What the live configuration says (checked Oct 19 with Get-AzEffectiveNetworkSecurityGroup)

  • No public IP on the VM NIC, no NIC-level NSG.
  • Subnet NSG: TCP 3389 allowed only from the Azure Bastion subnet (10.50.10.0/26), then Deny VirtualNetwork (priority 4000), the Defender JIT Deny rule (source 0.0.0.0/0, port 3389, priority 4096), and the default DenyAllInBound.
  • No VNet peerings, no load balancer in front of the VM.
  • JIT policy source restricted from * to the Bastion subnet on Oct 15; the insight did not change in the 4 days since.

Two things I can't explain

  1. The graph's effective rule (0.0.0.0/0, 3389) is exactly the JIT Deny rule. Could the graph be reading that Deny rule as an exposure?
  2. The insight "highRiskVulnerabilityInsights" reports maxCvssScore 9.8, but the highest CVSS in the recommendations for this VM is 9.6 (Chrome) and 9.1 (openssl).

I have already patched the software findings (OpenSSL via Azure Monitor Agent update, Chrome, 7-Zip, removed old SSMS). Findings tied to the path are still listed.

Questions

  • How is the "exposedToInternet" insight computed, and how often is it re-evaluated?
  • Is there a way to force a re-evaluation or mark a single attack path as a false positive?
  • Can the e-mail notifications be limited for one specific attack path while it is investigated (not only by severity threshold)?

Thanks!

Microsoft Security | Microsoft Defender | Microsoft Defender for Cloud
0 comments No comments

1 answer

Sort by: Most helpful
  1. AI answer

    2026-10-19T11:34:51.19+00:00

    Because the unchanged attack path has persisted for four days—well beyond the documented “up to 24 hours” removal period—capture its Azure Resource Graph payload and open an Azure support request for a stale or inconsistent Defender CSPM attack path rather than changing the already-correct NSG configuration.^1^

    Capture the evidence before escalation

    Run this in Azure portal → Resource Graph Explorer, replacing the placeholders:

    securityresources
    | where type =~ "microsoft.security/attackpaths"
    | where subscriptionId == "<subscription-id>"
    | where name == "<attack-path-id>"
    | project
        id,
        name,
        displayName = tostring(properties.displayName),
        refreshInterval = tostring(properties.refreshInterval),
        attackPathId = tostring(properties.AttackPathID),
        assessments = properties.assessments,
        graphComponent = properties.graphComponent
    

    Attack-path resources expose properties.refreshInterval, assessments, graph components, entities, connections, and insights through Azure Resource Graph.^2^

    Attach these items to the support request:

    • The ARG result, including refreshInterval and the complete exposedToInternet insight.
    • The attack-path ID, edge IDs, node IDs, and first/last observed timestamps.
    • Output from Get-AzEffectiveNetworkSecurityGroup.
    • NIC and subnet configuration showing no public IP, load balancer, peering, or other ingress path.
    • The JIT policy change timestamp.
    • Screenshots or exports showing the 9.8 insight versus the currently listed 9.6/9.1 findings.
    • Confirmation that the VM remained running long enough for scheduled vulnerability scanning. Agentless scanning runs once every 24 hours and stopped machines can retain outdated results.^3^

    How exposedToInternet is computed

    A missing public IP alone does not determine the result. Defender for Cloud evaluates:

    1. Control-plane configuration, such as public IPs and load balancers.
    2. Network-path reachability, including routing, firewalls, NSGs, VNets, and subnets.
    3. For attack paths, cloud-security-graph context and active reachability signals.^4^^5^

    “High” or wide exposure means the calculated exposure is broad according to networking rules; it is then used in attack-path generation and risk prioritization.^4^

    Nothing in the published behavior establishes that Defender interprets a JIT Deny rule as an allow rule. The matching 0.0.0.0/0:3389 values are therefore evidence of a potentially stale or incorrectly classified graph component, not proof that the deny rule caused the exposure. Do not remove the JIT deny rule merely to test that theory.

    Refresh and forced reassessment

    Cloud Security Explorer publishes workload-configuration snapshots at regular intervals and refreshes that data daily.^6^ Attack-path documentation says a resolved path can take up to 24 hours to disappear.^1^

    The documented UI and API do not provide a button or operation to force recomputation of one attack path. The refreshInterval property is informational metadata; querying the resource does not trigger a refresh.

    Since the path remained unchanged across several expected cycles, waiting longer is no longer the useful next step.

    CVSS 9.8 versus 9.6/9.1

    The attack path is built from graph insights and mapped security assessments, while the Recommendations page displays the currently available recommendation findings. A mismatch can therefore occur when those datasets are on different assessment cycles. The available documentation does not define exactly how maxCvssScore is selected or prove which historical/current CVE supplied 9.8.

    Include the properties.assessments mapping and the full highRiskVulnerabilityInsights object in the support case. That lets support determine whether 9.8 refers to:

    • a stale remediated finding,
    • another assessment not currently visible in the VM recommendation list, or
    • incorrect score normalization.

    False-positive and email controls

    There is no documented control to mark one Defender for Cloud attack-path instance as a false positive or suppress only its notifications.

    Email configuration supports:

    • recipients or Azure roles;
    • alert severity threshold;
    • attack-path risk threshold.

    It does not document filtering by attack-path ID, VM, recommendation, or subscription resource. Configure it under Defender for Cloud → Environment settings → subscription → Email notifications. Critical attack-path email volume is limited to one email per 30 minutes per address.^7^

    Consequently, changing the threshold would suppress every path below the selected risk level, not only this path. If retaining other Critical notifications is required, leave the threshold unchanged and use an inbox/mail-flow rule keyed to this path ID as a temporary external workaround; remove it after Microsoft clears or recalculates the path.


    References

    1. Identify and remediate attack paths in Microsoft Defender for Cloud (defender-portal)
    2. Retrieve attack path data with API
    3. Enable agentless machine scanning
    4. Internet exposure analysis
    5. Security explorer and attack paths in Microsoft Defender for Cloud
    6. Build queries with cloud security explorer - Microsoft Defender for ...
    7. Configure email notifications for alerts and attack paths
    AI-generated content may be incorrect. Read our transparency notes for more information.

    Was this answer helpful?

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.