prowler-cloud 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.
- prowler/CHANGELOG.md +34 -0
- prowler/config/config.py +1 -1
- prowler/lib/outputs/compliance/prowler_threatscore/prowler_threatscore.py +15 -4
- prowler/providers/aws/aws_regions_by_service.json +1 -20
- prowler/providers/aws/services/bedrock/bedrock_api_key_no_administrative_privileges/bedrock_api_key_no_administrative_privileges.metadata.json +1 -1
- prowler/providers/aws/services/bedrock/bedrock_api_key_no_long_term_credentials/bedrock_api_key_no_long_term_credentials.metadata.json +1 -1
- prowler/providers/aws/services/ec2/ec2_instance_account_imdsv2_enabled/ec2_instance_account_imdsv2_enabled.metadata.json +2 -1
- prowler/providers/aws/services/ec2/ec2_instance_imdsv2_enabled/ec2_instance_imdsv2_enabled.metadata.json +3 -1
- prowler/providers/aws/services/ec2/ec2_instance_uses_single_eni/ec2_instance_uses_single_eni.metadata.json +1 -1
- prowler/providers/aws/services/glue/glue_data_catalogs_connection_passwords_encryption_enabled/glue_data_catalogs_connection_passwords_encryption_enabled.metadata.json +17 -11
- prowler/providers/aws/services/glue/glue_data_catalogs_metadata_encryption_enabled/glue_data_catalogs_metadata_encryption_enabled.metadata.json +17 -10
- prowler/providers/aws/services/glue/glue_data_catalogs_not_publicly_accessible/glue_data_catalogs_not_publicly_accessible.metadata.json +18 -11
- prowler/providers/aws/services/glue/glue_database_connections_ssl_enabled/glue_database_connections_ssl_enabled.metadata.json +18 -12
- prowler/providers/aws/services/glue/glue_development_endpoints_cloudwatch_logs_encryption_enabled/glue_development_endpoints_cloudwatch_logs_encryption_enabled.metadata.json +17 -11
- prowler/providers/aws/services/glue/glue_development_endpoints_job_bookmark_encryption_enabled/glue_development_endpoints_job_bookmark_encryption_enabled.metadata.json +17 -12
- prowler/providers/aws/services/glue/glue_development_endpoints_s3_encryption_enabled/glue_development_endpoints_s3_encryption_enabled.metadata.json +17 -11
- prowler/providers/aws/services/glue/glue_etl_jobs_amazon_s3_encryption_enabled/glue_etl_jobs_amazon_s3_encryption_enabled.metadata.json +21 -14
- prowler/providers/aws/services/glue/glue_etl_jobs_cloudwatch_logs_encryption_enabled/glue_etl_jobs_cloudwatch_logs_encryption_enabled.metadata.json +19 -12
- prowler/providers/aws/services/glue/glue_etl_jobs_job_bookmark_encryption_enabled/glue_etl_jobs_job_bookmark_encryption_enabled.metadata.json +17 -12
- prowler/providers/aws/services/glue/glue_etl_jobs_logging_enabled/glue_etl_jobs_logging_enabled.metadata.json +18 -12
- prowler/providers/aws/services/glue/glue_ml_transform_encrypted_at_rest/glue_ml_transform_encrypted_at_rest.metadata.json +20 -12
- prowler/providers/aws/services/iam/iam_inline_policy_allows_privilege_escalation/iam_inline_policy_allows_privilege_escalation.metadata.json +3 -1
- prowler/providers/aws/services/iam/iam_policy_allows_privilege_escalation/iam_policy_allows_privilege_escalation.metadata.json +3 -1
- prowler/providers/aws/services/iam/iam_policy_cloudshell_admin_not_attached/iam_policy_cloudshell_admin_not_attached.metadata.json +1 -1
- prowler/providers/aws/services/iam/iam_role_administratoraccess_policy/iam_role_administratoraccess_policy.metadata.json +1 -1
- prowler/providers/aws/services/iam/iam_role_cross_account_readonlyaccess_policy/iam_role_cross_account_readonlyaccess_policy.metadata.json +1 -1
- prowler/providers/aws/services/iam/iam_role_cross_service_confused_deputy_prevention/iam_role_cross_service_confused_deputy_prevention.metadata.json +1 -1
- prowler/providers/aws/services/inspector2/inspector2_active_findings_exist/inspector2_active_findings_exist.metadata.json +23 -13
- prowler/providers/aws/services/inspector2/inspector2_is_enabled/inspector2_is_enabled.metadata.json +18 -12
- prowler/providers/aws/services/kafka/kafka_cluster_encryption_at_rest_uses_cmk/kafka_cluster_encryption_at_rest_uses_cmk.metadata.json +24 -13
- prowler/providers/aws/services/kafka/kafka_cluster_enhanced_monitoring_enabled/kafka_cluster_enhanced_monitoring_enabled.metadata.json +24 -14
- prowler/providers/aws/services/kafka/kafka_cluster_in_transit_encryption_enabled/kafka_cluster_in_transit_encryption_enabled.metadata.json +23 -15
- prowler/providers/aws/services/kafka/kafka_cluster_is_public/kafka_cluster_is_public.metadata.json +23 -14
- prowler/providers/aws/services/kafka/kafka_cluster_mutual_tls_authentication_enabled/kafka_cluster_mutual_tls_authentication_enabled.metadata.json +26 -15
- prowler/providers/aws/services/kafka/kafka_cluster_unrestricted_access_disabled/kafka_cluster_unrestricted_access_disabled.metadata.json +27 -15
- prowler/providers/aws/services/kafka/kafka_cluster_uses_latest_version/kafka_cluster_uses_latest_version.metadata.json +23 -14
- prowler/providers/aws/services/kafka/kafka_connector_in_transit_encryption_enabled/kafka_connector_in_transit_encryption_enabled.metadata.json +18 -13
- prowler/providers/aws/services/kms/kms_cmk_are_used/kms_cmk_are_used.metadata.json +16 -12
- prowler/providers/aws/services/kms/kms_cmk_not_deleted_unintentionally/kms_cmk_not_deleted_unintentionally.metadata.json +16 -10
- prowler/providers/aws/services/kms/kms_cmk_not_multi_region/kms_cmk_not_multi_region.metadata.json +21 -14
- prowler/providers/aws/services/kms/kms_cmk_rotation_enabled/kms_cmk_rotation_enabled.metadata.json +19 -13
- prowler/providers/aws/services/kms/kms_key_not_publicly_accessible/kms_key_not_publicly_accessible.metadata.json +22 -14
- prowler/providers/aws/services/memorydb/memorydb_cluster_auto_minor_version_upgrades/memorydb_cluster_auto_minor_version_upgrades.metadata.json +23 -14
- prowler/providers/aws/services/redshift/redshift_cluster_enhanced_vpc_routing/redshift_cluster_enhanced_vpc_routing.metadata.json +1 -1
- prowler/providers/aws/services/s3/s3_bucket_object_versioning/s3_bucket_object_versioning.metadata.json +1 -1
- prowler/providers/aws/services/s3/s3_bucket_shadow_resource_vulnerability/s3_bucket_shadow_resource_vulnerability.metadata.json +1 -1
- prowler/providers/aws/services/servicecatalog/servicecatalog_portfolio_shared_within_organization_only/servicecatalog_portfolio_shared_within_organization_only.metadata.json +17 -13
- prowler/providers/aws/services/sns/sns_subscription_not_using_http_endpoints/sns_subscription_not_using_http_endpoints.metadata.json +18 -11
- prowler/providers/aws/services/sns/sns_topics_kms_encryption_at_rest_enabled/sns_topics_kms_encryption_at_rest_enabled.metadata.json +23 -12
- prowler/providers/aws/services/sns/sns_topics_not_publicly_accessible/sns_topics_not_publicly_accessible.metadata.json +21 -12
- prowler/providers/aws/services/trustedadvisor/trustedadvisor_errors_and_warnings/trustedadvisor_errors_and_warnings.metadata.json +15 -9
- prowler/providers/aws/services/trustedadvisor/trustedadvisor_premium_support_plan_subscribed/trustedadvisor_premium_support_plan_subscribed.metadata.json +18 -10
- prowler/providers/aws/services/vpc/vpc_endpoint_connections_trust_boundaries/vpc_endpoint_connections_trust_boundaries.metadata.json +1 -1
- prowler/providers/aws/services/vpc/vpc_endpoint_services_allowed_principals_trust_boundaries/vpc_endpoint_services_allowed_principals_trust_boundaries.metadata.json +1 -1
- prowler/providers/aws/services/waf/waf_global_rule_with_conditions/waf_global_rule_with_conditions.metadata.json +21 -12
- prowler/providers/aws/services/waf/waf_global_rulegroup_not_empty/waf_global_rulegroup_not_empty.metadata.json +18 -12
- prowler/providers/aws/services/waf/waf_global_webacl_logging_enabled/waf_global_webacl_logging_enabled.metadata.json +19 -11
- prowler/providers/aws/services/waf/waf_global_webacl_with_rules/waf_global_webacl_with_rules.metadata.json +18 -11
- prowler/providers/aws/services/waf/waf_regional_rule_with_conditions/waf_regional_rule_with_conditions.metadata.json +17 -11
- prowler/providers/aws/services/waf/waf_regional_rulegroup_not_empty/waf_regional_rulegroup_not_empty.metadata.json +17 -11
- prowler/providers/aws/services/waf/waf_regional_webacl_with_rules/waf_regional_webacl_with_rules.metadata.json +18 -11
- prowler/providers/aws/services/wafv2/wafv2_webacl_logging_enabled/wafv2_webacl_logging_enabled.metadata.json +19 -12
- prowler/providers/aws/services/wafv2/wafv2_webacl_rule_logging_enabled/wafv2_webacl_rule_logging_enabled.metadata.json +19 -12
- prowler/providers/aws/services/wafv2/wafv2_webacl_with_rules/wafv2_webacl_with_rules.metadata.json +22 -13
- prowler/providers/gcp/services/cloudstorage/cloudstorage_service.py +1 -1
- prowler/providers/iac/lib/arguments/arguments.py +2 -2
- prowler/providers/mongodbatlas/services/clusters/clusters_service.py +23 -3
- {prowler_cloud-5.15.1.dist-info → prowler_cloud-5.16.1.dist-info}/METADATA +4 -2
- {prowler_cloud-5.15.1.dist-info → prowler_cloud-5.16.1.dist-info}/RECORD +72 -72
- {prowler_cloud-5.15.1.dist-info → prowler_cloud-5.16.1.dist-info}/LICENSE +0 -0
- {prowler_cloud-5.15.1.dist-info → prowler_cloud-5.16.1.dist-info}/WHEEL +0 -0
- {prowler_cloud-5.15.1.dist-info → prowler_cloud-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": "
|
|
4
|
+
"CheckTitle": "Cloud KMS key does not grant access to allUsers or allAuthenticatedUsers",
|
|
5
5
|
"CheckType": [
|
|
6
|
-
"
|
|
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": "
|
|
11
|
-
"Severity": "
|
|
13
|
+
"ResourceIdTemplate": "",
|
|
14
|
+
"Severity": "critical",
|
|
12
15
|
"ResourceType": "AwsKmsKey",
|
|
13
|
-
"Description": "
|
|
14
|
-
"Risk": "
|
|
15
|
-
"RelatedUrl": "
|
|
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": "
|
|
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": "
|
|
25
|
-
"Url": "https://
|
|
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
|
-
"
|
|
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": "
|
|
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": "
|
|
11
|
+
"ResourceIdTemplate": "",
|
|
9
12
|
"Severity": "medium",
|
|
10
|
-
"ResourceType": "
|
|
11
|
-
"Description": "
|
|
12
|
-
"Risk": "
|
|
13
|
-
"RelatedUrl": "
|
|
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
|
|
23
|
-
"Url": "https://
|
|
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": ""
|
|
@@ -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/
|
|
25
|
+
"Url": "https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html"
|
|
26
26
|
}
|
|
27
27
|
},
|
|
28
28
|
"Categories": [],
|
|
@@ -1,32 +1,36 @@
|
|
|
1
1
|
{
|
|
2
2
|
"Provider": "aws",
|
|
3
3
|
"CheckID": "servicecatalog_portfolio_shared_within_organization_only",
|
|
4
|
-
"CheckTitle": "Service Catalog
|
|
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": "
|
|
11
|
+
"ResourceIdTemplate": "",
|
|
11
12
|
"Severity": "high",
|
|
12
|
-
"ResourceType": "
|
|
13
|
-
"Description": "
|
|
14
|
-
"Risk": "Sharing
|
|
15
|
-
"RelatedUrl": "
|
|
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": "
|
|
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": "
|
|
25
|
-
"Url": "https://
|
|
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
|
-
"
|
|
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": "
|
|
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": "
|
|
11
|
+
"ResourceIdTemplate": "",
|
|
9
12
|
"Severity": "high",
|
|
10
13
|
"ResourceType": "AwsSnsTopic",
|
|
11
|
-
"Description": "
|
|
12
|
-
"Risk": "
|
|
13
|
-
"RelatedUrl": "
|
|
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": "
|
|
23
|
-
"Url": "https://
|
|
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": "
|
|
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": "
|
|
15
|
+
"ResourceIdTemplate": "",
|
|
9
16
|
"Severity": "high",
|
|
10
17
|
"ResourceType": "AwsSnsTopic",
|
|
11
|
-
"Description": "
|
|
12
|
-
"Risk": "
|
|
13
|
-
"RelatedUrl": "
|
|
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
|
|
17
|
-
"NativeIaC": "
|
|
18
|
-
"Other": "
|
|
19
|
-
"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": "
|
|
23
|
-
"Url": "https://
|
|
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": "
|
|
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": "
|
|
13
|
+
"ResourceIdTemplate": "",
|
|
9
14
|
"Severity": "high",
|
|
10
15
|
"ResourceType": "AwsSnsTopic",
|
|
11
|
-
"Description": "
|
|
12
|
-
"Risk": "
|
|
13
|
-
"RelatedUrl": "
|
|
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": "
|
|
19
|
-
"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": "
|
|
23
|
-
"Url": "https://
|
|
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": "
|
|
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": "
|
|
10
|
+
"ResourceIdTemplate": "",
|
|
9
11
|
"Severity": "medium",
|
|
10
12
|
"ResourceType": "Other",
|
|
11
|
-
"Description": "
|
|
12
|
-
"Risk": "
|
|
13
|
-
"RelatedUrl": "
|
|
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": "
|
|
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": "
|
|
23
|
-
"Url": "https://
|
|
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": "
|
|
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": "
|
|
10
|
+
"ResourceIdTemplate": "",
|
|
9
11
|
"Severity": "low",
|
|
10
12
|
"ResourceType": "Other",
|
|
11
|
-
"Description": "
|
|
12
|
-
"Risk": "
|
|
13
|
-
"RelatedUrl": "
|
|
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://
|
|
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": "
|
|
23
|
-
"Url": "https://
|
|
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": ""
|
|
@@ -1,31 +1,40 @@
|
|
|
1
1
|
{
|
|
2
2
|
"Provider": "aws",
|
|
3
3
|
"CheckID": "waf_global_rule_with_conditions",
|
|
4
|
-
"CheckTitle": "AWS WAF Classic Global
|
|
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": "
|
|
12
|
+
"ResourceIdTemplate": "",
|
|
11
13
|
"Severity": "medium",
|
|
12
14
|
"ResourceType": "AwsWafRule",
|
|
13
|
-
"Description": "
|
|
14
|
-
"Risk": "
|
|
15
|
-
"RelatedUrl": "
|
|
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 <
|
|
19
|
-
"NativeIaC": "",
|
|
20
|
-
"Other": "
|
|
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": "
|
|
25
|
-
"Url": "https://
|
|
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": ""
|