Back to Checks
Prowlerprowler-provider-cloudflare
TLS 1.3 is enabled
zone_tls_1_3_enabled
Service: zoneSeverity: medium
OfficialBuilt-inVerified
Categories:encryption
Resource Type:Zone
Cloudflare zones are assessed for TLS 1.3 configuration by checking if it is enabled to benefit from improved security through simplified cipher suites and faster handshakes with zero round-trip time resumption.
Risk
Without TLS 1.3, connections use older TLS versions with less secure characteristics.
- Confidentiality: legacy TLS versions have more complex cipher negotiations that may expose weaknesses
- Integrity: older protocols lack protection against downgrade attacks that TLS 1.3 provides
- Performance: slower handshakes impact user experience and increase latency
Run this check with Prowler
Run in Prowler CloudRun
prowler cloudflare --checks zone_tls_1_3_enabledRecommendation
Enable TLS 1.3 to provide the most secure and efficient TLS connections.
- All modern browsers support TLS 1.3 ensuring broad compatibility
- TLS 1.3 removes obsolete cryptographic algorithms
- Zero round-trip time (0-RTT) resumption improves performance
- Combine with minimum TLS version set to 1.2 or higher
Remediation
Terraform
# Enable TLS 1.3 for improved security and performance
resource "cloudflare_zone_settings_override" "tls_settings" {
zone_id = "<ZONE_ID>"
settings {
tls_1_3 = "on" # Critical: enables most secure TLS version with faster handshakes
}
}Other
1Log in to the Cloudflare dashboard and select your account and domain
2Go to SSL/TLS > Edge Certificates
3Scroll to TLS 1.3
4Toggle the setting to On
5Verify that your clients support TLS 1.3 (all modern browsers do)
Check Code
from prowler.lib.check.models import Check, CheckReportCloudflare
from prowler.providers.cloudflare.services.zone.zone_client import zone_client
class zone_tls_1_3_enabled(Check):
"""Ensure that TLS 1.3 is enabled for Cloudflare zones.
TLS 1.3 provides improved security through simplified cipher suites and
faster handshakes with zero round-trip time (0-RTT) resumption. It removes
outdated cryptographic algorithms, reduces handshake latency, and provides
better forward secrecy compared to previous TLS versions.
"""
def execute(self) -> list[CheckReportCloudflare]:
"""Execute the TLS 1.3 enabled check.
Iterates through all Cloudflare zones and verifies that TLS 1.3 is
enabled. The check accepts both "on" (standard TLS 1.3) and "zrt"
(TLS 1.3 with 0-RTT) as valid enabled states.
Returns:
A list of CheckReportCloudflare objects with PASS status if TLS 1.3
is enabled, or FAIL status if it is disabled for the zone.
"""
findings = []
for zone in zone_client.zones.values():
report = CheckReportCloudflare(
metadata=self.metadata(),
resource=zone,
)
tls_1_3 = (zone.settings.tls_1_3 or "").lower()
if tls_1_3 in ["on", "zrt"]:
report.status = "PASS"
report.status_extended = f"TLS 1.3 is enabled for zone {zone.name}."
else:
report.status = "FAIL"
report.status_extended = f"TLS 1.3 is not enabled for zone {zone.name}."
findings.append(report)
return findings