Back to Checks
Azure SQL Server does not have firewall rules allowing 0.0.0.0-255.255.255.255
sqlserver_unrestricted_inbound_access
Service: sqlserverSeverity: critical
OfficialBuilt-inVerified
Categories:internet-exposed
Resource Type:microsoft.sql/servers
Azure SQL Server server-level firewall rules are evaluated for an entry that allows the entire IPv4 space (0.0.0.0 to 255.255.255.255).
The finding identifies presence of this Internet-wide rule on the server firewall.
Risk
An Internet-wide rule permits unsolicited access from any host, enabling mass scanning, brute force, and exploitation of weak configurations.
- Confidentiality: unauthorized data access/exfiltration
- Integrity: malicious data/DDL changes
- Availability: resource abuse or DoS via excessive connections
Run this check with Prowler
Run in Prowler CloudRun
prowler azure --checks sqlserver_unrestricted_inbound_accessRecommendation
Remove the all-open rule and enforce least privilege.
- Restrict access to specific IPs/ranges
- Prefer private endpoints or VNet rules to avoid Internet exposure
- Layer controls (NSGs, Azure Firewall)
- Avoid broad exceptions like
Allow Azure servicesand never use0.0.0.0/0
Remediation
CLI
az sql server firewall-rule delete --resource-group <RESOURCE_GROUP> --server <SERVER_NAME> --name <RULE_NAME>Terraform
# Replace any allow-all firewall rule with a restricted range
resource "azurerm_mssql_firewall_rule" "<example_resource_name>" {
name = "<example_resource_name>"
server_id = "<example_resource_id>"
start_ip_address = "<START_IP>" # Critical: not 0.0.0.0
end_ip_address = "<END_IP>" # Critical: not 255.255.255.255
}NativeIaC
// Update the firewall rule to not allow the entire Internet
resource sqlServer 'Microsoft.Sql/servers@2021-11-01' existing = {
name: '<example_resource_name>'
}
resource restricted 'Microsoft.Sql/servers/firewallRules@2021-11-01' = {
name: '${sqlServer.name}/<example_resource_name>'
properties: {
startIpAddress: '<START_IP>' // Critical: not 0.0.0.0; restricts start IP
endIpAddress: '<END_IP>' // Critical: not 255.255.255.255; restricts end IP
}
}Other
1In the Azure portal, go to SQL servers and select your server
2Open Security > Networking
3Under Firewall rules, find any rule with Start IP 0.0.0.0 and End IP 255.255.255.255
4Select the rule and click Delete
5Click Save
Check Code
from prowler.lib.check.models import Check, Check_Report_Azure
from prowler.providers.azure.services.sqlserver.sqlserver_client import sqlserver_client
class sqlserver_unrestricted_inbound_access(Check):
def execute(self) -> Check_Report_Azure:
findings = []
for subscription, sql_servers in sqlserver_client.sql_servers.items():
subscription_name = sqlserver_client.subscriptions.get(
subscription, subscription
)
for sql_server in sql_servers:
report = Check_Report_Azure(
metadata=self.metadata(), resource=sql_server
)
report.subscription = subscription
report.status = "PASS"
report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription_name} ({subscription}) does not have firewall rules allowing 0.0.0.0-255.255.255.255."
for firewall_rule in sql_server.firewall_rules:
if (
firewall_rule.start_ip_address == "0.0.0.0"
and firewall_rule.end_ip_address == "255.255.255.255"
):
report.status = "FAIL"
report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription_name} ({subscription}) has firewall rules allowing 0.0.0.0-255.255.255.255."
break
findings.append(report)
return findings