Directory Service directory RADIUS server uses MS-CHAPv2
AWS Directory Service RADIUS configuration uses the authentication protocol defined for MFA integration. The finding evaluates whether directories with RADIUS enabled are set to MS-CHAPv2 instead of weaker options like PAP, CHAP, or MS-CHAPv1.
Risk
Using PAP, CHAP, or MS-CHAPv1 weakens RADIUS-based MFA.
PAP exposes cleartext credentials, while legacy CHAP variants permit offline cracking and replay, enabling unauthorized access to AD-integrated services and lateral movement, degrading confidentiality and integrity.
Run this check with Prowler
Run in Prowler Cloudprowler aws --checks directoryservice_radius_server_security_protocolRecommendation
Standardize on MS-CHAPv2 for RADIUS authentication to MFA providers. Disable PAP, CHAP, and MS-CHAPv1 to prevent downgrades. Apply least privilege and defense in depth: use strong shared secrets, restrict network access to RADIUS endpoints, and monitor authentication logs for anomalies.
Remediation
CLI
aws ds update-radius --directory-id <example_resource_id> --radius-settings AuthenticationProtocol=MS-CHAPv2Terraform
resource "aws_directory_service_radius_settings" "<example_resource_name>" {
directory_id = "<example_resource_id>"
radius_servers = ["<RADIUS_SERVER_IP>"]
shared_secret = "<SHARED_SECRET>"
authentication_protocol = "MS-CHAPv2" # Critical: sets the RADIUS auth protocol to MS-CHAPv2 to pass the check
}Other
Check Code
from prowler.lib.check.models import Check, Check_Report_AWS
from prowler.providers.aws.services.directoryservice.directoryservice_client import (
directoryservice_client,
)
from prowler.providers.aws.services.directoryservice.directoryservice_service import (
AuthenticationProtocol,
)
class directoryservice_radius_server_security_protocol(Check):
def execute(self):
findings = []
for directory in directoryservice_client.directories.values():
if directory.radius_settings:
report = Check_Report_AWS(metadata=self.metadata(), resource=directory)
if (
directory.radius_settings.authentication_protocol
== AuthenticationProtocol.MS_CHAPv2
):
report.status = "PASS"
report.status_extended = f"Radius server of Directory {directory.id} have recommended security protocol for the Radius server."
else:
report.status = "FAIL"
report.status_extended = f"Radius server of Directory {directory.id} does not have recommended security protocol for the Radius server."
findings.append(report)
return findingsReferences
- https://docs.secureauth.com/0903/en/ms-chapv2-and-radius--sp-initiated--for-cisco-and-netscaler-configuration-guide.html
- https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_mfa.html
- https://www.freeradius.org/documentation/freeradius-server/4.0~alpha1/raddb/mods-available/mschap.html