Back to Checks
aws

Directory Service directory RADIUS server uses MS-CHAPv2

directoryservice_radius_server_security_protocol
Service: directoryserviceSeverity: medium
OfficialBuilt-inVerified
Categories:identity-access
Resource Type:Other

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 Cloud
Run
prowler aws --checks directoryservice_radius_server_security_protocol

Recommendation

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-CHAPv2

Terraform

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

1In the AWS Console, open Directory Service and select your directory
2Open the Networking & security tab (Multi-factor authentication section)
3Click Actions > Edit (or Enable)
4Set Protocol to MS-CHAPv2
5Click Save (or Enable) to apply

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 findings