Back to Checks
Route 53 domain has admin contact privacy protection enabled
route53_domains_privacy_protection_enabled
Service: route53Severity: medium
OfficialBuilt-inVerified
Categories:internet-exposed
Resource Type:Other
Route 53 domain administrative contact has privacy protection enabled, so WHOIS queries return redacted or proxy details.
Evaluates whether contact data is hidden instead of publicly listed.
Risk
Public WHOIS contact data exposes names, emails, phones, and addresses, enabling:
- Phishing/social engineering of the registrar
- SIM-swap or account takeover
- Domain hijacking, affecting DNS integrity/availability It also increases spam and targeted harassment.
Run this check with Prowler
Run in Prowler CloudRun
prowler aws --checks route53_domains_privacy_protection_enabledRecommendation
Enable WHOIS privacy for all contacts (admin, registrant, tech) to minimize exposure. Apply defense in depth: use dedicated, monitored contact emails, enforce transfer lock and MFA on registrar access, and regularly review settings. If a TLD lacks privacy, provide minimal, role-based contact details.
Remediation
CLI
aws route53domains update-domain-contact-privacy --domain-name <DOMAIN_NAME> --admin-privacyTerraform
resource "aws_route53domains_registered_domain" "<example_resource_name>" {
domain_name = "<example_resource_name>"
admin_privacy = true # Critical: enables admin contact privacy to pass the check
}Other
1Open the AWS Console and go to Route 53
2Click Registered domains and select <DOMAIN_NAME>
3Click Edit in Contact information
4Enable Privacy protection (ensures Admin contact privacy is on)
5Save changes
Check Code
from prowler.lib.check.models import Check, Check_Report_AWS
from prowler.providers.aws.services.route53.route53domains_client import (
route53domains_client,
)
class route53_domains_privacy_protection_enabled(Check):
def execute(self) -> Check_Report_AWS:
findings = []
for domain in route53domains_client.domains.values():
report = Check_Report_AWS(metadata=self.metadata(), resource=domain)
if domain.admin_privacy:
report.status = "PASS"
report.status_extended = (
f"Contact information is private for the {domain.name} domain."
)
else:
report.status = "FAIL"
report.status_extended = (
f"Contact information is public for the {domain.name} domain."
)
findings.append(report)
return findingsReferences
- https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-privacy-protection.html
- https://www.trendmicro.com/trendaivisiononecloudriskmanagement/knowledge-base/aws/Route53/privacy-protection.html
- https://support.icompaas.com/support/solutions/articles/62000233459-enable-privacy-protection-for-for-a-route53-domain-