prowler 5.15.1__py3-none-any.whl → 5.16.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. prowler/CHANGELOG.md +34 -0
  2. prowler/config/config.py +1 -1
  3. prowler/lib/outputs/compliance/prowler_threatscore/prowler_threatscore.py +15 -4
  4. prowler/providers/aws/aws_regions_by_service.json +1 -20
  5. prowler/providers/aws/services/bedrock/bedrock_api_key_no_administrative_privileges/bedrock_api_key_no_administrative_privileges.metadata.json +1 -1
  6. prowler/providers/aws/services/bedrock/bedrock_api_key_no_long_term_credentials/bedrock_api_key_no_long_term_credentials.metadata.json +1 -1
  7. prowler/providers/aws/services/ec2/ec2_instance_account_imdsv2_enabled/ec2_instance_account_imdsv2_enabled.metadata.json +2 -1
  8. prowler/providers/aws/services/ec2/ec2_instance_imdsv2_enabled/ec2_instance_imdsv2_enabled.metadata.json +3 -1
  9. prowler/providers/aws/services/ec2/ec2_instance_uses_single_eni/ec2_instance_uses_single_eni.metadata.json +1 -1
  10. prowler/providers/aws/services/glue/glue_data_catalogs_connection_passwords_encryption_enabled/glue_data_catalogs_connection_passwords_encryption_enabled.metadata.json +17 -11
  11. prowler/providers/aws/services/glue/glue_data_catalogs_metadata_encryption_enabled/glue_data_catalogs_metadata_encryption_enabled.metadata.json +17 -10
  12. prowler/providers/aws/services/glue/glue_data_catalogs_not_publicly_accessible/glue_data_catalogs_not_publicly_accessible.metadata.json +18 -11
  13. prowler/providers/aws/services/glue/glue_database_connections_ssl_enabled/glue_database_connections_ssl_enabled.metadata.json +18 -12
  14. prowler/providers/aws/services/glue/glue_development_endpoints_cloudwatch_logs_encryption_enabled/glue_development_endpoints_cloudwatch_logs_encryption_enabled.metadata.json +17 -11
  15. prowler/providers/aws/services/glue/glue_development_endpoints_job_bookmark_encryption_enabled/glue_development_endpoints_job_bookmark_encryption_enabled.metadata.json +17 -12
  16. prowler/providers/aws/services/glue/glue_development_endpoints_s3_encryption_enabled/glue_development_endpoints_s3_encryption_enabled.metadata.json +17 -11
  17. prowler/providers/aws/services/glue/glue_etl_jobs_amazon_s3_encryption_enabled/glue_etl_jobs_amazon_s3_encryption_enabled.metadata.json +21 -14
  18. prowler/providers/aws/services/glue/glue_etl_jobs_cloudwatch_logs_encryption_enabled/glue_etl_jobs_cloudwatch_logs_encryption_enabled.metadata.json +19 -12
  19. prowler/providers/aws/services/glue/glue_etl_jobs_job_bookmark_encryption_enabled/glue_etl_jobs_job_bookmark_encryption_enabled.metadata.json +17 -12
  20. prowler/providers/aws/services/glue/glue_etl_jobs_logging_enabled/glue_etl_jobs_logging_enabled.metadata.json +18 -12
  21. prowler/providers/aws/services/glue/glue_ml_transform_encrypted_at_rest/glue_ml_transform_encrypted_at_rest.metadata.json +20 -12
  22. prowler/providers/aws/services/iam/iam_inline_policy_allows_privilege_escalation/iam_inline_policy_allows_privilege_escalation.metadata.json +3 -1
  23. prowler/providers/aws/services/iam/iam_policy_allows_privilege_escalation/iam_policy_allows_privilege_escalation.metadata.json +3 -1
  24. prowler/providers/aws/services/iam/iam_policy_cloudshell_admin_not_attached/iam_policy_cloudshell_admin_not_attached.metadata.json +1 -1
  25. prowler/providers/aws/services/iam/iam_role_administratoraccess_policy/iam_role_administratoraccess_policy.metadata.json +1 -1
  26. prowler/providers/aws/services/iam/iam_role_cross_account_readonlyaccess_policy/iam_role_cross_account_readonlyaccess_policy.metadata.json +1 -1
  27. prowler/providers/aws/services/iam/iam_role_cross_service_confused_deputy_prevention/iam_role_cross_service_confused_deputy_prevention.metadata.json +1 -1
  28. prowler/providers/aws/services/inspector2/inspector2_active_findings_exist/inspector2_active_findings_exist.metadata.json +23 -13
  29. prowler/providers/aws/services/inspector2/inspector2_is_enabled/inspector2_is_enabled.metadata.json +18 -12
  30. prowler/providers/aws/services/kafka/kafka_cluster_encryption_at_rest_uses_cmk/kafka_cluster_encryption_at_rest_uses_cmk.metadata.json +24 -13
  31. prowler/providers/aws/services/kafka/kafka_cluster_enhanced_monitoring_enabled/kafka_cluster_enhanced_monitoring_enabled.metadata.json +24 -14
  32. prowler/providers/aws/services/kafka/kafka_cluster_in_transit_encryption_enabled/kafka_cluster_in_transit_encryption_enabled.metadata.json +23 -15
  33. prowler/providers/aws/services/kafka/kafka_cluster_is_public/kafka_cluster_is_public.metadata.json +23 -14
  34. prowler/providers/aws/services/kafka/kafka_cluster_mutual_tls_authentication_enabled/kafka_cluster_mutual_tls_authentication_enabled.metadata.json +26 -15
  35. prowler/providers/aws/services/kafka/kafka_cluster_unrestricted_access_disabled/kafka_cluster_unrestricted_access_disabled.metadata.json +27 -15
  36. prowler/providers/aws/services/kafka/kafka_cluster_uses_latest_version/kafka_cluster_uses_latest_version.metadata.json +23 -14
  37. prowler/providers/aws/services/kafka/kafka_connector_in_transit_encryption_enabled/kafka_connector_in_transit_encryption_enabled.metadata.json +18 -13
  38. prowler/providers/aws/services/kms/kms_cmk_are_used/kms_cmk_are_used.metadata.json +16 -12
  39. prowler/providers/aws/services/kms/kms_cmk_not_deleted_unintentionally/kms_cmk_not_deleted_unintentionally.metadata.json +16 -10
  40. prowler/providers/aws/services/kms/kms_cmk_not_multi_region/kms_cmk_not_multi_region.metadata.json +21 -14
  41. prowler/providers/aws/services/kms/kms_cmk_rotation_enabled/kms_cmk_rotation_enabled.metadata.json +19 -13
  42. prowler/providers/aws/services/kms/kms_key_not_publicly_accessible/kms_key_not_publicly_accessible.metadata.json +22 -14
  43. prowler/providers/aws/services/memorydb/memorydb_cluster_auto_minor_version_upgrades/memorydb_cluster_auto_minor_version_upgrades.metadata.json +23 -14
  44. prowler/providers/aws/services/redshift/redshift_cluster_enhanced_vpc_routing/redshift_cluster_enhanced_vpc_routing.metadata.json +1 -1
  45. prowler/providers/aws/services/s3/s3_bucket_object_versioning/s3_bucket_object_versioning.metadata.json +1 -1
  46. prowler/providers/aws/services/s3/s3_bucket_shadow_resource_vulnerability/s3_bucket_shadow_resource_vulnerability.metadata.json +1 -1
  47. prowler/providers/aws/services/servicecatalog/servicecatalog_portfolio_shared_within_organization_only/servicecatalog_portfolio_shared_within_organization_only.metadata.json +17 -13
  48. prowler/providers/aws/services/sns/sns_subscription_not_using_http_endpoints/sns_subscription_not_using_http_endpoints.metadata.json +18 -11
  49. prowler/providers/aws/services/sns/sns_topics_kms_encryption_at_rest_enabled/sns_topics_kms_encryption_at_rest_enabled.metadata.json +23 -12
  50. prowler/providers/aws/services/sns/sns_topics_not_publicly_accessible/sns_topics_not_publicly_accessible.metadata.json +21 -12
  51. prowler/providers/aws/services/trustedadvisor/trustedadvisor_errors_and_warnings/trustedadvisor_errors_and_warnings.metadata.json +15 -9
  52. prowler/providers/aws/services/trustedadvisor/trustedadvisor_premium_support_plan_subscribed/trustedadvisor_premium_support_plan_subscribed.metadata.json +18 -10
  53. prowler/providers/aws/services/vpc/vpc_endpoint_connections_trust_boundaries/vpc_endpoint_connections_trust_boundaries.metadata.json +1 -1
  54. prowler/providers/aws/services/vpc/vpc_endpoint_services_allowed_principals_trust_boundaries/vpc_endpoint_services_allowed_principals_trust_boundaries.metadata.json +1 -1
  55. prowler/providers/aws/services/waf/waf_global_rule_with_conditions/waf_global_rule_with_conditions.metadata.json +21 -12
  56. prowler/providers/aws/services/waf/waf_global_rulegroup_not_empty/waf_global_rulegroup_not_empty.metadata.json +18 -12
  57. prowler/providers/aws/services/waf/waf_global_webacl_logging_enabled/waf_global_webacl_logging_enabled.metadata.json +19 -11
  58. prowler/providers/aws/services/waf/waf_global_webacl_with_rules/waf_global_webacl_with_rules.metadata.json +18 -11
  59. prowler/providers/aws/services/waf/waf_regional_rule_with_conditions/waf_regional_rule_with_conditions.metadata.json +17 -11
  60. prowler/providers/aws/services/waf/waf_regional_rulegroup_not_empty/waf_regional_rulegroup_not_empty.metadata.json +17 -11
  61. prowler/providers/aws/services/waf/waf_regional_webacl_with_rules/waf_regional_webacl_with_rules.metadata.json +18 -11
  62. prowler/providers/aws/services/wafv2/wafv2_webacl_logging_enabled/wafv2_webacl_logging_enabled.metadata.json +19 -12
  63. prowler/providers/aws/services/wafv2/wafv2_webacl_rule_logging_enabled/wafv2_webacl_rule_logging_enabled.metadata.json +19 -12
  64. prowler/providers/aws/services/wafv2/wafv2_webacl_with_rules/wafv2_webacl_with_rules.metadata.json +22 -13
  65. prowler/providers/gcp/services/cloudstorage/cloudstorage_service.py +1 -1
  66. prowler/providers/iac/lib/arguments/arguments.py +2 -2
  67. prowler/providers/mongodbatlas/services/clusters/clusters_service.py +23 -3
  68. {prowler-5.15.1.dist-info → prowler-5.16.1.dist-info}/METADATA +4 -2
  69. {prowler-5.15.1.dist-info → prowler-5.16.1.dist-info}/RECORD +72 -72
  70. {prowler-5.15.1.dist-info → prowler-5.16.1.dist-info}/LICENSE +0 -0
  71. {prowler-5.15.1.dist-info → prowler-5.16.1.dist-info}/WHEEL +0 -0
  72. {prowler-5.15.1.dist-info → prowler-5.16.1.dist-info}/entry_points.txt +0 -0
@@ -1,33 +1,41 @@
1
1
  {
2
2
  "Provider": "aws",
3
3
  "CheckID": "kms_key_not_publicly_accessible",
4
- "CheckTitle": "Check exposed KMS keys",
4
+ "CheckTitle": "Cloud KMS key does not grant access to allUsers or allAuthenticatedUsers",
5
5
  "CheckType": [
6
- "Data Protection"
6
+ "Software and Configuration Checks/AWS Security Best Practices",
7
+ "Industry and Regulatory Standards/AWS Foundational Security Best Practices",
8
+ "TTPs/Initial Access/Unauthorized Access",
9
+ "Effects/Data Exposure"
7
10
  ],
8
11
  "ServiceName": "kms",
9
12
  "SubServiceName": "",
10
- "ResourceIdTemplate": "arn:partition:kms:region:account-id:certificate/resource-id",
11
- "Severity": "medium",
13
+ "ResourceIdTemplate": "",
14
+ "Severity": "critical",
12
15
  "ResourceType": "AwsKmsKey",
13
- "Description": "Check exposed KMS keys",
14
- "Risk": "Exposed KMS Keys or wide policy permissions my leave data unprotected.",
15
- "RelatedUrl": "https://docs.aws.amazon.com/kms/latest/developerguide/determining-access.html",
16
+ "Description": "**KMS keys** are assessed for **excessive access** in key policies or grants, including `*` principals and broadly scoped permissions to multiple identities.",
17
+ "Risk": "Broad access to a **KMS key** enables unauthorized `kms:Decrypt` and data-key generation, breaking **confidentiality**. With admin rights, attackers can change policies or schedule deletion, undermining control **integrity** and threatening **availability** of data dependent on the key.",
18
+ "RelatedUrl": "",
19
+ "AdditionalURLs": [
20
+ "https://www.trendmicro.com/cloudoneconformity/knowledge-base/gcp/CloudKMS/publicly-accessible-kms-cryptokeys.html",
21
+ "https://support.icompaas.com/support/solutions/articles/62000232904-1-9-ensure-cloud-kms-cryptokeys-are-not-accessible-to-anonymous-or-public-users-automated-",
22
+ "https://docs.aws.amazon.com/kms/latest/developerguide/determining-access.html"
23
+ ],
16
24
  "Remediation": {
17
25
  "Code": {
18
- "CLI": "",
19
- "NativeIaC": "",
20
- "Other": "https://github.com/cloudmatos/matos/tree/master/remediations/aws/kms/exposed-key",
21
- "Terraform": ""
26
+ "CLI": "aws kms put-key-policy --key-id <example_resource_id> --policy-name default --policy '{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::<account_id>:root\"},\"Action\":\"kms:*\",\"Resource\":\"*\"}]}'",
27
+ "NativeIaC": "```yaml\n# CloudFormation: restrict KMS key policy to account root (removes any public access)\nResources:\n <example_resource_name>:\n Type: AWS::KMS::Key\n Properties:\n KeyPolicy:\n Version: '2012-10-17'\n Statement:\n - Effect: Allow\n Principal:\n AWS: arn:aws:iam::<account_id>:root # Critical: only account root can access; prevents public \"*\" principals\n Action: kms:*\n Resource: '*'\n```",
28
+ "Other": "1. Open AWS Console > Key Management Service (KMS)\n2. Select the affected key and go to the Key policy tab\n3. Click Edit and remove any statement with Principal set to \"*\" (or AWS: \"*\")\n4. Ensure a statement exists that allows only arn:aws:iam::<account_id>:root\n5. Save changes",
29
+ "Terraform": "```hcl\n# Restrict KMS key policy to the account root to avoid any public (\"*\") principals\ndata \"aws_caller_identity\" \"current\" {}\n\nresource \"aws_kms_key\" \"<example_resource_name>\" {\n policy = jsonencode({\n Version = \"2012-10-17\"\n Statement = [\n {\n Effect = \"Allow\"\n Principal = { AWS = \"arn:aws:iam::${data.aws_caller_identity.current.account_id}:root\" } # Critical: limit to account root to remove public access\n Action = \"kms:*\"\n Resource = \"*\"\n }\n ]\n })\n}\n```"
22
30
  },
23
31
  "Recommendation": {
24
- "Text": "To determine the full extent of who or what currently has access to a customer master key (CMK) in AWS KMS, you must examine the CMK key policy, all grants that apply to the CMK and potentially all AWS Identity and Access Management (IAM) policies. You might do this to determine the scope of potential usage of a CMK.",
25
- "Url": "https://docs.aws.amazon.com/kms/latest/developerguide/determining-access.html"
32
+ "Text": "Apply **least privilege** to KMS keys:\n- Restrict principals to specific roles and accounts\n- Prefer narrow, time-bound grants\n- Separate key administration from usage\n- Use conditions to limit context\n- Review regularly and remove wildcard or cross-account exposure",
33
+ "Url": "https://hub.prowler.com/check/kms_key_not_publicly_accessible"
26
34
  }
27
35
  },
28
36
  "Categories": [
29
37
  "internet-exposed",
30
- "encryption"
38
+ "identity-access"
31
39
  ],
32
40
  "DependsOn": [],
33
41
  "RelatedTo": [],
@@ -1,29 +1,38 @@
1
1
  {
2
2
  "Provider": "aws",
3
3
  "CheckID": "memorydb_cluster_auto_minor_version_upgrades",
4
- "CheckTitle": "Ensure Memory DB clusters have minor version upgrade enabled.",
5
- "CheckType": [],
4
+ "CheckTitle": "MemoryDB cluster has automatic minor version upgrades enabled",
5
+ "CheckType": [
6
+ "Software and Configuration Checks/Patch Management",
7
+ "Software and Configuration Checks/AWS Security Best Practices"
8
+ ],
6
9
  "ServiceName": "memorydb",
7
10
  "SubServiceName": "",
8
- "ResourceIdTemplate": "arn:aws:memorydb:region:account-id:db-cluster",
11
+ "ResourceIdTemplate": "",
9
12
  "Severity": "medium",
10
- "ResourceType": "AwsMemoryDb",
11
- "Description": "Ensure Memory DB clusters have minor version upgrade enabled.",
12
- "Risk": "Auto Minor Version Upgrade is a feature that you can enable to have your database automatically upgraded when a new minor database engine version is available. Minor version upgrades often patch security vulnerabilities and fix bugs and therefore should be applied.",
13
- "RelatedUrl": "https://docs.aws.amazon.com/memorydb/latest/devguide/engine-versions.html",
13
+ "ResourceType": "Other",
14
+ "Description": "**MemoryDB clusters** are evaluated for the `auto_minor_version_upgrade` setting that automatically applies new minor engine versions.",
15
+ "Risk": "Without automatic minor upgrades, clusters may run **known-vulnerable engine versions**.\n- Exploitable CVEs enable unauthorized reads/writes (confidentiality, integrity)\n- Unpatched bugs can cause **DoS** or data loss (availability)\n- Version drift raises operational risk and slows incident response",
16
+ "RelatedUrl": "",
17
+ "AdditionalURLs": [
18
+ "https://docs.aws.amazon.com/memorydb/latest/devguide/engine-versions.html",
19
+ "https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Upgrading.html#USER_UpgradeDBInstance.Upgrading.AutoMinorVersionUpgrades"
20
+ ],
14
21
  "Remediation": {
15
22
  "Code": {
16
- "CLI": "aws memorydb update-cluster --cluster-name <cluster-name> --auto-minor-version-upgrade ",
17
- "NativeIaC": "",
18
- "Other": "",
19
- "Terraform": ""
23
+ "CLI": "aws memorydb update-cluster --cluster-name <cluster-name> --auto-minor-version-upgrade",
24
+ "NativeIaC": "```yaml\n# Enable automatic minor version upgrades for a MemoryDB cluster\nResources:\n <example_resource_name>:\n Type: AWS::MemoryDB::Cluster\n Properties:\n ClusterName: <example_resource_name>\n ACLName: <example_acl_name>\n NodeType: <example_node_type>\n NumShards: 1\n AutoMinorVersionUpgrade: true # Critical: enables automatic minor version upgrades\n```",
25
+ "Other": "1. In the AWS Console, go to MemoryDB > Clusters\n2. Select the cluster <cluster-name> and click Edit\n3. Enable \"Auto minor version upgrade\"\n4. Click Save changes",
26
+ "Terraform": "```hcl\nresource \"aws_memorydb_cluster\" \"<example_resource_name>\" {\n name = \"<example_resource_name>\"\n acl_name = \"<example_acl_name>\"\n node_type = \"<example_node_type>\"\n num_shards = 1\n\n auto_minor_version_upgrade = true # Critical: enables automatic minor version upgrades\n}\n```"
20
27
  },
21
28
  "Recommendation": {
22
- "Text": "Enable auto minor version upgrade for all Memory DB clusters.",
23
- "Url": "https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Upgrading.html#USER_UpgradeDBInstance.Upgrading.AutoMinorVersionUpgrades"
29
+ "Text": "Enable **automatic minor version upgrades** (`auto_minor_version_upgrade=true`) for all clusters. Schedule updates in a maintenance window, validate in staging, and keep rollback plans. Apply **defense in depth** with strict ACLs and monitoring to limit exposure between releases.",
30
+ "Url": "https://hub.prowler.com/check/memorydb_cluster_auto_minor_version_upgrades"
24
31
  }
25
32
  },
26
- "Categories": [],
33
+ "Categories": [
34
+ "vulnerabilities"
35
+ ],
27
36
  "DependsOn": [],
28
37
  "RelatedTo": [],
29
38
  "Notes": ""
@@ -26,7 +26,7 @@
26
26
  }
27
27
  },
28
28
  "Categories": [
29
- "trustboundaries"
29
+ "trust-boundaries"
30
30
  ],
31
31
  "DependsOn": [],
32
32
  "RelatedTo": [],
@@ -22,7 +22,7 @@
22
22
  },
23
23
  "Recommendation": {
24
24
  "Text": "Configure versioning using the Amazon console or API for buckets with sensitive information that is changing frequently, and backup may not be enough to capture all the changes.",
25
- "Url": "https://docs.aws.amazon.com/AmazonS3/latest/dev-retired/Versioning.html"
25
+ "Url": "https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html"
26
26
  }
27
27
  },
28
28
  "Categories": [],
@@ -26,7 +26,7 @@
26
26
  }
27
27
  },
28
28
  "Categories": [
29
- "trustboundaries"
29
+ "trust-boundaries"
30
30
  ],
31
31
  "DependsOn": [],
32
32
  "RelatedTo": [],
@@ -1,32 +1,36 @@
1
1
  {
2
2
  "Provider": "aws",
3
3
  "CheckID": "servicecatalog_portfolio_shared_within_organization_only",
4
- "CheckTitle": "Service Catalog portfolios should be shared within an AWS organization only",
4
+ "CheckTitle": "Service Catalog portfolio is shared only within the AWS Organization",
5
5
  "CheckType": [
6
- "Software and Configuration Checks/AWS Security Best Practices"
6
+ "Software and Configuration Checks/AWS Security Best Practices",
7
+ "TTPs/Initial Access/Unauthorized Access"
7
8
  ],
8
9
  "ServiceName": "servicecatalog",
9
10
  "SubServiceName": "",
10
- "ResourceIdTemplate": "arn:aws:servicecatalog:{region}:{account-id}:portfolio/{portfolio-id}",
11
+ "ResourceIdTemplate": "",
11
12
  "Severity": "high",
12
- "ResourceType": "AwsServiceCatalogPortfolio",
13
- "Description": "This control checks whether AWS Service Catalog shares portfolios within an organization when the integration with AWS Organizations is enabled. The control fails if portfolios aren't shared within an organization.",
14
- "Risk": "Sharing Service Catalog portfolios outside of an organization may result in access granted to unintended AWS accounts, potentially exposing sensitive resources.",
15
- "RelatedUrl": "https://docs.aws.amazon.com/servicecatalog/latest/adminguide/catalogs_portfolios_sharing.html",
13
+ "ResourceType": "Other",
14
+ "Description": "**AWS Service Catalog portfolios** are assessed to confirm sharing occurs via **AWS Organizations** integration, not direct `ACCOUNT` shares. It reviews shared portfolios and identifies those targeted to individual accounts instead of organizational scopes.",
15
+ "Risk": "Sharing with individual accounts enables recipients to import and launch products outside centralized guardrails, inheriting launch roles. This can cause unauthorized provisioning, data exposure, and configuration drift-impacting confidentiality, integrity, and availability through misused privileges and uncontrolled costs.",
16
+ "RelatedUrl": "",
17
+ "AdditionalURLs": [
18
+ "https://docs.aws.amazon.com/servicecatalog/latest/adminguide/catalogs_portfolios_sharing.html"
19
+ ],
16
20
  "Remediation": {
17
21
  "Code": {
18
22
  "CLI": "aws servicecatalog create-portfolio-share --portfolio-id <portfolio-id> --organization-ids <org-id>",
19
- "NativeIaC": "",
20
- "Other": "https://docs.aws.amazon.com/servicecatalog/latest/adminguide/catalogs_portfolios_sharing.html",
21
- "Terraform": ""
23
+ "NativeIaC": "```yaml\n# CloudFormation: Share Service Catalog portfolio only within the AWS Organization\nResources:\n <example_resource_name>:\n Type: AWS::ServiceCatalog::PortfolioShare\n Properties:\n PortfolioId: <example_resource_id>\n OrganizationNode: # CRITICAL: share within AWS Organizations\n Type: ORGANIZATION # Shares the portfolio with the entire org\n Value: <example_resource_id> # e.g., o-xxxxxxxxxx\n```",
24
+ "Other": "1. In the AWS Console, go to Service Catalog > Portfolios and open the target portfolio\n2. Open the Shares/Sharing tab\n3. Remove every share of Type \"Account\" (stop sharing with each account)\n4. Click Share, choose \"AWS Organizations\", set Type to \"Organization\", enter your Org ID (o-xxxxxxxxxx), and share\n5. Verify no remaining shares of Type \"Account\" exist",
25
+ "Terraform": "```hcl\n# Share Service Catalog portfolio only within the AWS Organization\nresource \"aws_servicecatalog_portfolio_share\" \"<example_resource_name>\" {\n portfolio_id = \"<example_resource_id>\"\n\n organization_node { # CRITICAL: share within AWS Organizations\n type = \"ORGANIZATION\" # Shares the portfolio with the entire org\n value = \"<example_resource_id>\" # e.g., o-xxxxxxxxxx\n }\n}\n```"
22
26
  },
23
27
  "Recommendation": {
24
- "Text": "Configure AWS Service Catalog to share portfolios only within your AWS Organization for more secure access management.",
25
- "Url": "https://docs.aws.amazon.com/servicecatalog/latest/adminguide/catalogs_portfolios_sharing.html"
28
+ "Text": "Prefer **organizational sharing** for portfolios and avoid `ACCOUNT` targets. Enforce **least privilege** on portfolio access and launch roles, and review shares regularly. Apply **separation of duties** and **defense in depth** so only governed accounts consume products and blast radius remains constrained.",
29
+ "Url": "https://hub.prowler.com/check/servicecatalog_portfolio_shared_within_organization_only"
26
30
  }
27
31
  },
28
32
  "Categories": [
29
- "trustboundaries"
33
+ "trust-boundaries"
30
34
  ],
31
35
  "DependsOn": [],
32
36
  "RelatedTo": [],
@@ -1,26 +1,33 @@
1
1
  {
2
2
  "Provider": "aws",
3
3
  "CheckID": "sns_subscription_not_using_http_endpoints",
4
- "CheckTitle": "Ensure there are no SNS subscriptions using HTTP endpoints",
5
- "CheckType": [],
4
+ "CheckTitle": "SNS subscription uses an HTTPS endpoint",
5
+ "CheckType": [
6
+ "Software and Configuration Checks/AWS Security Best Practices/Network Reachability",
7
+ "Effects/Data Exposure"
8
+ ],
6
9
  "ServiceName": "sns",
7
10
  "SubServiceName": "",
8
- "ResourceIdTemplate": "arn:aws:sns:region:account-id:topic",
11
+ "ResourceIdTemplate": "",
9
12
  "Severity": "high",
10
13
  "ResourceType": "AwsSnsTopic",
11
- "Description": "Ensure there are no SNS subscriptions using HTTP endpoints",
12
- "Risk": "When you use HTTPS, messages are automatically encrypted during transit, even if the SNS topic itself isn't encrypted. Without HTTPS, a network-based attacker can eavesdrop on network traffic or manipulate it using an attack such as man-in-the-middle.",
13
- "RelatedUrl": "https://docs.aws.amazon.com/sns/latest/dg/sns-security-best-practices.html#enforce-encryption-data-in-transit",
14
+ "Description": "Amazon SNS subscriptions are evaluated for endpoint protocol. Subscriptions using `http` are identified, while **HTTPS** endpoints indicate encrypted delivery in transit.",
15
+ "Risk": "Using **HTTP** leaves SNS deliveries unencrypted, compromising **confidentiality** via eavesdropping. MITM attackers can modify payloads or headers, damaging **integrity**, inject malicious content into downstream systems, or capture subscription data for spoofing and unauthorized actions.",
16
+ "RelatedUrl": "",
17
+ "AdditionalURLs": [
18
+ "https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-sns-subscription.html",
19
+ "https://docs.aws.amazon.com/sns/latest/dg/sns-security-best-practices.html#enforce-encryption-data-in-transit"
20
+ ],
14
21
  "Remediation": {
15
22
  "Code": {
16
23
  "CLI": "",
17
- "NativeIaC": "",
18
- "Other": "",
19
- "Terraform": ""
24
+ "NativeIaC": "```yaml\n# CloudFormation: Ensure SNS subscription uses HTTPS\nResources:\n <example_resource_name>:\n Type: AWS::SNS::Subscription\n Properties:\n TopicArn: <example_resource_id>\n Protocol: https # Critical: use HTTPS protocol to remediate HTTP usage\n Endpoint: https://<example_endpoint> # Critical: HTTPS endpoint URL\n```",
25
+ "Other": "1. Open the Amazon SNS console and go to Subscriptions\n2. Select the subscription with Protocol set to HTTP and click Delete\n3. Click Create subscription\n4. Choose the same Topic ARN, set Protocol to HTTPS, and enter your HTTPS endpoint URL\n5. Create the subscription and confirm it from your endpoint if required",
26
+ "Terraform": "```hcl\n# Terraform: Ensure SNS subscription uses HTTPS\nresource \"aws_sns_topic_subscription\" \"<example_resource_name>\" {\n topic_arn = \"<example_resource_id>\"\n protocol = \"https\" # Critical: enforce HTTPS protocol\n endpoint = \"https://<example_endpoint>\" # Critical: HTTPS endpoint URL\n}\n```"
20
27
  },
21
28
  "Recommendation": {
22
- "Text": "To enforce only encrypted connections over HTTPS, add the aws:SecureTransport condition in the IAM policy that's attached to unencrypted SNS topics. This forces message publishers to use HTTPS instead of HTTP",
23
- "Url": "https://docs.aws.amazon.com/sns/latest/dg/sns-security-best-practices.html#enforce-encryption-data-in-transit"
29
+ "Text": "Require **HTTPS** for all SNS subscription endpoints. Prefer domain-based endpoints, verify SNS message signatures, and apply **least privilege**. Enforce TLS using IAM conditions like `aws:SecureTransport`, and use private connectivity (VPC endpoints) where possible for defense in depth.",
30
+ "Url": "https://hub.prowler.com/check/sns_subscription_not_using_http_endpoints"
24
31
  }
25
32
  },
26
33
  "Categories": [
@@ -1,26 +1,37 @@
1
1
  {
2
2
  "Provider": "aws",
3
3
  "CheckID": "sns_topics_kms_encryption_at_rest_enabled",
4
- "CheckTitle": "Ensure there are no SNS Topics unencrypted",
5
- "CheckType": [],
4
+ "CheckTitle": "SNS topic is encrypted at rest with KMS",
5
+ "CheckType": [
6
+ "Software and Configuration Checks/AWS Security Best Practices",
7
+ "Software and Configuration Checks/Industry and Regulatory Standards/AWS Foundational Security Best Practices",
8
+ "Software and Configuration Checks/Industry and Regulatory Standards/NIST 800-53 Controls (USA)",
9
+ "Software and Configuration Checks/Industry and Regulatory Standards/NIST CSF Controls (USA)",
10
+ "Software and Configuration Checks/Industry and Regulatory Standards/PCI-DSS",
11
+ "Software and Configuration Checks/Industry and Regulatory Standards/ISO 27001 Controls"
12
+ ],
6
13
  "ServiceName": "sns",
7
14
  "SubServiceName": "",
8
- "ResourceIdTemplate": "arn:aws:sns:region:account-id:topic",
15
+ "ResourceIdTemplate": "",
9
16
  "Severity": "high",
10
17
  "ResourceType": "AwsSnsTopic",
11
- "Description": "Ensure there are no SNS Topics unencrypted",
12
- "Risk": "If not enabled sensitive information at rest is not protected.",
13
- "RelatedUrl": "https://docs.aws.amazon.com/sns/latest/dg/sns-server-side-encryption.html",
18
+ "Description": "**Amazon SNS topics** are assessed for **server-side encryption** with **AWS KMS**. Topics lacking a configured KMS key (e.g., missing `kms_master_key_id`) are identified as unencrypted at rest.",
19
+ "Risk": "Without KMS-backed SSE, SNS stores message bodies unencrypted at rest, undermining **confidentiality**.\n\nPrivileged insiders or compromised service components could access plaintext during persistence windows, causing data exposure. You also lose KMS controls such as key policies, rotation, and detailed audit trails.",
20
+ "RelatedUrl": "",
21
+ "AdditionalURLs": [
22
+ "https://www.trendmicro.com/cloudoneconformity/knowledge-base/aws/SNS/topic-encrypted-with-kms-customer-master-keys.html",
23
+ "https://docs.aws.amazon.com/sns/latest/dg/sns-server-side-encryption.html"
24
+ ],
14
25
  "Remediation": {
15
26
  "Code": {
16
- "CLI": "aws sns set-topic-attributes --topic-arn <TOPIC_ARN> --attribute-name 'KmsMasterKeyId' --attribute-value <KEY>",
17
- "NativeIaC": "https://docs.prowler.com/checks/aws/general-policies/general_15#cloudformation",
18
- "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/aws/SNS/topic-encrypted-with-kms-customer-master-keys.html",
19
- "Terraform": "https://docs.prowler.com/checks/aws/general-policies/general_15#terraform"
27
+ "CLI": "aws sns set-topic-attributes --topic-arn <TOPIC_ARN> --attribute-name KmsMasterKeyId --attribute-value alias/aws/sns",
28
+ "NativeIaC": "```yaml\n# CloudFormation: Enable SSE for an SNS topic\nResources:\n <example_resource_name>:\n Type: AWS::SNS::Topic\n Properties:\n KmsMasterKeyId: alias/aws/sns # Critical: Enables encryption at rest with AWS managed KMS key\n```",
29
+ "Other": "1. Open the AWS Console and go to Amazon SNS > Topics\n2. Select the topic and click Edit\n3. Under Encryption, enable encryption and choose the AWS managed key for SNS (alias/aws/sns)\n4. Click Save changes",
30
+ "Terraform": "```hcl\n# Enable SSE for an SNS topic\nresource \"aws_sns_topic\" \"<example_resource_name>\" {\n name = \"<example_resource_name>\"\n kms_master_key_id = \"alias/aws/sns\" # Critical: Enables encryption at rest\n}\n```"
20
31
  },
21
32
  "Recommendation": {
22
- "Text": "Use Amazon SNS with AWS KMS.",
23
- "Url": "https://docs.aws.amazon.com/sns/latest/dg/sns-server-side-encryption.html"
33
+ "Text": "Enable **server-side encryption** on all SNS topics with **AWS KMS**; prefer **customer-managed keys** for control.\n\nApply **least privilege** on key use, enforce rotation, and monitor key/access logs. Minimize sensitive data in messages and use end-to-end encryption *where feasible* to add defense in depth.",
34
+ "Url": "https://hub.prowler.com/check/sns_topics_kms_encryption_at_rest_enabled"
24
35
  }
25
36
  },
26
37
  "Categories": [
@@ -1,26 +1,35 @@
1
1
  {
2
2
  "Provider": "aws",
3
3
  "CheckID": "sns_topics_not_publicly_accessible",
4
- "CheckTitle": "Check if SNS topics have policy set as Public",
5
- "CheckType": [],
4
+ "CheckTitle": "SNS topic is not publicly accessible",
5
+ "CheckType": [
6
+ "Software and Configuration Checks/AWS Security Best Practices",
7
+ "Software and Configuration Checks/Industry and Regulatory Standards/AWS Foundational Security Best Practices",
8
+ "Effects/Data Exposure",
9
+ "TTPs/Initial Access"
10
+ ],
6
11
  "ServiceName": "sns",
7
12
  "SubServiceName": "",
8
- "ResourceIdTemplate": "arn:aws:sns:region:account-id:topic",
13
+ "ResourceIdTemplate": "",
9
14
  "Severity": "high",
10
15
  "ResourceType": "AwsSnsTopic",
11
- "Description": "Check if SNS topics have policy set as Public",
12
- "Risk": "Publicly accessible services could expose sensitive data to bad actors.",
13
- "RelatedUrl": "https://docs.aws.amazon.com/config/latest/developerguide/sns-topic-policy.html",
16
+ "Description": "**SNS topic policies** are analyzed for **public principals** (e.g., `*`). Topics that grant access without restrictive conditions such as `aws:SourceArn`, `aws:SourceAccount`, `aws:PrincipalOrgID`, or `sns:Endpoint` scoping are treated as publicly accessible.",
17
+ "Risk": "**Public SNS topics** allow anyone or unknown accounts to:\n- **Subscribe** and siphon messages (confidentiality)\n- **Publish** spoofed payloads that alter workflows (integrity)\n- **Flood** messages causing outages and costs (availability)\nThey also enable cross-account abuse and bypass expected trust boundaries.",
18
+ "RelatedUrl": "",
19
+ "AdditionalURLs": [
20
+ "https://www.trendmicro.com/cloudoneconformity/knowledge-base/aws/SNS/topics-everyone-publish.html",
21
+ "https://docs.aws.amazon.com/config/latest/developerguide/sns-topic-policy.html"
22
+ ],
14
23
  "Remediation": {
15
24
  "Code": {
16
- "CLI": "",
17
- "NativeIaC": "",
18
- "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/aws/SNS/topics-everyone-publish.html",
19
- "Terraform": "https://docs.prowler.com/checks/aws/general-policies/ensure-sns-topic-policy-is-not-public-by-only-allowing-specific-services-or-principals-to-access-it#terraform"
25
+ "CLI": "aws sns set-topic-attributes --topic-arn <TOPIC_ARN> --attribute-name Policy --attribute-value '{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::<ACCOUNT_ID>:root\"},\"Action\":\"sns:Publish\",\"Resource\":\"<TOPIC_ARN>\"}]}'",
26
+ "NativeIaC": "```yaml\n# CloudFormation: restrict SNS topic policy to the account (not public)\nResources:\n <example_resource_name>:\n Type: AWS::SNS::TopicPolicy\n Properties:\n Topics:\n - arn:aws:sns:<region>:<account_id>:<example_resource_name>\n PolicyDocument:\n Version: '2012-10-17'\n Statement:\n - Effect: Allow\n Action: sns:Publish\n Resource: arn:aws:sns:<region>:<account_id>:<example_resource_name>\n Principal:\n AWS: arn:aws:iam::<account_id>:root # Critical: restrict to account root to remove public access\n```",
27
+ "Other": "1. Open the Amazon SNS console and select Topics\n2. Choose the topic and go to the Access policy tab\n3. Edit the policy and remove any Principal set to \"*\" (Everyone/Public)\n4. Add a statement allowing only your account root: Principal = arn:aws:iam::<ACCOUNT_ID>:root with Action sns:Publish and Resource set to the topic ARN\n5. Save changes",
28
+ "Terraform": "```hcl\n# Restrict SNS topic policy to the account (not public)\nresource \"aws_sns_topic_policy\" \"<example_resource_name>\" {\n arn = \"<TOPIC_ARN>\"\n policy = jsonencode({\n Version = \"2012-10-17\"\n Statement = [{\n Effect = \"Allow\"\n Action = \"sns:Publish\"\n Resource = \"<TOPIC_ARN>\"\n Principal = { AWS = \"arn:aws:iam::<ACCOUNT_ID>:root\" } # Critical: restrict principal to the account to remove public access\n }]\n })\n}\n```"
20
29
  },
21
30
  "Recommendation": {
22
- "Text": "Ensure there is a business requirement for service to be public.",
23
- "Url": "https://docs.aws.amazon.com/config/latest/developerguide/sns-topic-policy.html"
31
+ "Text": "Restrict the **topic policy** to specific principals and minimal actions:\n- Avoid `Principal:*`\n- Allow only needed actions (e.g., `sns:Publish`)\n- Add conditions like `aws:SourceArn`, `aws:SourceAccount`, `aws:PrincipalOrgID`, or `sns:Endpoint`\nApply **least privilege**, separate duties, and review policies regularly.",
32
+ "Url": "https://hub.prowler.com/check/sns_topics_not_publicly_accessible"
24
33
  }
25
34
  },
26
35
  "Categories": [
@@ -1,26 +1,32 @@
1
1
  {
2
2
  "Provider": "aws",
3
3
  "CheckID": "trustedadvisor_errors_and_warnings",
4
- "CheckTitle": "Check Trusted Advisor for errors and warnings.",
5
- "CheckType": [],
4
+ "CheckTitle": "Trusted Advisor check has no errors or warnings",
5
+ "CheckType": [
6
+ "Software and Configuration Checks/AWS Security Best Practices"
7
+ ],
6
8
  "ServiceName": "trustedadvisor",
7
9
  "SubServiceName": "",
8
- "ResourceIdTemplate": "arn:aws:service:region:account-id",
10
+ "ResourceIdTemplate": "",
9
11
  "Severity": "medium",
10
12
  "ResourceType": "Other",
11
- "Description": "Check Trusted Advisor for errors and warnings.",
12
- "Risk": "Improve the security of your application by closing gaps, enabling various AWS security features and examining your permissions.",
13
- "RelatedUrl": "https://aws.amazon.com/premiumsupport/technology/trusted-advisor/best-practice-checklist/",
13
+ "Description": "**AWS Trusted Advisor** check statuses are assessed to identify items in `warning` or `error`. The finding reflects the state reported by Trusted Advisor across categories such as **Security**, **Fault Tolerance**, **Service Limits**, and **Cost**, indicating where configurations or quotas require attention.",
14
+ "Risk": "Unaddressed **warnings/errors** can leave misconfigurations that impact CIA:\n- **Confidentiality**: public access or weak auth exposes data\n- **Integrity**: overly permissive settings allow unwanted changes\n- **Availability**: limit exhaustion or poor resilience triggers outages\nThey can also increase unnecessary cost.",
15
+ "RelatedUrl": "",
16
+ "AdditionalURLs": [
17
+ "https://aws.amazon.com/premiumsupport/technology/trusted-advisor/best-practice-checklist/",
18
+ "https://www.trendmicro.com/cloudoneconformity/knowledge-base/aws/TrustedAdvisor/checks.html"
19
+ ],
14
20
  "Remediation": {
15
21
  "Code": {
16
22
  "CLI": "",
17
23
  "NativeIaC": "",
18
- "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/aws/TrustedAdvisor/checks.html",
24
+ "Other": "1. Sign in to the AWS Console and open Trusted Advisor\n2. Go to Checks and filter Status to Warning and Error\n3. Open each failing check and click View details/Recommended actions\n4. Apply the listed fix to the affected resources\n5. Click Refresh on the check and repeat until all checks show OK",
19
25
  "Terraform": ""
20
26
  },
21
27
  "Recommendation": {
22
- "Text": "Review and act upon its recommendations.",
23
- "Url": "https://aws.amazon.com/premiumsupport/technology/trusted-advisor/best-practice-checklist/"
28
+ "Text": "Adopt a continuous process to remediate Trusted Advisor findings:\n- Prioritize **`error`** then `warning`\n- Assign ownership and SLAs\n- Integrate alerts with workflows\n- Enforce **least privilege**, segmentation, encryption, MFA, and tested backups\n- Reassess regularly to confirm fixes and prevent regression",
29
+ "Url": "https://hub.prowler.com/check/trustedadvisor_errors_and_warnings"
24
30
  }
25
31
  },
26
32
  "Categories": [],
@@ -1,29 +1,37 @@
1
1
  {
2
2
  "Provider": "aws",
3
3
  "CheckID": "trustedadvisor_premium_support_plan_subscribed",
4
- "CheckTitle": "Check if a Premium support plan is subscribed",
5
- "CheckType": [],
4
+ "CheckTitle": "AWS account is subscribed to an AWS Premium Support plan",
5
+ "CheckType": [
6
+ "Software and Configuration Checks/AWS Security Best Practices"
7
+ ],
6
8
  "ServiceName": "trustedadvisor",
7
9
  "SubServiceName": "",
8
- "ResourceIdTemplate": "arn:aws:iam::AWS_ACCOUNT_NUMBER:root",
10
+ "ResourceIdTemplate": "",
9
11
  "Severity": "low",
10
12
  "ResourceType": "Other",
11
- "Description": "Check if a Premium support plan is subscribed.",
12
- "Risk": "Ensure that the appropriate support level is enabled for the necessary AWS accounts. For example, if an AWS account is being used to host production systems and environments, it is highly recommended that the minimum AWS Support Plan should be Business.",
13
- "RelatedUrl": "https://aws.amazon.com/premiumsupport/plans/",
13
+ "Description": "**AWS account** is subscribed to an **AWS Premium Support plan** (e.g., Business or Enterprise)",
14
+ "Risk": "Without **Premium Support**, critical incidents face slower response, reducing **availability** and delaying containment of security events. Limited Trusted Advisor coverage lets **misconfigurations** persist, risking **data exposure** and **privilege misuse**. Lack of expert guidance increases change risk during production impacts.",
15
+ "RelatedUrl": "",
16
+ "AdditionalURLs": [
17
+ "https://www.trendmicro.com/cloudoneconformity-staging/knowledge-base/aws/Support/support-plan.html",
18
+ "https://aws.amazon.com/premiumsupport/plans/"
19
+ ],
14
20
  "Remediation": {
15
21
  "Code": {
16
22
  "CLI": "",
17
23
  "NativeIaC": "",
18
- "Other": "https://www.trendmicro.com/cloudoneconformity-staging/knowledge-base/aws/Support/support-plan.html",
24
+ "Other": "1. Sign in to the AWS Management Console as the account root user\n2. Open https://console.aws.amazon.com/support/home#/plans\n3. Click \"Change plan\"\n4. Select \"Business Support\" (or higher) and click \"Continue\"\n5. Review and confirm the upgrade",
19
25
  "Terraform": ""
20
26
  },
21
27
  "Recommendation": {
22
- "Text": "It is recommended that you subscribe to the AWS Business Support tier or higher for all of your AWS production accounts. If you don't have premium support, you must have an action plan to handle issues which require help from AWS Support. AWS Support provides a mix of tools and technology, people, and programs designed to proactively help you optimize performance, lower costs, and innovate faster.",
23
- "Url": "https://www.trendmicro.com/cloudoneconformity-staging/knowledge-base/aws/Support/support-plan.html"
28
+ "Text": "Adopt **Business** or higher for production and mission-critical accounts.\n- Integrate Support into IR with defined contacts/severity\n- Enforce **least privilege** for case access\n- Use Trusted Advisor for proactive hardening\n- If opting out, ensure an equivalent 24/7 support and escalation path",
29
+ "Url": "https://hub.prowler.com/check/trustedadvisor_premium_support_plan_subscribed"
24
30
  }
25
31
  },
26
- "Categories": [],
32
+ "Categories": [
33
+ "resilience"
34
+ ],
27
35
  "DependsOn": [],
28
36
  "RelatedTo": [],
29
37
  "Notes": ""
@@ -26,7 +26,7 @@
26
26
  }
27
27
  },
28
28
  "Categories": [
29
- "trustboundaries"
29
+ "trust-boundaries"
30
30
  ],
31
31
  "DependsOn": [],
32
32
  "RelatedTo": [],
@@ -26,7 +26,7 @@
26
26
  }
27
27
  },
28
28
  "Categories": [
29
- "trustboundaries"
29
+ "trust-boundaries"
30
30
  ],
31
31
  "DependsOn": [],
32
32
  "RelatedTo": [],
@@ -1,31 +1,40 @@
1
1
  {
2
2
  "Provider": "aws",
3
3
  "CheckID": "waf_global_rule_with_conditions",
4
- "CheckTitle": "AWS WAF Classic Global Rules Should Have at Least One Condition.",
4
+ "CheckTitle": "AWS WAF Classic Global rule has at least one condition",
5
5
  "CheckType": [
6
+ "Software and Configuration Checks/AWS Security Best Practices/Network Reachability",
7
+ "Software and Configuration Checks/Industry and Regulatory Standards/AWS Foundational Security Best Practices",
6
8
  "Software and Configuration Checks/Industry and Regulatory Standards/NIST 800-53 Controls"
7
9
  ],
8
10
  "ServiceName": "waf",
9
11
  "SubServiceName": "",
10
- "ResourceIdTemplate": "arn:aws:waf:account-id:rule/rule-id",
12
+ "ResourceIdTemplate": "",
11
13
  "Severity": "medium",
12
14
  "ResourceType": "AwsWafRule",
13
- "Description": "Ensure that every AWS WAF Classic Global Rule contains at least one condition.",
14
- "Risk": "An AWS WAF Classic Global rule without any conditions cannot inspect or filter traffic, potentially allowing malicious requests to pass unchecked.",
15
- "RelatedUrl": "https://docs.aws.amazon.com/config/latest/developerguide/waf-global-rule-not-empty.html",
15
+ "Description": "**AWS WAF Classic global rules** contain at least one **condition** that matches HTTP(S) requests the rule evaluates for action (e.g., `allow`, `block`, `count`).",
16
+ "Risk": "**No-condition rules** never match traffic, providing no filtering. Malicious requests (SQLi/XSS, bots) can reach origins, impacting **confidentiality** (data exfiltration), **integrity** (tampering), and **availability** (service disruption). They may also create a false sense of coverage.",
17
+ "RelatedUrl": "",
18
+ "AdditionalURLs": [
19
+ "https://docs.aws.amazon.com/waf/latest/developerguide/classic-web-acl-rules-editing.html",
20
+ "https://docs.aws.amazon.com/securityhub/latest/userguide/waf-controls.html#waf-6",
21
+ "https://docs.aws.amazon.com/config/latest/developerguide/waf-global-rule-not-empty.html"
22
+ ],
16
23
  "Remediation": {
17
24
  "Code": {
18
- "CLI": "aws waf update-rule --rule-id <your-rule-id> --change-token <your-change-token> --updates '[{\"Action\":\"INSERT\",\"Predicate\":{\"Negated\":false,\"Type\":\"IPMatch\",\"DataId\":\"<your-ipset-id>\"}}]' --region <your-region>",
19
- "NativeIaC": "",
20
- "Other": "https://docs.aws.amazon.com/securityhub/latest/userguide/waf-controls.html#waf-6",
21
- "Terraform": ""
25
+ "CLI": "aws waf update-rule --rule-id <example_resource_id> --change-token <example_change_token> --updates '[{\"Action\":\"INSERT\",\"Predicate\":{\"Negated\":false,\"Type\":\"IPMatch\",\"DataId\":\"<example_resource_id>\"}}]' --region us-east-1",
26
+ "NativeIaC": "```yaml\n# CloudFormation: ensure the WAF Classic Global rule has at least one condition\nResources:\n <example_resource_name>:\n Type: AWS::WAF::Rule\n Properties:\n Name: <example_resource_name>\n MetricName: <example_metric_name>\n # Critical: add at least one predicate (condition) so the rule is not empty\n Predicates:\n - Negated: false # evaluate as-is\n Type: IPMatch\n DataId: <example_resource_id> # existing IPSet ID\n```",
27
+ "Other": "1. Open the AWS Console > AWS WAF, then click Switch to AWS WAF Classic\n2. In Global (CloudFront) scope, go to Rules and select the target rule\n3. Click Edit (or Add rule) > Add condition\n4. Choose a condition type (e.g., IP match), select an existing condition, set it to does (not negated)\n5. Click Update/Save to apply\n",
28
+ "Terraform": "```hcl\n# Ensure the WAF Classic Global rule has at least one condition\nresource \"aws_waf_rule\" \"<example_resource_name>\" {\n name = \"<example_resource_name>\"\n metric_name = \"<example_metric_name>\"\n\n # Critical: add at least one predicate (condition) so the rule is not empty\n predicate {\n data_id = \"<example_resource_id>\" # existing IPSet ID\n negated = false\n type = \"IPMatch\"\n }\n}\n```"
22
29
  },
23
30
  "Recommendation": {
24
- "Text": "Ensure that every AWS WAF Classic Global rule has at least one condition to properly inspect and manage web traffic.",
25
- "Url": "https://docs.aws.amazon.com/waf/latest/developerguide/classic-web-acl-rules-editing.html"
31
+ "Text": "Attach at least one precise **condition** to every rule, aligned to known threats and application context. Apply **least privilege** for traffic, use managed rule groups for **defense in depth**, and routinely review rules to remove placeholders. *If on Classic*, plan migration to WAFv2.",
32
+ "Url": "https://hub.prowler.com/check/waf_global_rule_with_conditions"
26
33
  }
27
34
  },
28
- "Categories": [],
35
+ "Categories": [
36
+ "internet-exposed"
37
+ ],
29
38
  "DependsOn": [],
30
39
  "RelatedTo": [],
31
40
  "Notes": ""