Back to Checks
IAM password policy requires at least one lowercase letter
iam_password_policy_lowercase
Service: iamSeverity: low
OfficialBuilt-inVerified
Categories:identity-access
Resource Type:AwsIamPolicy
IAM password policy requires at least one lowercase character in user passwords via the Require lowercase setting
Risk
Without a lowercase requirement, passwords have reduced entropy, making brute force and password spraying more effective. Compromised IAM users can enable unauthorized access and changes, risking confidentiality, integrity, and availability of AWS resources.
Run this check with Prowler
Run in Prowler CloudRun
prowler aws --checks iam_password_policy_lowercaseRecommendation
Adopt a strong password policy that:
- Enables
Require at least one lowercase letterplus uppercase, number, and symbol - Sets sufficient length and blocks reuse
- Requires MFA for all users
- Applies least privilege to limit blast radius
Remediation
CLI
aws iam update-account-password-policy --require-lowercase-charactersTerraform
resource "aws_iam_account_password_policy" "<example_resource_name>" {
require_lowercase_characters = true # Critical: Enforces at least one lowercase letter in passwords
}NativeIaC
Resources:
<example_resource_name>:
Type: AWS::IAM::AccountPasswordPolicy
Properties:
RequireLowercaseCharacters: true # Critical: Enforces at least one lowercase letter in passwordsOther
1In the AWS Console, open IAM
2Go to Account settings
3In Password policy, click Edit
4Check "Require at least one lowercase letter (a-z)"
5Click Save changes
Check Code
from prowler.lib.check.models import Check, Check_Report_AWS
from prowler.providers.aws.services.iam.iam_client import iam_client
class iam_password_policy_lowercase(Check):
def execute(self) -> Check_Report_AWS:
findings = []
if iam_client.password_policy:
report = Check_Report_AWS(
metadata=self.metadata(), resource=iam_client.password_policy
)
report.region = iam_client.region
report.resource_arn = iam_client.password_policy_arn_template
report.resource_id = iam_client.audited_account
# Check if lowercase flag is set
if iam_client.password_policy.lowercase:
report.status = "PASS"
report.status_extended = (
"IAM password policy requires at least one lowercase letter."
)
else:
report.status = "FAIL"
report.status_extended = "IAM password policy does not require at least one lowercase letter."
findings.append(report)
return findings