Check ID:
Provider: Azure
Service:
Severity: HIGH
Categories:
Resource type:
network_rdp_internet_access_restrictedProvider: Azure
Service:
networkSeverity: HIGH
Categories:
internet-exposedResource type:
microsoft.network/networksecuritygroupsWhat this check verifies
Azure NSG inbound rules are evaluated for public RDP exposure. The finding flags rules thatAllow TCP traffic to port 3389 from broad sources like 0.0.0.0/0, Internet, or *, including ranges that cover 3389.
Risk
Exposed RDP enables Internet-wide brute force and credential stuffing, risking unauthorized console access. Compromise can cause data theft (confidentiality), tampering or malware deployment (integrity), VM lockout or disruption (availability), and lateral movement within the VNet.Recommendation
Enforce least privilege for remote admin:- Remove
Allowto3389from0.0.0.0/0 - Limit access to fixed IPs or private networks
- Prefer Azure Bastion, JIT, or VPN/ExpressRoute
- Harden auth (strong keys, MFA) and monitor
Remediation
- CLI
- Terraform
- Native IaC
- Dashboard steps
az network nsg rule delete —resource-group <RESOURCE_GROUP> —nsg-name <example_resource_name> —name <RDP_RULE_NAME>
References
- https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/Network/unrestricted-rdp-access.html
- https://learn.microsoft.com/en-za/answers/questions/1374791/policy-to-block-the-creation-of-nsgs-with-rules-th
- https://learn.microsoft.com/en-us/azure/security/fundamentals/network-best-practices#disable-rdpssh-access-to-azure-virtual-machines
- https://learn.microsoft.com/en-us/security/benchmark/azure/security-controls-v3-network-security#ns-1-establish-network-segmentation-boundaries
Where this check fires
This check runs on every scheduled scan against your Azure account. Findings appear at Cloud Security → Findings filterable byCheck ID = network_rdp_internet_access_restricted. To re-evaluate after a fix, hit Run now on the account’s schedule under Cloud Security → Schedules — the next scan re-checks this control and marks the finding fixed or keeps it persistent.
← Back to Azure checks