Description
Ensure that Google Cloud VPC firewall rules do not allow unrestricted access (0.0.0.0/0 on TCP port 3389). Restrict RDP traffic to trusted IP addresses or IP ranges to reduce the attack surface and enhance security.
Ensure that Google Cloud VPC firewall rules do not allow unrestricted access (0.0.0.0/0 on TCP port 3389). Restrict RDP traffic to trusted IP addresses or IP ranges to reduce the attack surface and enhance security.
id: gcloud-unrestricted-rdp-access
info:
name: Check for Unrestricted RDP Access
author: princechaddha
severity: critical
description: |
Ensure that Google Cloud VPC firewall rules do not allow unrestricted access (0.0.0.0/0 on TCP port 3389). Restrict RDP traffic to trusted IP addresses or IP ranges to reduce the attack surface and enhance security.
impact: |
Allowing unrestricted access to TCP port 3389 exposes your virtual machines to brute-force or unauthorized access attacks through RDP.
remediation: |
Update your VPC firewall rules to allow RDP traffic only from trusted IP addresses or ranges.
reference:
- https://cloud.google.com/vpc/docs/firewalls
tags: cloud,devops,gcp,gcloud,vpc,firewall,security,rdp,gcp-cloud-config
flow: |
code(1)
for(let projectId of iterate(template.projectIds)){
set("projectId", projectId)
code(2)
for(let networkName of iterate(template.networks)){
set("networkName", networkName)
code(3)
set("firewallRules", template.firewallRules)
javascript(1)
}
}
self-contained: true
code:
- engine:
- sh
- bash
source: |
gcloud projects list --format="json(projectId)"
extractors:
- type: json
name: projectIds
internal: true
json:
- '.[].projectId'
- engine:
- sh
- bash
source: |
gcloud compute networks list --project $projectId --format="json(name)"
extractors:
- type: json
name: networks
internal: true
json:
- '.[].name'
- engine:
- sh
- bash
source: |
gcloud compute firewall-rules list --filter network=$networkName --sort-by priority --format="json(name,disabled,direction,sourceRanges,allowed[].ports)"
extractors:
- type: json
name: firewallRules
internal: true
json:
- '.[]'
javascript:
- code: |
let firewallRules = template.firewallRules;
if (typeof firewallRules === "string") {
firewallRules = JSON.parse(firewallRules);
}
let insecureRules = [];
for (let rule of firewallRules) {
if (
rule.disabled === false &&
rule.direction === "INGRESS" &&
Array.isArray(rule.sourceRanges) && rule.sourceRanges.includes("0.0.0.0/0") &&
Array.isArray(rule.allowed) &&
rule.allowed.some(allowed =>
Array.isArray(allowed.ports) &&
allowed.ports.includes("3389")
)
) {
insecureRules.push(rule.name);
}
}
if (insecureRules.length > 0) {
Export(`The firewall rules in network ${template.networkName} of project ${template.projectId} allow unrestricted RDP access: ${insecureRules.join(", ")}`);
}
extractors:
- type: dsl
dsl:
- response
# digest: 4b0a00483046022100d5e0ad6faaa3fe86ef419852afa791cc5c0cf496d44ab5e2c2c1bcf4e4305e08022100df5184c5d6471d9edf865376c51c6cd8b732628411b780b508ab4d6d9843a35a:922c64590222798bb761d5b6d8e72950
# Visit https://trap.biu.life/ to view exploit trends for this vulnerability.