prowler-cloud 5.12.3__py3-none-any.whl → 5.13.0__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 (528) hide show
  1. dashboard/assets/markdown-styles.css +34 -0
  2. dashboard/compliance/c5_aws.py +43 -0
  3. dashboard/compliance/ccc_aws.py +36 -0
  4. dashboard/compliance/ccc_azure.py +36 -0
  5. dashboard/compliance/ccc_gcp.py +36 -0
  6. dashboard/compliance/cis_3_0_oci.py +41 -0
  7. dashboard/pages/overview.py +66 -16
  8. prowler/CHANGELOG.md +60 -0
  9. prowler/__main__.py +128 -14
  10. prowler/compliance/aws/aws_account_security_onboarding_aws.json +1 -0
  11. prowler/compliance/aws/aws_audit_manager_control_tower_guardrails_aws.json +1 -0
  12. prowler/compliance/aws/aws_foundational_security_best_practices_aws.json +2 -1
  13. prowler/compliance/aws/aws_foundational_technical_review_aws.json +1 -0
  14. prowler/compliance/aws/aws_well_architected_framework_reliability_pillar_aws.json +1 -0
  15. prowler/compliance/aws/aws_well_architected_framework_security_pillar_aws.json +1 -0
  16. prowler/compliance/aws/c5_aws.json +10744 -0
  17. prowler/compliance/aws/ccc_aws.json +6206 -0
  18. prowler/compliance/aws/cis_1.4_aws.json +1 -0
  19. prowler/compliance/aws/cis_1.5_aws.json +1 -0
  20. prowler/compliance/aws/cis_2.0_aws.json +1 -0
  21. prowler/compliance/aws/cis_3.0_aws.json +1 -0
  22. prowler/compliance/aws/cis_4.0_aws.json +1 -0
  23. prowler/compliance/aws/cis_5.0_aws.json +1 -0
  24. prowler/compliance/aws/cisa_aws.json +1 -0
  25. prowler/compliance/aws/ens_rd2022_aws.json +1 -0
  26. prowler/compliance/aws/fedramp_low_revision_4_aws.json +1 -0
  27. prowler/compliance/aws/fedramp_moderate_revision_4_aws.json +1 -0
  28. prowler/compliance/aws/ffiec_aws.json +1 -0
  29. prowler/compliance/aws/gdpr_aws.json +1 -0
  30. prowler/compliance/aws/gxp_21_cfr_part_11_aws.json +1 -0
  31. prowler/compliance/aws/gxp_eu_annex_11_aws.json +1 -0
  32. prowler/compliance/aws/hipaa_aws.json +1 -0
  33. prowler/compliance/aws/iso27001_2013_aws.json +1 -0
  34. prowler/compliance/aws/iso27001_2022_aws.json +1 -0
  35. prowler/compliance/aws/kisa_isms_p_2023_aws.json +1 -0
  36. prowler/compliance/aws/kisa_isms_p_2023_korean_aws.json +1 -0
  37. prowler/compliance/aws/mitre_attack_aws.json +287 -11
  38. prowler/compliance/aws/nis2_aws.json +1 -0
  39. prowler/compliance/aws/nist_800_171_revision_2_aws.json +1 -0
  40. prowler/compliance/aws/nist_800_53_revision_4_aws.json +1 -0
  41. prowler/compliance/aws/nist_800_53_revision_5_aws.json +1 -0
  42. prowler/compliance/aws/nist_csf_1.1_aws.json +1 -0
  43. prowler/compliance/aws/pci_3.2.1_aws.json +2 -1
  44. prowler/compliance/aws/pci_4.0_aws.json +1 -0
  45. prowler/compliance/aws/prowler_threatscore_aws.json +1 -0
  46. prowler/compliance/aws/rbi_cyber_security_framework_aws.json +1 -0
  47. prowler/compliance/aws/soc2_aws.json +1 -0
  48. prowler/compliance/azure/ccc_azure.json +6147 -0
  49. prowler/compliance/azure/cis_2.0_azure.json +1 -0
  50. prowler/compliance/azure/cis_2.1_azure.json +1 -0
  51. prowler/compliance/azure/cis_3.0_azure.json +1 -0
  52. prowler/compliance/azure/cis_4.0_azure.json +1 -0
  53. prowler/compliance/azure/ens_rd2022_azure.json +1 -0
  54. prowler/compliance/azure/iso27001_2022_azure.json +1 -0
  55. prowler/compliance/azure/mitre_attack_azure.json +131 -5
  56. prowler/compliance/azure/nis2_azure.json +1 -0
  57. prowler/compliance/azure/pci_4.0_azure.json +1 -0
  58. prowler/compliance/azure/prowler_threatscore_azure.json +1 -0
  59. prowler/compliance/azure/soc2_azure.json +1 -0
  60. prowler/compliance/gcp/ccc_gcp.json +6077 -0
  61. prowler/compliance/gcp/cis_2.0_gcp.json +1 -0
  62. prowler/compliance/gcp/cis_3.0_gcp.json +1 -0
  63. prowler/compliance/gcp/cis_4.0_gcp.json +1 -0
  64. prowler/compliance/gcp/ens_rd2022_gcp.json +1 -0
  65. prowler/compliance/gcp/iso27001_2022_gcp.json +1 -0
  66. prowler/compliance/gcp/mitre_attack_gcp.json +287 -11
  67. prowler/compliance/gcp/nis2_gcp.json +1 -0
  68. prowler/compliance/gcp/pci_4.0_gcp.json +1 -0
  69. prowler/compliance/gcp/prowler_threatscore_gcp.json +1 -0
  70. prowler/compliance/gcp/soc2_gcp.json +1 -0
  71. prowler/compliance/github/cis_1.0_github.json +1 -0
  72. prowler/compliance/kubernetes/cis_1.10_kubernetes.json +1 -0
  73. prowler/compliance/kubernetes/cis_1.11_kubernetes.json +1 -0
  74. prowler/compliance/kubernetes/cis_1.8_kubernetes.json +1 -0
  75. prowler/compliance/kubernetes/iso27001_2022_kubernetes.json +1 -0
  76. prowler/compliance/kubernetes/pci_4.0_kubernetes.json +1 -0
  77. prowler/compliance/llm/__init__.py +0 -0
  78. prowler/compliance/m365/cis_4.0_m365.json +1 -0
  79. prowler/compliance/m365/iso27001_2022_m365.json +1 -0
  80. prowler/compliance/m365/prowler_threatscore_m365.json +1 -0
  81. prowler/compliance/nhn/iso27001_2022_nhn.json +1 -0
  82. prowler/compliance/oci/__init__.py +0 -0
  83. prowler/compliance/oci/cis_3.0_oci.json +1141 -0
  84. prowler/config/config.py +5 -1
  85. prowler/config/llm_config.yaml +175015 -0
  86. prowler/config/oraclecloud_mutelist_example.yaml +61 -0
  87. prowler/lib/check/check.py +9 -1
  88. prowler/lib/check/compliance.py +1 -0
  89. prowler/lib/check/compliance_models.py +33 -3
  90. prowler/lib/check/models.py +96 -8
  91. prowler/lib/check/utils.py +8 -2
  92. prowler/lib/cli/parser.py +6 -4
  93. prowler/lib/outputs/compliance/aws_well_architected/aws_well_architected.py +4 -0
  94. prowler/lib/outputs/compliance/aws_well_architected/models.py +2 -0
  95. prowler/lib/outputs/compliance/c5/__init__.py +0 -0
  96. prowler/lib/outputs/compliance/c5/c5.py +98 -0
  97. prowler/lib/outputs/compliance/c5/c5_aws.py +92 -0
  98. prowler/lib/outputs/compliance/c5/models.py +30 -0
  99. prowler/lib/outputs/compliance/ccc/__init__.py +0 -0
  100. prowler/lib/outputs/compliance/ccc/ccc_aws.py +95 -0
  101. prowler/lib/outputs/compliance/ccc/ccc_azure.py +95 -0
  102. prowler/lib/outputs/compliance/ccc/ccc_gcp.py +95 -0
  103. prowler/lib/outputs/compliance/ccc/models.py +90 -0
  104. prowler/lib/outputs/compliance/cis/cis_aws.py +4 -0
  105. prowler/lib/outputs/compliance/cis/cis_azure.py +4 -0
  106. prowler/lib/outputs/compliance/cis/cis_gcp.py +4 -0
  107. prowler/lib/outputs/compliance/cis/cis_github.py +4 -0
  108. prowler/lib/outputs/compliance/cis/cis_kubernetes.py +4 -0
  109. prowler/lib/outputs/compliance/cis/cis_m365.py +4 -0
  110. prowler/lib/outputs/compliance/cis/cis_oci.py +106 -0
  111. prowler/lib/outputs/compliance/cis/models.py +56 -0
  112. prowler/lib/outputs/compliance/compliance.py +10 -0
  113. prowler/lib/outputs/compliance/compliance_output.py +4 -1
  114. prowler/lib/outputs/compliance/ens/ens_aws.py +4 -0
  115. prowler/lib/outputs/compliance/ens/ens_azure.py +4 -0
  116. prowler/lib/outputs/compliance/ens/ens_gcp.py +4 -0
  117. prowler/lib/outputs/compliance/ens/models.py +6 -0
  118. prowler/lib/outputs/compliance/generic/generic.py +4 -0
  119. prowler/lib/outputs/compliance/generic/models.py +2 -0
  120. prowler/lib/outputs/compliance/iso27001/iso27001_aws.py +4 -0
  121. prowler/lib/outputs/compliance/iso27001/iso27001_azure.py +4 -0
  122. prowler/lib/outputs/compliance/iso27001/iso27001_gcp.py +4 -0
  123. prowler/lib/outputs/compliance/iso27001/iso27001_kubernetes.py +4 -0
  124. prowler/lib/outputs/compliance/iso27001/iso27001_m365.py +4 -0
  125. prowler/lib/outputs/compliance/iso27001/iso27001_nhn.py +4 -0
  126. prowler/lib/outputs/compliance/iso27001/models.py +12 -0
  127. prowler/lib/outputs/compliance/kisa_ismsp/kisa_ismsp_aws.py +4 -0
  128. prowler/lib/outputs/compliance/kisa_ismsp/models.py +2 -0
  129. prowler/lib/outputs/compliance/mitre_attack/mitre_attack_aws.py +4 -0
  130. prowler/lib/outputs/compliance/mitre_attack/mitre_attack_azure.py +4 -0
  131. prowler/lib/outputs/compliance/mitre_attack/mitre_attack_gcp.py +4 -0
  132. prowler/lib/outputs/compliance/mitre_attack/models.py +6 -0
  133. prowler/lib/outputs/compliance/prowler_threatscore/models.py +8 -0
  134. prowler/lib/outputs/compliance/prowler_threatscore/prowler_threatscore.py +46 -4
  135. prowler/lib/outputs/compliance/prowler_threatscore/prowler_threatscore_aws.py +4 -0
  136. prowler/lib/outputs/compliance/prowler_threatscore/prowler_threatscore_azure.py +4 -0
  137. prowler/lib/outputs/compliance/prowler_threatscore/prowler_threatscore_gcp.py +4 -0
  138. prowler/lib/outputs/compliance/prowler_threatscore/prowler_threatscore_m365.py +4 -0
  139. prowler/lib/outputs/csv/csv.py +3 -0
  140. prowler/lib/outputs/finding.py +22 -0
  141. prowler/lib/outputs/html/html.py +192 -7
  142. prowler/lib/outputs/jira/jira.py +284 -47
  143. prowler/lib/outputs/ocsf/ocsf.py +1 -4
  144. prowler/lib/outputs/outputs.py +6 -0
  145. prowler/lib/outputs/summary_table.py +10 -0
  146. prowler/providers/aws/aws_regions_by_service.json +221 -44
  147. prowler/providers/aws/lib/quick_inventory/quick_inventory.py +3 -0
  148. prowler/providers/aws/lib/security_hub/security_hub.py +12 -2
  149. prowler/providers/aws/services/accessanalyzer/accessanalyzer_enabled/accessanalyzer_enabled.metadata.json +27 -13
  150. prowler/providers/aws/services/accessanalyzer/accessanalyzer_enabled_without_findings/accessanalyzer_enabled_without_findings.metadata.json +32 -13
  151. prowler/providers/aws/services/account/account_maintain_current_contact_details/account_maintain_current_contact_details.metadata.json +23 -11
  152. prowler/providers/aws/services/account/account_maintain_different_contact_details_to_security_billing_and_operations/account_maintain_different_contact_details_to_security_billing_and_operations.metadata.json +24 -12
  153. prowler/providers/aws/services/account/account_security_contact_information_is_registered/account_security_contact_information_is_registered.metadata.json +19 -11
  154. prowler/providers/aws/services/account/account_security_questions_are_registered_in_the_aws_account/account_security_questions_are_registered_in_the_aws_account.metadata.json +14 -10
  155. prowler/providers/aws/services/acm/acm_certificates_expiration_check/acm_certificates_expiration_check.metadata.json +17 -9
  156. prowler/providers/aws/services/acm/acm_certificates_transparency_logs_enabled/acm_certificates_transparency_logs_enabled.metadata.json +16 -12
  157. prowler/providers/aws/services/acm/acm_certificates_with_secure_key_algorithms/acm_certificates_with_secure_key_algorithms.metadata.json +21 -12
  158. prowler/providers/aws/services/apigateway/apigateway_restapi_authorizers_enabled/apigateway_restapi_authorizers_enabled.metadata.json +23 -16
  159. prowler/providers/aws/services/apigateway/apigateway_restapi_cache_encrypted/apigateway_restapi_cache_encrypted.metadata.json +22 -12
  160. prowler/providers/aws/services/apigateway/apigateway_restapi_client_certificate_enabled/apigateway_restapi_client_certificate_enabled.metadata.json +26 -18
  161. prowler/providers/aws/services/apigateway/apigateway_restapi_logging_enabled/apigateway_restapi_logging_enabled.metadata.json +30 -19
  162. prowler/providers/aws/services/apigateway/apigateway_restapi_public/apigateway_restapi_public.metadata.json +24 -16
  163. prowler/providers/aws/services/apigateway/apigateway_restapi_public_with_authorizer/apigateway_restapi_public_with_authorizer.metadata.json +31 -18
  164. prowler/providers/aws/services/apigateway/apigateway_restapi_tracing_enabled/apigateway_restapi_tracing_enabled.metadata.json +20 -12
  165. prowler/providers/aws/services/apigateway/apigateway_restapi_waf_acl_attached/apigateway_restapi_waf_acl_attached.metadata.json +24 -18
  166. prowler/providers/aws/services/apigatewayv2/apigatewayv2_api_access_logging_enabled/apigatewayv2_api_access_logging_enabled.metadata.json +18 -12
  167. prowler/providers/aws/services/apigatewayv2/apigatewayv2_api_authorizers_enabled/apigatewayv2_api_authorizers_enabled.metadata.json +21 -12
  168. prowler/providers/aws/services/appstream/appstream_fleet_default_internet_access_disabled/appstream_fleet_default_internet_access_disabled.metadata.json +23 -15
  169. prowler/providers/aws/services/appstream/appstream_fleet_maximum_session_duration/appstream_fleet_maximum_session_duration.metadata.json +15 -12
  170. prowler/providers/aws/services/appstream/appstream_fleet_session_disconnect_timeout/appstream_fleet_session_disconnect_timeout.metadata.json +17 -14
  171. prowler/providers/aws/services/appstream/appstream_fleet_session_idle_disconnect_timeout/appstream_fleet_session_idle_disconnect_timeout.metadata.json +20 -15
  172. prowler/providers/aws/services/appsync/appsync_field_level_logging_enabled/appsync_field_level_logging_enabled.metadata.json +21 -12
  173. prowler/providers/aws/services/appsync/appsync_graphql_api_no_api_key_authentication/appsync_graphql_api_no_api_key_authentication.metadata.json +20 -13
  174. prowler/providers/aws/services/athena/athena_workgroup_encryption/athena_workgroup_encryption.metadata.json +24 -12
  175. prowler/providers/aws/services/athena/athena_workgroup_enforce_configuration/athena_workgroup_enforce_configuration.metadata.json +20 -13
  176. prowler/providers/aws/services/athena/athena_workgroup_logging_enabled/athena_workgroup_logging_enabled.metadata.json +21 -12
  177. prowler/providers/aws/services/autoscaling/autoscaling_find_secrets_ec2_launch_configuration/autoscaling_find_secrets_ec2_launch_configuration.metadata.json +15 -10
  178. prowler/providers/aws/services/autoscaling/autoscaling_group_capacity_rebalance_enabled/autoscaling_group_capacity_rebalance_enabled.metadata.json +20 -13
  179. prowler/providers/aws/services/autoscaling/autoscaling_group_elb_health_check_enabled/autoscaling_group_elb_health_check_enabled.metadata.json +20 -12
  180. prowler/providers/aws/services/autoscaling/autoscaling_group_launch_configuration_no_public_ip/autoscaling_group_launch_configuration_no_public_ip.metadata.json +20 -13
  181. prowler/providers/aws/services/autoscaling/autoscaling_group_launch_configuration_requires_imdsv2/autoscaling_group_launch_configuration_requires_imdsv2.metadata.json +26 -14
  182. prowler/providers/aws/services/autoscaling/autoscaling_group_multiple_az/autoscaling_group_multiple_az.metadata.json +22 -13
  183. prowler/providers/aws/services/autoscaling/autoscaling_group_multiple_instance_types/autoscaling_group_multiple_instance_types.metadata.json +21 -13
  184. prowler/providers/aws/services/autoscaling/autoscaling_group_using_ec2_launch_template/autoscaling_group_using_ec2_launch_template.metadata.json +19 -12
  185. prowler/providers/aws/services/autoscaling/autoscaling_service.py +1 -1
  186. prowler/providers/aws/services/awslambda/awslambda_function_inside_vpc/awslambda_function_inside_vpc.metadata.json +26 -13
  187. prowler/providers/aws/services/awslambda/awslambda_function_invoke_api_operations_cloudtrail_logging_enabled/awslambda_function_invoke_api_operations_cloudtrail_logging_enabled.metadata.json +20 -13
  188. prowler/providers/aws/services/awslambda/awslambda_function_no_secrets_in_code/awslambda_function_no_secrets_in_code.metadata.json +18 -9
  189. prowler/providers/aws/services/awslambda/awslambda_function_no_secrets_in_variables/awslambda_function_no_secrets_in_variables.metadata.json +20 -12
  190. prowler/providers/aws/services/awslambda/awslambda_function_not_publicly_accessible/awslambda_function_not_publicly_accessible.metadata.json +21 -12
  191. prowler/providers/aws/services/awslambda/awslambda_function_url_cors_policy/awslambda_function_url_cors_policy.metadata.json +24 -13
  192. prowler/providers/aws/services/awslambda/awslambda_function_url_public/awslambda_function_url_public.metadata.json +22 -12
  193. prowler/providers/aws/services/awslambda/awslambda_function_using_supported_runtimes/awslambda_function_using_supported_runtimes.metadata.json +24 -13
  194. prowler/providers/aws/services/awslambda/awslambda_function_vpc_multi_az/awslambda_function_vpc_multi_az.metadata.json +23 -13
  195. prowler/providers/aws/services/backup/backup_plans_exist/backup_plans_exist.metadata.json +22 -15
  196. prowler/providers/aws/services/backup/backup_recovery_point_encrypted/backup_recovery_point_encrypted.metadata.json +21 -12
  197. prowler/providers/aws/services/backup/backup_reportplans_exist/backup_reportplans_exist.metadata.json +19 -15
  198. prowler/providers/aws/services/backup/backup_vaults_encrypted/backup_vaults_encrypted.metadata.json +24 -13
  199. prowler/providers/aws/services/backup/backup_vaults_exist/backup_vaults_exist.metadata.json +19 -15
  200. prowler/providers/aws/services/cloudformation/cloudformation_stack_cdktoolkit_bootstrap_version/cloudformation_stack_cdktoolkit_bootstrap_version.metadata.json +24 -13
  201. prowler/providers/aws/services/cloudformation/cloudformation_stack_outputs_find_secrets/cloudformation_stack_outputs_find_secrets.metadata.json +22 -12
  202. prowler/providers/aws/services/cloudformation/cloudformation_stacks_termination_protection_enabled/cloudformation_stacks_termination_protection_enabled.metadata.json +21 -12
  203. prowler/providers/aws/services/cloudfront/cloudfront_distributions_custom_ssl_certificate/cloudfront_distributions_custom_ssl_certificate.metadata.json +21 -12
  204. prowler/providers/aws/services/cloudfront/cloudfront_distributions_default_root_object/cloudfront_distributions_default_root_object.metadata.json +19 -12
  205. prowler/providers/aws/services/cloudfront/cloudfront_distributions_field_level_encryption_enabled/cloudfront_distributions_field_level_encryption_enabled.metadata.json +19 -12
  206. prowler/providers/aws/services/cloudfront/cloudfront_distributions_geo_restrictions_enabled/cloudfront_distributions_geo_restrictions_enabled.metadata.json +22 -13
  207. prowler/providers/aws/services/cloudfront/cloudfront_distributions_https_enabled/cloudfront_distributions_https_enabled.metadata.json +21 -12
  208. prowler/providers/aws/services/cloudfront/cloudfront_distributions_https_sni_enabled/cloudfront_distributions_https_sni_enabled.metadata.json +20 -12
  209. prowler/providers/aws/services/cloudfront/cloudfront_distributions_logging_enabled/cloudfront_distributions_logging_enabled.metadata.json +22 -13
  210. prowler/providers/aws/services/cloudfront/cloudfront_distributions_multiple_origin_failover_configured/cloudfront_distributions_multiple_origin_failover_configured.metadata.json +21 -16
  211. prowler/providers/aws/services/cloudfront/cloudfront_distributions_origin_traffic_encrypted/cloudfront_distributions_origin_traffic_encrypted.metadata.json +27 -14
  212. prowler/providers/aws/services/cloudfront/cloudfront_distributions_s3_origin_access_control/cloudfront_distributions_s3_origin_access_control.metadata.json +24 -14
  213. prowler/providers/aws/services/cloudfront/cloudfront_distributions_s3_origin_non_existent_bucket/cloudfront_distributions_s3_origin_non_existent_bucket.metadata.json +18 -11
  214. prowler/providers/aws/services/cloudfront/cloudfront_distributions_using_deprecated_ssl_protocols/cloudfront_distributions_using_deprecated_ssl_protocols.metadata.json +20 -12
  215. prowler/providers/aws/services/cloudfront/cloudfront_distributions_using_waf/cloudfront_distributions_using_waf.metadata.json +21 -12
  216. prowler/providers/aws/services/cloudtrail/cloudtrail_bucket_requires_mfa_delete/cloudtrail_bucket_requires_mfa_delete.metadata.json +16 -11
  217. prowler/providers/aws/services/cloudtrail/cloudtrail_cloudwatch_logging_enabled/cloudtrail_cloudwatch_logging_enabled.metadata.json +19 -15
  218. prowler/providers/aws/services/cloudtrail/cloudtrail_insights_exist/cloudtrail_insights_exist.metadata.json +19 -14
  219. prowler/providers/aws/services/cloudtrail/cloudtrail_kms_encryption_enabled/cloudtrail_kms_encryption_enabled.metadata.json +19 -14
  220. prowler/providers/aws/services/cloudtrail/cloudtrail_log_file_validation_enabled/cloudtrail_log_file_validation_enabled.metadata.json +20 -13
  221. prowler/providers/aws/services/cloudtrail/cloudtrail_logs_s3_bucket_access_logging_enabled/cloudtrail_logs_s3_bucket_access_logging_enabled.metadata.json +18 -13
  222. prowler/providers/aws/services/cloudtrail/cloudtrail_logs_s3_bucket_is_not_publicly_accessible/cloudtrail_logs_s3_bucket_is_not_publicly_accessible.metadata.json +24 -16
  223. prowler/providers/aws/services/cloudtrail/cloudtrail_multi_region_enabled/cloudtrail_multi_region_enabled.metadata.json +17 -13
  224. prowler/providers/aws/services/cloudtrail/cloudtrail_multi_region_enabled_logging_management_events/cloudtrail_multi_region_enabled_logging_management_events.metadata.json +19 -12
  225. prowler/providers/aws/services/cloudtrail/cloudtrail_s3_dataevents_read_enabled/cloudtrail_s3_dataevents_read_enabled.metadata.json +22 -12
  226. prowler/providers/aws/services/cloudtrail/cloudtrail_s3_dataevents_write_enabled/cloudtrail_s3_dataevents_write_enabled.metadata.json +21 -11
  227. prowler/providers/aws/services/cloudtrail/cloudtrail_threat_detection_enumeration/cloudtrail_threat_detection_enumeration.metadata.json +22 -11
  228. prowler/providers/aws/services/cloudtrail/cloudtrail_threat_detection_llm_jacking/cloudtrail_threat_detection_llm_jacking.metadata.json +25 -12
  229. prowler/providers/aws/services/cloudtrail/cloudtrail_threat_detection_privilege_escalation/cloudtrail_threat_detection_privilege_escalation.metadata.json +18 -10
  230. prowler/providers/aws/services/config/config_recorder_all_regions_enabled/config_recorder_all_regions_enabled.metadata.json +20 -12
  231. prowler/providers/aws/services/config/config_recorder_using_aws_service_role/config_recorder_using_aws_service_role.metadata.json +20 -13
  232. prowler/providers/aws/services/directoryservice/directoryservice_directory_log_forwarding_enabled/directoryservice_directory_log_forwarding_enabled.metadata.json +20 -11
  233. prowler/providers/aws/services/directoryservice/directoryservice_directory_monitor_notifications/directoryservice_directory_monitor_notifications.metadata.json +19 -11
  234. prowler/providers/aws/services/directoryservice/directoryservice_directory_snapshots_limit/directoryservice_directory_snapshots_limit.metadata.json +19 -10
  235. prowler/providers/aws/services/directoryservice/directoryservice_ldap_certificate_expiration/directoryservice_ldap_certificate_expiration.metadata.json +20 -11
  236. prowler/providers/aws/services/directoryservice/directoryservice_radius_server_security_protocol/directoryservice_radius_server_security_protocol.metadata.json +23 -12
  237. prowler/providers/aws/services/directoryservice/directoryservice_supported_mfa_radius_enabled/directoryservice_supported_mfa_radius_enabled.metadata.json +23 -12
  238. prowler/providers/aws/services/dlm/dlm_ebs_snapshot_lifecycle_policy_exists/dlm_ebs_snapshot_lifecycle_policy_exists.metadata.json +19 -13
  239. prowler/providers/aws/services/dms/dms_endpoint_mongodb_authentication_enabled/dms_endpoint_mongodb_authentication_enabled.metadata.json +20 -13
  240. prowler/providers/aws/services/dms/dms_endpoint_neptune_iam_authorization_enabled/dms_endpoint_neptune_iam_authorization_enabled.metadata.json +19 -12
  241. prowler/providers/aws/services/dms/dms_endpoint_redis_in_transit_encryption_enabled/dms_endpoint_redis_in_transit_encryption_enabled.metadata.json +23 -13
  242. prowler/providers/aws/services/dms/dms_endpoint_ssl_enabled/dms_endpoint_ssl_enabled.metadata.json +27 -19
  243. prowler/providers/aws/services/dms/dms_instance_minor_version_upgrade_enabled/dms_instance_minor_version_upgrade_enabled.metadata.json +22 -12
  244. prowler/providers/aws/services/dms/dms_instance_multi_az_enabled/dms_instance_multi_az_enabled.metadata.json +20 -13
  245. prowler/providers/aws/services/dms/dms_instance_no_public_access/dms_instance_no_public_access.metadata.json +22 -11
  246. prowler/providers/aws/services/dms/dms_replication_task_source_logging_enabled/dms_replication_task_source_logging_enabled.metadata.json +21 -13
  247. prowler/providers/aws/services/dms/dms_replication_task_target_logging_enabled/dms_replication_task_target_logging_enabled.metadata.json +22 -13
  248. prowler/providers/aws/services/dms/dms_replication_task_target_logging_enabled/dms_replication_task_target_logging_enabled.py +39 -37
  249. prowler/providers/aws/services/dms/dms_service.py +0 -1
  250. prowler/providers/aws/services/ec2/ec2_ami_public/ec2_ami_public.py +11 -10
  251. prowler/providers/aws/services/ec2/ec2_instance_with_outdated_ami/__init__.py +0 -0
  252. prowler/providers/aws/services/ec2/ec2_instance_with_outdated_ami/ec2_instance_with_outdated_ami.metadata.json +30 -0
  253. prowler/providers/aws/services/ec2/ec2_instance_with_outdated_ami/ec2_instance_with_outdated_ami.py +52 -0
  254. prowler/providers/aws/services/ec2/ec2_service.py +26 -14
  255. prowler/providers/aws/services/efs/efs_access_point_enforce_root_directory/efs_access_point_enforce_root_directory.metadata.json +19 -13
  256. prowler/providers/aws/services/efs/efs_access_point_enforce_user_identity/efs_access_point_enforce_user_identity.metadata.json +23 -13
  257. prowler/providers/aws/services/efs/efs_encryption_at_rest_enabled/efs_encryption_at_rest_enabled.metadata.json +23 -13
  258. prowler/providers/aws/services/efs/efs_have_backup_enabled/efs_have_backup_enabled.metadata.json +20 -14
  259. prowler/providers/aws/services/efs/efs_mount_target_not_publicly_accessible/efs_mount_target_not_publicly_accessible.metadata.json +18 -12
  260. prowler/providers/aws/services/efs/efs_multi_az_enabled/efs_multi_az_enabled.metadata.json +21 -13
  261. prowler/providers/aws/services/efs/efs_not_publicly_accessible/efs_not_publicly_accessible.metadata.json +17 -13
  262. prowler/providers/aws/services/eks/eks_cluster_uses_a_supported_version/eks_cluster_uses_a_supported_version.py +4 -0
  263. prowler/providers/aws/services/elb/elb_ssl_listeners_use_acm_certificate/elb_ssl_listeners_use_acm_certificate.py +8 -2
  264. prowler/providers/aws/services/neptune/neptune_cluster_backup_enabled/neptune_cluster_backup_enabled.metadata.json +23 -13
  265. prowler/providers/aws/services/neptune/neptune_cluster_copy_tags_to_snapshots/neptune_cluster_copy_tags_to_snapshots.metadata.json +18 -14
  266. prowler/providers/aws/services/neptune/neptune_cluster_deletion_protection/neptune_cluster_deletion_protection.metadata.json +23 -14
  267. prowler/providers/aws/services/neptune/neptune_cluster_iam_authentication_enabled/neptune_cluster_iam_authentication_enabled.metadata.json +25 -13
  268. prowler/providers/aws/services/neptune/neptune_cluster_integration_cloudwatch_logs/neptune_cluster_integration_cloudwatch_logs.metadata.json +22 -14
  269. prowler/providers/aws/services/neptune/neptune_cluster_multi_az/neptune_cluster_multi_az.metadata.json +20 -12
  270. prowler/providers/aws/services/neptune/neptune_cluster_public_snapshot/neptune_cluster_public_snapshot.metadata.json +18 -10
  271. prowler/providers/aws/services/neptune/neptune_cluster_snapshot_encrypted/neptune_cluster_snapshot_encrypted.metadata.json +16 -10
  272. prowler/providers/aws/services/neptune/neptune_cluster_storage_encrypted/neptune_cluster_storage_encrypted.metadata.json +22 -13
  273. prowler/providers/aws/services/neptune/neptune_cluster_uses_public_subnet/neptune_cluster_uses_public_subnet.metadata.json +20 -12
  274. prowler/providers/aws/services/rds/rds_service.py +9 -2
  275. prowler/providers/aws/services/vpc/vpc_service.py +1 -1
  276. prowler/providers/azure/services/entra/entra_service.py +54 -25
  277. prowler/providers/common/arguments.py +16 -2
  278. prowler/providers/common/provider.py +34 -2
  279. prowler/providers/gcp/services/cloudsql/cloudsql_service.py +3 -3
  280. prowler/providers/gcp/services/cloudstorage/cloudstorage_bucket_lifecycle_management_enabled/__init__.py +0 -0
  281. prowler/providers/gcp/services/cloudstorage/cloudstorage_bucket_lifecycle_management_enabled/cloudstorage_bucket_lifecycle_management_enabled.metadata.json +34 -0
  282. prowler/providers/gcp/services/cloudstorage/cloudstorage_bucket_lifecycle_management_enabled/cloudstorage_bucket_lifecycle_management_enabled.py +48 -0
  283. prowler/providers/gcp/services/cloudstorage/cloudstorage_service.py +10 -0
  284. prowler/providers/gcp/services/compute/compute_project_os_login_enabled/compute_project_os_login_enabled.py +5 -0
  285. prowler/providers/gcp/services/iam/iam_audit_logs_enabled/iam_audit_logs_enabled.py +5 -0
  286. prowler/providers/gcp/services/iam/iam_role_kms_enforce_separation_of_duties/iam_role_kms_enforce_separation_of_duties.py +5 -0
  287. prowler/providers/gcp/services/logging/logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled/logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled.py +5 -0
  288. prowler/providers/gcp/services/logging/logging_log_metric_filter_and_alert_for_bucket_permission_changes_enabled/logging_log_metric_filter_and_alert_for_bucket_permission_changes_enabled.py +5 -0
  289. prowler/providers/gcp/services/logging/logging_log_metric_filter_and_alert_for_custom_role_changes_enabled/logging_log_metric_filter_and_alert_for_custom_role_changes_enabled.py +5 -0
  290. prowler/providers/gcp/services/logging/logging_log_metric_filter_and_alert_for_project_ownership_changes_enabled/logging_log_metric_filter_and_alert_for_project_ownership_changes_enabled.py +5 -0
  291. prowler/providers/gcp/services/logging/logging_log_metric_filter_and_alert_for_sql_instance_configuration_changes_enabled/logging_log_metric_filter_and_alert_for_sql_instance_configuration_changes_enabled.py +5 -0
  292. prowler/providers/gcp/services/logging/logging_log_metric_filter_and_alert_for_vpc_firewall_rule_changes_enabled/logging_log_metric_filter_and_alert_for_vpc_firewall_rule_changes_enabled.py +5 -0
  293. prowler/providers/gcp/services/logging/logging_log_metric_filter_and_alert_for_vpc_network_changes_enabled/logging_log_metric_filter_and_alert_for_vpc_network_changes_enabled.py +5 -0
  294. prowler/providers/gcp/services/logging/logging_log_metric_filter_and_alert_for_vpc_network_route_changes_enabled/logging_log_metric_filter_and_alert_for_vpc_network_route_changes_enabled.py +5 -0
  295. prowler/providers/gcp/services/logging/logging_sink_created/logging_sink_created.py +5 -0
  296. prowler/providers/gcp/services/monitoring/monitoring_service.py +30 -2
  297. prowler/providers/iac/iac_provider.py +1 -1
  298. prowler/providers/llm/__init__.py +0 -0
  299. prowler/providers/llm/lib/__init__.py +0 -0
  300. prowler/providers/llm/lib/arguments/__init__.py +0 -0
  301. prowler/providers/llm/lib/arguments/arguments.py +13 -0
  302. prowler/providers/llm/llm_provider.py +518 -0
  303. prowler/providers/llm/models.py +27 -0
  304. prowler/providers/m365/exceptions/exceptions.py +0 -55
  305. prowler/providers/m365/lib/arguments/arguments.py +8 -4
  306. prowler/providers/m365/lib/powershell/m365_powershell.py +14 -156
  307. prowler/providers/m365/m365_provider.py +19 -117
  308. prowler/providers/m365/models.py +0 -3
  309. prowler/providers/m365/services/admincenter/admincenter_service.py +52 -23
  310. prowler/providers/m365/services/entra/entra_admin_users_phishing_resistant_mfa_enabled/entra_admin_users_phishing_resistant_mfa_enabled.py +19 -2
  311. prowler/providers/m365/services/entra/entra_service.py +58 -30
  312. prowler/providers/m365/services/sharepoint/sharepoint_service.py +24 -3
  313. prowler/providers/oraclecloud/__init__.py +0 -0
  314. prowler/providers/oraclecloud/config.py +61 -0
  315. prowler/providers/oraclecloud/exceptions/__init__.py +0 -0
  316. prowler/providers/oraclecloud/exceptions/exceptions.py +197 -0
  317. prowler/providers/oraclecloud/lib/__init__.py +0 -0
  318. prowler/providers/oraclecloud/lib/arguments/__init__.py +0 -0
  319. prowler/providers/oraclecloud/lib/arguments/arguments.py +123 -0
  320. prowler/providers/oraclecloud/lib/mutelist/__init__.py +0 -0
  321. prowler/providers/oraclecloud/lib/mutelist/mutelist.py +176 -0
  322. prowler/providers/oraclecloud/lib/service/__init__.py +0 -0
  323. prowler/providers/oraclecloud/lib/service/service.py +213 -0
  324. prowler/providers/oraclecloud/models.py +96 -0
  325. prowler/providers/oraclecloud/oci_provider.py +1038 -0
  326. prowler/providers/oraclecloud/services/__init__.py +0 -0
  327. prowler/providers/oraclecloud/services/analytics/__init__.py +0 -0
  328. prowler/providers/oraclecloud/services/analytics/analytics_client.py +6 -0
  329. prowler/providers/oraclecloud/services/analytics/analytics_instance_access_restricted/__init__.py +0 -0
  330. prowler/providers/oraclecloud/services/analytics/analytics_instance_access_restricted/analytics_instance_access_restricted.metadata.json +36 -0
  331. prowler/providers/oraclecloud/services/analytics/analytics_instance_access_restricted/analytics_instance_access_restricted.py +48 -0
  332. prowler/providers/oraclecloud/services/analytics/analytics_service.py +99 -0
  333. prowler/providers/oraclecloud/services/audit/__init__.py +0 -0
  334. prowler/providers/oraclecloud/services/audit/audit_client.py +4 -0
  335. prowler/providers/oraclecloud/services/audit/audit_log_retention_period_365_days/__init__.py +0 -0
  336. prowler/providers/oraclecloud/services/audit/audit_log_retention_period_365_days/audit_log_retention_period_365_days.metadata.json +37 -0
  337. prowler/providers/oraclecloud/services/audit/audit_log_retention_period_365_days/audit_log_retention_period_365_days.py +46 -0
  338. prowler/providers/oraclecloud/services/audit/audit_service.py +57 -0
  339. prowler/providers/oraclecloud/services/blockstorage/__init__.py +0 -0
  340. prowler/providers/oraclecloud/services/blockstorage/blockstorage_block_volume_encrypted_with_cmk/__init__.py +0 -0
  341. prowler/providers/oraclecloud/services/blockstorage/blockstorage_block_volume_encrypted_with_cmk/blockstorage_block_volume_encrypted_with_cmk.metadata.json +37 -0
  342. prowler/providers/oraclecloud/services/blockstorage/blockstorage_block_volume_encrypted_with_cmk/blockstorage_block_volume_encrypted_with_cmk.py +39 -0
  343. prowler/providers/oraclecloud/services/blockstorage/blockstorage_boot_volume_encrypted_with_cmk/__init__.py +0 -0
  344. prowler/providers/oraclecloud/services/blockstorage/blockstorage_boot_volume_encrypted_with_cmk/blockstorage_boot_volume_encrypted_with_cmk.metadata.json +36 -0
  345. prowler/providers/oraclecloud/services/blockstorage/blockstorage_boot_volume_encrypted_with_cmk/blockstorage_boot_volume_encrypted_with_cmk.py +35 -0
  346. prowler/providers/oraclecloud/services/blockstorage/blockstorage_client.py +6 -0
  347. prowler/providers/oraclecloud/services/blockstorage/blockstorage_service.py +182 -0
  348. prowler/providers/oraclecloud/services/cloudguard/__init__.py +0 -0
  349. prowler/providers/oraclecloud/services/cloudguard/cloudguard_client.py +6 -0
  350. prowler/providers/oraclecloud/services/cloudguard/cloudguard_enabled/__init__.py +0 -0
  351. prowler/providers/oraclecloud/services/cloudguard/cloudguard_enabled/cloudguard_enabled.metadata.json +36 -0
  352. prowler/providers/oraclecloud/services/cloudguard/cloudguard_enabled/cloudguard_enabled.py +39 -0
  353. prowler/providers/oraclecloud/services/cloudguard/cloudguard_service.py +63 -0
  354. prowler/providers/oraclecloud/services/compute/__init__.py +0 -0
  355. prowler/providers/oraclecloud/services/compute/compute_client.py +4 -0
  356. prowler/providers/oraclecloud/services/compute/compute_instance_in_transit_encryption_enabled/__init__.py +0 -0
  357. prowler/providers/oraclecloud/services/compute/compute_instance_in_transit_encryption_enabled/compute_instance_in_transit_encryption_enabled.metadata.json +37 -0
  358. prowler/providers/oraclecloud/services/compute/compute_instance_in_transit_encryption_enabled/compute_instance_in_transit_encryption_enabled.py +38 -0
  359. prowler/providers/oraclecloud/services/compute/compute_instance_legacy_metadata_endpoint_disabled/__init__.py +0 -0
  360. prowler/providers/oraclecloud/services/compute/compute_instance_legacy_metadata_endpoint_disabled/compute_instance_legacy_metadata_endpoint_disabled.metadata.json +37 -0
  361. prowler/providers/oraclecloud/services/compute/compute_instance_legacy_metadata_endpoint_disabled/compute_instance_legacy_metadata_endpoint_disabled.py +37 -0
  362. prowler/providers/oraclecloud/services/compute/compute_instance_secure_boot_enabled/__init__.py +0 -0
  363. prowler/providers/oraclecloud/services/compute/compute_instance_secure_boot_enabled/compute_instance_secure_boot_enabled.metadata.json +37 -0
  364. prowler/providers/oraclecloud/services/compute/compute_instance_secure_boot_enabled/compute_instance_secure_boot_enabled.py +39 -0
  365. prowler/providers/oraclecloud/services/compute/compute_service.py +136 -0
  366. prowler/providers/oraclecloud/services/database/__init__.py +0 -0
  367. prowler/providers/oraclecloud/services/database/database_autonomous_database_access_restricted/__init__.py +0 -0
  368. prowler/providers/oraclecloud/services/database/database_autonomous_database_access_restricted/database_autonomous_database_access_restricted.metadata.json +36 -0
  369. prowler/providers/oraclecloud/services/database/database_autonomous_database_access_restricted/database_autonomous_database_access_restricted.py +40 -0
  370. prowler/providers/oraclecloud/services/database/database_client.py +6 -0
  371. prowler/providers/oraclecloud/services/database/database_service.py +79 -0
  372. prowler/providers/oraclecloud/services/events/__init__.py +0 -0
  373. prowler/providers/oraclecloud/services/events/events_client.py +4 -0
  374. prowler/providers/oraclecloud/services/events/events_notification_topic_and_subscription_exists/__init__.py +0 -0
  375. prowler/providers/oraclecloud/services/events/events_notification_topic_and_subscription_exists/events_notification_topic_and_subscription_exists.metadata.json +37 -0
  376. prowler/providers/oraclecloud/services/events/events_notification_topic_and_subscription_exists/events_notification_topic_and_subscription_exists.py +53 -0
  377. prowler/providers/oraclecloud/services/events/events_rule_cloudguard_problems/__init__.py +0 -0
  378. prowler/providers/oraclecloud/services/events/events_rule_cloudguard_problems/events_rule_cloudguard_problems.metadata.json +36 -0
  379. prowler/providers/oraclecloud/services/events/events_rule_cloudguard_problems/events_rule_cloudguard_problems.py +90 -0
  380. prowler/providers/oraclecloud/services/events/events_rule_iam_group_changes/__init__.py +0 -0
  381. prowler/providers/oraclecloud/services/events/events_rule_iam_group_changes/events_rule_iam_group_changes.metadata.json +37 -0
  382. prowler/providers/oraclecloud/services/events/events_rule_iam_group_changes/events_rule_iam_group_changes.py +67 -0
  383. prowler/providers/oraclecloud/services/events/events_rule_iam_policy_changes/__init__.py +0 -0
  384. prowler/providers/oraclecloud/services/events/events_rule_iam_policy_changes/events_rule_iam_policy_changes.metadata.json +37 -0
  385. prowler/providers/oraclecloud/services/events/events_rule_iam_policy_changes/events_rule_iam_policy_changes.py +67 -0
  386. prowler/providers/oraclecloud/services/events/events_rule_identity_provider_changes/__init__.py +0 -0
  387. prowler/providers/oraclecloud/services/events/events_rule_identity_provider_changes/events_rule_identity_provider_changes.metadata.json +37 -0
  388. prowler/providers/oraclecloud/services/events/events_rule_identity_provider_changes/events_rule_identity_provider_changes.py +67 -0
  389. prowler/providers/oraclecloud/services/events/events_rule_idp_group_mapping_changes/__init__.py +0 -0
  390. prowler/providers/oraclecloud/services/events/events_rule_idp_group_mapping_changes/events_rule_idp_group_mapping_changes.metadata.json +37 -0
  391. prowler/providers/oraclecloud/services/events/events_rule_idp_group_mapping_changes/events_rule_idp_group_mapping_changes.py +67 -0
  392. prowler/providers/oraclecloud/services/events/events_rule_local_user_authentication/__init__.py +0 -0
  393. prowler/providers/oraclecloud/services/events/events_rule_local_user_authentication/events_rule_local_user_authentication.metadata.json +38 -0
  394. prowler/providers/oraclecloud/services/events/events_rule_local_user_authentication/events_rule_local_user_authentication.py +63 -0
  395. prowler/providers/oraclecloud/services/events/events_rule_network_gateway_changes/__init__.py +0 -0
  396. prowler/providers/oraclecloud/services/events/events_rule_network_gateway_changes/events_rule_network_gateway_changes.metadata.json +37 -0
  397. prowler/providers/oraclecloud/services/events/events_rule_network_gateway_changes/events_rule_network_gateway_changes.py +88 -0
  398. prowler/providers/oraclecloud/services/events/events_rule_network_security_group_changes/__init__.py +0 -0
  399. prowler/providers/oraclecloud/services/events/events_rule_network_security_group_changes/events_rule_network_security_group_changes.metadata.json +37 -0
  400. prowler/providers/oraclecloud/services/events/events_rule_network_security_group_changes/events_rule_network_security_group_changes.py +68 -0
  401. prowler/providers/oraclecloud/services/events/events_rule_route_table_changes/__init__.py +0 -0
  402. prowler/providers/oraclecloud/services/events/events_rule_route_table_changes/events_rule_route_table_changes.metadata.json +37 -0
  403. prowler/providers/oraclecloud/services/events/events_rule_route_table_changes/events_rule_route_table_changes.py +68 -0
  404. prowler/providers/oraclecloud/services/events/events_rule_security_list_changes/__init__.py +0 -0
  405. prowler/providers/oraclecloud/services/events/events_rule_security_list_changes/events_rule_security_list_changes.metadata.json +37 -0
  406. prowler/providers/oraclecloud/services/events/events_rule_security_list_changes/events_rule_security_list_changes.py +68 -0
  407. prowler/providers/oraclecloud/services/events/events_rule_user_changes/__init__.py +0 -0
  408. prowler/providers/oraclecloud/services/events/events_rule_user_changes/events_rule_user_changes.metadata.json +37 -0
  409. prowler/providers/oraclecloud/services/events/events_rule_user_changes/events_rule_user_changes.py +69 -0
  410. prowler/providers/oraclecloud/services/events/events_rule_vcn_changes/__init__.py +0 -0
  411. prowler/providers/oraclecloud/services/events/events_rule_vcn_changes/events_rule_vcn_changes.metadata.json +37 -0
  412. prowler/providers/oraclecloud/services/events/events_rule_vcn_changes/events_rule_vcn_changes.py +65 -0
  413. prowler/providers/oraclecloud/services/events/events_service.py +215 -0
  414. prowler/providers/oraclecloud/services/events/lib/__init__.py +0 -0
  415. prowler/providers/oraclecloud/services/events/lib/helpers.py +116 -0
  416. prowler/providers/oraclecloud/services/filestorage/__init__.py +0 -0
  417. prowler/providers/oraclecloud/services/filestorage/filestorage_client.py +6 -0
  418. prowler/providers/oraclecloud/services/filestorage/filestorage_file_system_encrypted_with_cmk/__init__.py +0 -0
  419. prowler/providers/oraclecloud/services/filestorage/filestorage_file_system_encrypted_with_cmk/filestorage_file_system_encrypted_with_cmk.metadata.json +36 -0
  420. prowler/providers/oraclecloud/services/filestorage/filestorage_file_system_encrypted_with_cmk/filestorage_file_system_encrypted_with_cmk.py +39 -0
  421. prowler/providers/oraclecloud/services/filestorage/filestorage_service.py +96 -0
  422. prowler/providers/oraclecloud/services/identity/__init__.py +0 -0
  423. prowler/providers/oraclecloud/services/identity/identity_client.py +4 -0
  424. prowler/providers/oraclecloud/services/identity/identity_iam_admins_cannot_update_tenancy_admins/__init__.py +0 -0
  425. prowler/providers/oraclecloud/services/identity/identity_iam_admins_cannot_update_tenancy_admins/identity_iam_admins_cannot_update_tenancy_admins.metadata.json +36 -0
  426. prowler/providers/oraclecloud/services/identity/identity_iam_admins_cannot_update_tenancy_admins/identity_iam_admins_cannot_update_tenancy_admins.py +107 -0
  427. prowler/providers/oraclecloud/services/identity/identity_instance_principal_used/__init__.py +0 -0
  428. prowler/providers/oraclecloud/services/identity/identity_instance_principal_used/identity_instance_principal_used.metadata.json +36 -0
  429. prowler/providers/oraclecloud/services/identity/identity_instance_principal_used/identity_instance_principal_used.py +70 -0
  430. prowler/providers/oraclecloud/services/identity/identity_no_resources_in_root_compartment/__init__.py +0 -0
  431. prowler/providers/oraclecloud/services/identity/identity_no_resources_in_root_compartment/identity_no_resources_in_root_compartment.metadata.json +32 -0
  432. prowler/providers/oraclecloud/services/identity/identity_no_resources_in_root_compartment/identity_no_resources_in_root_compartment.py +51 -0
  433. prowler/providers/oraclecloud/services/identity/identity_non_root_compartment_exists/__init__.py +0 -0
  434. prowler/providers/oraclecloud/services/identity/identity_non_root_compartment_exists/identity_non_root_compartment_exists.metadata.json +32 -0
  435. prowler/providers/oraclecloud/services/identity/identity_non_root_compartment_exists/identity_non_root_compartment_exists.py +39 -0
  436. prowler/providers/oraclecloud/services/identity/identity_password_policy_expires_within_365_days/__init__.py +0 -0
  437. prowler/providers/oraclecloud/services/identity/identity_password_policy_expires_within_365_days/identity_password_policy_expires_within_365_days.metadata.json +36 -0
  438. prowler/providers/oraclecloud/services/identity/identity_password_policy_expires_within_365_days/identity_password_policy_expires_within_365_days.py +67 -0
  439. prowler/providers/oraclecloud/services/identity/identity_password_policy_minimum_length_14/__init__.py +0 -0
  440. prowler/providers/oraclecloud/services/identity/identity_password_policy_minimum_length_14/identity_password_policy_minimum_length_14.metadata.json +36 -0
  441. prowler/providers/oraclecloud/services/identity/identity_password_policy_minimum_length_14/identity_password_policy_minimum_length_14.py +97 -0
  442. prowler/providers/oraclecloud/services/identity/identity_password_policy_prevents_reuse/__init__.py +0 -0
  443. prowler/providers/oraclecloud/services/identity/identity_password_policy_prevents_reuse/identity_password_policy_prevents_reuse.metadata.json +36 -0
  444. prowler/providers/oraclecloud/services/identity/identity_password_policy_prevents_reuse/identity_password_policy_prevents_reuse.py +77 -0
  445. prowler/providers/oraclecloud/services/identity/identity_service.py +828 -0
  446. prowler/providers/oraclecloud/services/identity/identity_service_level_admins_exist/__init__.py +0 -0
  447. prowler/providers/oraclecloud/services/identity/identity_service_level_admins_exist/identity_service_level_admins_exist.metadata.json +32 -0
  448. prowler/providers/oraclecloud/services/identity/identity_service_level_admins_exist/identity_service_level_admins_exist.py +81 -0
  449. prowler/providers/oraclecloud/services/identity/identity_tenancy_admin_permissions_limited/__init__.py +0 -0
  450. prowler/providers/oraclecloud/services/identity/identity_tenancy_admin_permissions_limited/identity_tenancy_admin_permissions_limited.metadata.json +36 -0
  451. prowler/providers/oraclecloud/services/identity/identity_tenancy_admin_permissions_limited/identity_tenancy_admin_permissions_limited.py +81 -0
  452. prowler/providers/oraclecloud/services/identity/identity_tenancy_admin_users_no_api_keys/__init__.py +0 -0
  453. prowler/providers/oraclecloud/services/identity/identity_tenancy_admin_users_no_api_keys/identity_tenancy_admin_users_no_api_keys.metadata.json +36 -0
  454. prowler/providers/oraclecloud/services/identity/identity_tenancy_admin_users_no_api_keys/identity_tenancy_admin_users_no_api_keys.py +49 -0
  455. prowler/providers/oraclecloud/services/identity/identity_user_api_keys_rotated_90_days/__init__.py +0 -0
  456. prowler/providers/oraclecloud/services/identity/identity_user_api_keys_rotated_90_days/identity_user_api_keys_rotated_90_days.metadata.json +37 -0
  457. prowler/providers/oraclecloud/services/identity/identity_user_api_keys_rotated_90_days/identity_user_api_keys_rotated_90_days.py +73 -0
  458. prowler/providers/oraclecloud/services/identity/identity_user_auth_tokens_rotated_90_days/__init__.py +0 -0
  459. prowler/providers/oraclecloud/services/identity/identity_user_auth_tokens_rotated_90_days/identity_user_auth_tokens_rotated_90_days.metadata.json +36 -0
  460. prowler/providers/oraclecloud/services/identity/identity_user_auth_tokens_rotated_90_days/identity_user_auth_tokens_rotated_90_days.py +52 -0
  461. prowler/providers/oraclecloud/services/identity/identity_user_customer_secret_keys_rotated_90_days/__init__.py +0 -0
  462. prowler/providers/oraclecloud/services/identity/identity_user_customer_secret_keys_rotated_90_days/identity_user_customer_secret_keys_rotated_90_days.metadata.json +36 -0
  463. prowler/providers/oraclecloud/services/identity/identity_user_customer_secret_keys_rotated_90_days/identity_user_customer_secret_keys_rotated_90_days.py +49 -0
  464. prowler/providers/oraclecloud/services/identity/identity_user_db_passwords_rotated_90_days/__init__.py +0 -0
  465. prowler/providers/oraclecloud/services/identity/identity_user_db_passwords_rotated_90_days/identity_user_db_passwords_rotated_90_days.metadata.json +36 -0
  466. prowler/providers/oraclecloud/services/identity/identity_user_db_passwords_rotated_90_days/identity_user_db_passwords_rotated_90_days.py +49 -0
  467. prowler/providers/oraclecloud/services/identity/identity_user_mfa_enabled_console_access/__init__.py +0 -0
  468. prowler/providers/oraclecloud/services/identity/identity_user_mfa_enabled_console_access/identity_user_mfa_enabled_console_access.metadata.json +36 -0
  469. prowler/providers/oraclecloud/services/identity/identity_user_mfa_enabled_console_access/identity_user_mfa_enabled_console_access.py +43 -0
  470. prowler/providers/oraclecloud/services/identity/identity_user_valid_email_address/__init__.py +0 -0
  471. prowler/providers/oraclecloud/services/identity/identity_user_valid_email_address/identity_user_valid_email_address.metadata.json +36 -0
  472. prowler/providers/oraclecloud/services/identity/identity_user_valid_email_address/identity_user_valid_email_address.py +38 -0
  473. prowler/providers/oraclecloud/services/integration/__init__.py +0 -0
  474. prowler/providers/oraclecloud/services/integration/integration_client.py +8 -0
  475. prowler/providers/oraclecloud/services/integration/integration_instance_access_restricted/__init__.py +0 -0
  476. prowler/providers/oraclecloud/services/integration/integration_instance_access_restricted/integration_instance_access_restricted.metadata.json +36 -0
  477. prowler/providers/oraclecloud/services/integration/integration_instance_access_restricted/integration_instance_access_restricted.py +48 -0
  478. prowler/providers/oraclecloud/services/integration/integration_service.py +92 -0
  479. prowler/providers/oraclecloud/services/kms/__init__.py +0 -0
  480. prowler/providers/oraclecloud/services/kms/kms_client.py +4 -0
  481. prowler/providers/oraclecloud/services/kms/kms_key_rotation_enabled/__init__.py +0 -0
  482. prowler/providers/oraclecloud/services/kms/kms_key_rotation_enabled/kms_key_rotation_enabled.metadata.json +36 -0
  483. prowler/providers/oraclecloud/services/kms/kms_key_rotation_enabled/kms_key_rotation_enabled.py +37 -0
  484. prowler/providers/oraclecloud/services/kms/kms_service.py +136 -0
  485. prowler/providers/oraclecloud/services/logging/__init__.py +0 -0
  486. prowler/providers/oraclecloud/services/logging/logging_client.py +6 -0
  487. prowler/providers/oraclecloud/services/logging/logging_service.py +189 -0
  488. prowler/providers/oraclecloud/services/network/__init__.py +0 -0
  489. prowler/providers/oraclecloud/services/network/network_client.py +4 -0
  490. prowler/providers/oraclecloud/services/network/network_default_security_list_restricts_traffic/__init__.py +0 -0
  491. prowler/providers/oraclecloud/services/network/network_default_security_list_restricts_traffic/network_default_security_list_restricts_traffic.metadata.json +36 -0
  492. prowler/providers/oraclecloud/services/network/network_default_security_list_restricts_traffic/network_default_security_list_restricts_traffic.py +99 -0
  493. prowler/providers/oraclecloud/services/network/network_security_group_ingress_from_internet_to_rdp_port/__init__.py +0 -0
  494. prowler/providers/oraclecloud/services/network/network_security_group_ingress_from_internet_to_rdp_port/network_security_group_ingress_from_internet_to_rdp_port.metadata.json +36 -0
  495. prowler/providers/oraclecloud/services/network/network_security_group_ingress_from_internet_to_rdp_port/network_security_group_ingress_from_internet_to_rdp_port.py +65 -0
  496. prowler/providers/oraclecloud/services/network/network_security_group_ingress_from_internet_to_ssh_port/__init__.py +0 -0
  497. prowler/providers/oraclecloud/services/network/network_security_group_ingress_from_internet_to_ssh_port/network_security_group_ingress_from_internet_to_ssh_port.metadata.json +37 -0
  498. prowler/providers/oraclecloud/services/network/network_security_group_ingress_from_internet_to_ssh_port/network_security_group_ingress_from_internet_to_ssh_port.py +70 -0
  499. prowler/providers/oraclecloud/services/network/network_security_list_ingress_from_internet_to_rdp_port/__init__.py +0 -0
  500. prowler/providers/oraclecloud/services/network/network_security_list_ingress_from_internet_to_rdp_port/network_security_list_ingress_from_internet_to_rdp_port.metadata.json +36 -0
  501. prowler/providers/oraclecloud/services/network/network_security_list_ingress_from_internet_to_rdp_port/network_security_list_ingress_from_internet_to_rdp_port.py +62 -0
  502. prowler/providers/oraclecloud/services/network/network_security_list_ingress_from_internet_to_ssh_port/__init__.py +0 -0
  503. prowler/providers/oraclecloud/services/network/network_security_list_ingress_from_internet_to_ssh_port/network_security_list_ingress_from_internet_to_ssh_port.metadata.json +37 -0
  504. prowler/providers/oraclecloud/services/network/network_security_list_ingress_from_internet_to_ssh_port/network_security_list_ingress_from_internet_to_ssh_port.py +67 -0
  505. prowler/providers/oraclecloud/services/network/network_service.py +321 -0
  506. prowler/providers/oraclecloud/services/network/network_vcn_subnet_flow_logs_enabled/__init__.py +0 -0
  507. prowler/providers/oraclecloud/services/network/network_vcn_subnet_flow_logs_enabled/network_vcn_subnet_flow_logs_enabled.metadata.json +36 -0
  508. prowler/providers/oraclecloud/services/network/network_vcn_subnet_flow_logs_enabled/network_vcn_subnet_flow_logs_enabled.py +66 -0
  509. prowler/providers/oraclecloud/services/objectstorage/__init__.py +0 -0
  510. prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_encrypted_with_cmk/__init__.py +0 -0
  511. prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_encrypted_with_cmk/objectstorage_bucket_encrypted_with_cmk.metadata.json +37 -0
  512. prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_encrypted_with_cmk/objectstorage_bucket_encrypted_with_cmk.py +40 -0
  513. prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_logging_enabled/__init__.py +0 -0
  514. prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_logging_enabled/objectstorage_bucket_logging_enabled.metadata.json +32 -0
  515. prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_logging_enabled/objectstorage_bucket_logging_enabled.py +68 -0
  516. prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_not_publicly_accessible/__init__.py +0 -0
  517. prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_not_publicly_accessible/objectstorage_bucket_not_publicly_accessible.metadata.json +37 -0
  518. prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_not_publicly_accessible/objectstorage_bucket_not_publicly_accessible.py +43 -0
  519. prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_versioning_enabled/__init__.py +0 -0
  520. prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_versioning_enabled/objectstorage_bucket_versioning_enabled.metadata.json +37 -0
  521. prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_versioning_enabled/objectstorage_bucket_versioning_enabled.py +38 -0
  522. prowler/providers/oraclecloud/services/objectstorage/objectstorage_client.py +6 -0
  523. prowler/providers/oraclecloud/services/objectstorage/objectstorage_service.py +138 -0
  524. {prowler_cloud-5.12.3.dist-info → prowler_cloud-5.13.0.dist-info}/METADATA +9 -33
  525. {prowler_cloud-5.12.3.dist-info → prowler_cloud-5.13.0.dist-info}/RECORD +528 -280
  526. {prowler_cloud-5.12.3.dist-info → prowler_cloud-5.13.0.dist-info}/LICENSE +0 -0
  527. {prowler_cloud-5.12.3.dist-info → prowler_cloud-5.13.0.dist-info}/WHEEL +0 -0
  528. {prowler_cloud-5.12.3.dist-info → prowler_cloud-5.13.0.dist-info}/entry_points.txt +0 -0
@@ -35,6 +35,8 @@ class AWSCISModel(BaseModel):
35
35
  ResourceName: str
36
36
  CheckId: str
37
37
  Muted: bool
38
+ Framework: str
39
+ Name: str
38
40
 
39
41
 
40
42
  class AzureCISModel(BaseModel):
@@ -67,6 +69,8 @@ class AzureCISModel(BaseModel):
67
69
  ResourceName: str
68
70
  CheckId: str
69
71
  Muted: bool
72
+ Framework: str
73
+ Name: str
70
74
 
71
75
 
72
76
  class M365CISModel(BaseModel):
@@ -99,6 +103,8 @@ class M365CISModel(BaseModel):
99
103
  ResourceName: str
100
104
  CheckId: str
101
105
  Muted: bool
106
+ Framework: str
107
+ Name: str
102
108
 
103
109
 
104
110
  class GCPCISModel(BaseModel):
@@ -130,6 +136,8 @@ class GCPCISModel(BaseModel):
130
136
  ResourceName: str
131
137
  CheckId: str
132
138
  Muted: bool
139
+ Framework: str
140
+ Name: str
133
141
 
134
142
 
135
143
  class KubernetesCISModel(BaseModel):
@@ -162,6 +170,8 @@ class KubernetesCISModel(BaseModel):
162
170
  ResourceName: str
163
171
  CheckId: str
164
172
  Muted: bool
173
+ Framework: str
174
+ Name: str
165
175
 
166
176
 
167
177
  class GithubCISModel(BaseModel):
@@ -193,6 +203,52 @@ class GithubCISModel(BaseModel):
193
203
  ResourceName: str
194
204
  CheckId: str
195
205
  Muted: bool
206
+ Framework: str
207
+ Name: str
208
+
209
+
210
+ class OCICISModel(BaseModel):
211
+ """
212
+ OCICISModel generates a finding's output in OCI CIS Compliance format.
213
+ """
214
+
215
+ Provider: str
216
+ Description: str
217
+ TenancyId: str
218
+ Region: str
219
+ AssessmentDate: str
220
+ Requirements_Id: str
221
+ Requirements_Description: str
222
+ Requirements_Attributes_Section: str
223
+ Requirements_Attributes_SubSection: Optional[str] = None
224
+ Requirements_Attributes_Profile: str
225
+ Requirements_Attributes_AssessmentStatus: str
226
+ Requirements_Attributes_Description: str
227
+ Requirements_Attributes_RationaleStatement: str
228
+ Requirements_Attributes_ImpactStatement: str
229
+ Requirements_Attributes_RemediationProcedure: str
230
+ Requirements_Attributes_AuditProcedure: str
231
+ Requirements_Attributes_AdditionalInformation: str
232
+ Requirements_Attributes_DefaultValue: Optional[str] = None
233
+ Requirements_Attributes_References: str
234
+ Status: str
235
+ StatusExtended: str
236
+ ResourceId: str
237
+ ResourceName: str
238
+ CheckId: str
239
+ Muted: bool
240
+ Framework: str
241
+ Name: str
242
+
243
+
244
+ # Compliance models alias for backwards compatibility
245
+ CIS_AWS = AWSCISModel
246
+ CIS_Azure = AzureCISModel
247
+ CIS_GCP = GCPCISModel
248
+ CIS_Kubernetes = KubernetesCISModel
249
+ CIS_M365 = M365CISModel
250
+ CIS_Github = GithubCISModel
251
+ CIS_OCI = OCICISModel
196
252
 
197
253
 
198
254
  # TODO: Create a parent class for the common fields of CIS and have the specific classes from each provider to inherit from it.
@@ -2,6 +2,7 @@ import sys
2
2
 
3
3
  from prowler.lib.check.models import Check_Report
4
4
  from prowler.lib.logger import logger
5
+ from prowler.lib.outputs.compliance.c5.c5 import get_c5_table
5
6
  from prowler.lib.outputs.compliance.cis.cis import get_cis_table
6
7
  from prowler.lib.outputs.compliance.ens.ens import get_ens_table
7
8
  from prowler.lib.outputs.compliance.generic.generic_table import (
@@ -84,6 +85,15 @@ def display_compliance_table(
84
85
  output_directory,
85
86
  compliance_overview,
86
87
  )
88
+ elif "c5_" in compliance_framework:
89
+ get_c5_table(
90
+ findings,
91
+ bulk_checks_metadata,
92
+ compliance_framework,
93
+ output_filename,
94
+ output_directory,
95
+ compliance_overview,
96
+ )
87
97
  else:
88
98
  get_generic_compliance_table(
89
99
  findings,
@@ -42,7 +42,10 @@ class ComplianceOutput(Output):
42
42
  self._from_cli = from_cli
43
43
 
44
44
  if not file_extension and file_path:
45
- self._file_extension = "".join(Path(file_path).suffixes)
45
+ # Compliance reports are always CSV, so just use the last suffix
46
+ # e.g., "cis_5.0_aws.csv" should have extension ".csv", not ".0_aws.csv"
47
+ path_obj = Path(file_path)
48
+ self._file_extension = path_obj.suffix if path_obj.suffix else ""
46
49
  if file_extension:
47
50
  self._file_extension = file_extension
48
51
  self.file_path = f"{file_path}{self.file_extension}"
@@ -67,6 +67,8 @@ class AWSENS(ComplianceOutput):
67
67
  ResourceName=finding.resource_name,
68
68
  CheckId=finding.check_id,
69
69
  Muted=finding.muted,
70
+ Framework=compliance.Framework,
71
+ Name=compliance.Name,
70
72
  )
71
73
  self._data.append(compliance_row)
72
74
  # Add manual requirements to the compliance output
@@ -100,5 +102,7 @@ class AWSENS(ComplianceOutput):
100
102
  ResourceName="Manual check",
101
103
  CheckId="manual",
102
104
  Muted=False,
105
+ Framework=compliance.Framework,
106
+ Name=compliance.Name,
103
107
  )
104
108
  self._data.append(compliance_row)
@@ -67,6 +67,8 @@ class AzureENS(ComplianceOutput):
67
67
  ResourceName=finding.resource_name,
68
68
  CheckId=finding.check_id,
69
69
  Muted=finding.muted,
70
+ Framework=compliance.Framework,
71
+ Name=compliance.Name,
70
72
  )
71
73
  self._data.append(compliance_row)
72
74
  # Add manual requirements to the compliance output
@@ -100,5 +102,7 @@ class AzureENS(ComplianceOutput):
100
102
  ResourceName="Manual check",
101
103
  CheckId="manual",
102
104
  Muted=False,
105
+ Framework=compliance.Framework,
106
+ Name=compliance.Name,
103
107
  )
104
108
  self._data.append(compliance_row)
@@ -67,6 +67,8 @@ class GCPENS(ComplianceOutput):
67
67
  ResourceName=finding.resource_name,
68
68
  CheckId=finding.check_id,
69
69
  Muted=finding.muted,
70
+ Framework=compliance.Framework,
71
+ Name=compliance.Name,
70
72
  )
71
73
  self._data.append(compliance_row)
72
74
  # Add manual requirements to the compliance output
@@ -100,5 +102,7 @@ class GCPENS(ComplianceOutput):
100
102
  ResourceName="Manual check",
101
103
  CheckId="manual",
102
104
  Muted=False,
105
+ Framework=compliance.Framework,
106
+ Name=compliance.Name,
103
107
  )
104
108
  self._data.append(compliance_row)
@@ -28,6 +28,8 @@ class AWSENSModel(BaseModel):
28
28
  CheckId: str
29
29
  Muted: bool
30
30
  ResourceName: str
31
+ Framework: str
32
+ Name: str
31
33
 
32
34
 
33
35
  class AzureENSModel(BaseModel):
@@ -57,6 +59,8 @@ class AzureENSModel(BaseModel):
57
59
  CheckId: str
58
60
  Muted: bool
59
61
  ResourceName: str
62
+ Framework: str
63
+ Name: str
60
64
 
61
65
 
62
66
  class GCPENSModel(BaseModel):
@@ -86,3 +90,5 @@ class GCPENSModel(BaseModel):
86
90
  CheckId: str
87
91
  Muted: bool
88
92
  ResourceName: str
93
+ Framework: str
94
+ Name: str
@@ -59,6 +59,8 @@ class GenericCompliance(ComplianceOutput):
59
59
  ResourceName=finding.resource_name,
60
60
  CheckId=finding.check_id,
61
61
  Muted=finding.muted,
62
+ Framework=compliance.Framework,
63
+ Name=compliance.Name,
62
64
  )
63
65
  self._data.append(compliance_row)
64
66
  # Add manual requirements to the compliance output
@@ -84,5 +86,7 @@ class GenericCompliance(ComplianceOutput):
84
86
  ResourceName="Manual check",
85
87
  CheckId="manual",
86
88
  Muted=False,
89
+ Framework=compliance.Framework,
90
+ Name=compliance.Name,
87
91
  )
88
92
  self._data.append(compliance_row)
@@ -26,3 +26,5 @@ class GenericComplianceModel(BaseModel):
26
26
  CheckId: str
27
27
  Muted: bool
28
28
  ResourceName: str
29
+ Framework: str
30
+ Name: str
@@ -59,6 +59,8 @@ class AWSISO27001(ComplianceOutput):
59
59
  CheckId=finding.check_id,
60
60
  Muted=finding.muted,
61
61
  ResourceName=finding.resource_name,
62
+ Framework=compliance.Framework,
63
+ Name=compliance.Name,
62
64
  )
63
65
  self._data.append(compliance_row)
64
66
  # Add manual requirements to the compliance output
@@ -84,5 +86,7 @@ class AWSISO27001(ComplianceOutput):
84
86
  ResourceName="Manual check",
85
87
  CheckId="manual",
86
88
  Muted=False,
89
+ Framework=compliance.Framework,
90
+ Name=compliance.Name,
87
91
  )
88
92
  self._data.append(compliance_row)
@@ -59,6 +59,8 @@ class AzureISO27001(ComplianceOutput):
59
59
  CheckId=finding.check_id,
60
60
  Muted=finding.muted,
61
61
  ResourceName=finding.resource_name,
62
+ Framework=compliance.Framework,
63
+ Name=compliance.Name,
62
64
  )
63
65
  self._data.append(compliance_row)
64
66
  # Add manual requirements to the compliance output
@@ -84,5 +86,7 @@ class AzureISO27001(ComplianceOutput):
84
86
  ResourceName="Manual check",
85
87
  CheckId="manual",
86
88
  Muted=False,
89
+ Framework=compliance.Framework,
90
+ Name=compliance.Name,
87
91
  )
88
92
  self._data.append(compliance_row)
@@ -59,6 +59,8 @@ class GCPISO27001(ComplianceOutput):
59
59
  CheckId=finding.check_id,
60
60
  Muted=finding.muted,
61
61
  ResourceName=finding.resource_name,
62
+ Framework=compliance.Framework,
63
+ Name=compliance.Name,
62
64
  )
63
65
  self._data.append(compliance_row)
64
66
  # Add manual requirements to the compliance output
@@ -84,5 +86,7 @@ class GCPISO27001(ComplianceOutput):
84
86
  ResourceName="Manual check",
85
87
  CheckId="manual",
86
88
  Muted=False,
89
+ Framework=compliance.Framework,
90
+ Name=compliance.Name,
87
91
  )
88
92
  self._data.append(compliance_row)
@@ -59,6 +59,8 @@ class KubernetesISO27001(ComplianceOutput):
59
59
  CheckId=finding.check_id,
60
60
  Muted=finding.muted,
61
61
  ResourceName=finding.resource_name,
62
+ Framework=compliance.Framework,
63
+ Name=compliance.Name,
62
64
  )
63
65
  self._data.append(compliance_row)
64
66
  # Add manual requirements to the compliance output
@@ -84,5 +86,7 @@ class KubernetesISO27001(ComplianceOutput):
84
86
  ResourceName="Manual check",
85
87
  CheckId="manual",
86
88
  Muted=False,
89
+ Framework=compliance.Framework,
90
+ Name=compliance.Name,
87
91
  )
88
92
  self._data.append(compliance_row)
@@ -58,6 +58,8 @@ class M365ISO27001(ComplianceOutput):
58
58
  CheckId=finding.check_id,
59
59
  Muted=finding.muted,
60
60
  ResourceName=finding.resource_name,
61
+ Framework=compliance.Framework,
62
+ Name=compliance.Name,
61
63
  )
62
64
  self._data.append(compliance_row)
63
65
 
@@ -84,5 +86,7 @@ class M365ISO27001(ComplianceOutput):
84
86
  ResourceName="Manual check",
85
87
  CheckId="manual",
86
88
  Muted=False,
89
+ Framework=compliance.Framework,
90
+ Name=compliance.Name,
87
91
  )
88
92
  self._data.append(compliance_row)
@@ -58,6 +58,8 @@ class NHNISO27001(ComplianceOutput):
58
58
  CheckId=finding.check_id,
59
59
  Muted=finding.muted,
60
60
  ResourceName=finding.resource_name,
61
+ Framework=compliance.Framework,
62
+ Name=compliance.Name,
61
63
  )
62
64
  self._data.append(compliance_row)
63
65
 
@@ -84,5 +86,7 @@ class NHNISO27001(ComplianceOutput):
84
86
  ResourceName="Manual check",
85
87
  CheckId="manual",
86
88
  Muted=False,
89
+ Framework=compliance.Framework,
90
+ Name=compliance.Name,
87
91
  )
88
92
  self._data.append(compliance_row)
@@ -24,6 +24,8 @@ class AWSISO27001Model(BaseModel):
24
24
  CheckId: str
25
25
  Muted: bool
26
26
  ResourceName: str
27
+ Framework: str
28
+ Name: str
27
29
 
28
30
 
29
31
  class AzureISO27001Model(BaseModel):
@@ -49,6 +51,8 @@ class AzureISO27001Model(BaseModel):
49
51
  CheckId: str
50
52
  Muted: bool
51
53
  ResourceName: str
54
+ Framework: str
55
+ Name: str
52
56
 
53
57
 
54
58
  class GCPISO27001Model(BaseModel):
@@ -74,6 +78,8 @@ class GCPISO27001Model(BaseModel):
74
78
  CheckId: str
75
79
  Muted: bool
76
80
  ResourceName: str
81
+ Framework: str
82
+ Name: str
77
83
 
78
84
 
79
85
  class KubernetesISO27001Model(BaseModel):
@@ -99,6 +105,8 @@ class KubernetesISO27001Model(BaseModel):
99
105
  CheckId: str
100
106
  Muted: bool
101
107
  ResourceName: str
108
+ Framework: str
109
+ Name: str
102
110
 
103
111
 
104
112
  class NHNISO27001Model(BaseModel):
@@ -124,6 +132,8 @@ class NHNISO27001Model(BaseModel):
124
132
  CheckId: str
125
133
  Muted: bool
126
134
  ResourceName: str
135
+ Framework: str
136
+ Name: str
127
137
 
128
138
 
129
139
  class M365ISO27001Model(BaseModel):
@@ -149,3 +159,5 @@ class M365ISO27001Model(BaseModel):
149
159
  CheckId: str
150
160
  Muted: bool
151
161
  ResourceName: str
162
+ Framework: str
163
+ Name: str
@@ -62,6 +62,8 @@ class AWSKISAISMSP(ComplianceOutput):
62
62
  ResourceName=finding.resource_name,
63
63
  CheckId=finding.check_id,
64
64
  Muted=finding.muted,
65
+ Framework=compliance.Framework,
66
+ Name=compliance.Name,
65
67
  )
66
68
  self._data.append(compliance_row)
67
69
  # Add manual requirements to the compliance output
@@ -90,5 +92,7 @@ class AWSKISAISMSP(ComplianceOutput):
90
92
  ResourceName="Manual check",
91
93
  CheckId="manual",
92
94
  Muted=False,
95
+ Framework=compliance.Framework,
96
+ Name=compliance.Name,
93
97
  )
94
98
  self._data.append(compliance_row)
@@ -29,3 +29,5 @@ class AWSKISAISMSPModel(BaseModel):
29
29
  ResourceName: str
30
30
  CheckId: str
31
31
  Muted: bool
32
+ Framework: str
33
+ Name: str
@@ -73,6 +73,8 @@ class AWSMitreAttack(ComplianceOutput):
73
73
  ResourceName=finding.resource_name,
74
74
  CheckId=finding.check_id,
75
75
  Muted=finding.muted,
76
+ Framework=compliance.Framework,
77
+ Name=compliance.Name,
76
78
  )
77
79
  self._data.append(compliance_row)
78
80
  # Add manual requirements to the compliance output
@@ -112,5 +114,7 @@ class AWSMitreAttack(ComplianceOutput):
112
114
  ResourceName="Manual check",
113
115
  CheckId="manual",
114
116
  Muted=False,
117
+ Framework=compliance.Framework,
118
+ Name=compliance.Name,
115
119
  )
116
120
  self._data.append(compliance_row)
@@ -74,6 +74,8 @@ class AzureMitreAttack(ComplianceOutput):
74
74
  ResourceName=finding.resource_name,
75
75
  CheckId=finding.check_id,
76
76
  Muted=finding.muted,
77
+ Framework=compliance.Framework,
78
+ Name=compliance.Name,
77
79
  )
78
80
  self._data.append(compliance_row)
79
81
  # Add manual requirements to the compliance output
@@ -114,5 +116,7 @@ class AzureMitreAttack(ComplianceOutput):
114
116
  ResourceName="Manual check",
115
117
  CheckId="manual",
116
118
  Muted=False,
119
+ Framework=compliance.Framework,
120
+ Name=compliance.Name,
117
121
  )
118
122
  self._data.append(compliance_row)
@@ -73,6 +73,8 @@ class GCPMitreAttack(ComplianceOutput):
73
73
  ResourceName=finding.resource_name,
74
74
  CheckId=finding.check_id,
75
75
  Muted=finding.muted,
76
+ Framework=compliance.Framework,
77
+ Name=compliance.Name,
76
78
  )
77
79
  self._data.append(compliance_row)
78
80
  # Add manual requirements to the compliance output
@@ -112,5 +114,7 @@ class GCPMitreAttack(ComplianceOutput):
112
114
  ResourceName="Manual check",
113
115
  CheckId="manual",
114
116
  Muted=False,
117
+ Framework=compliance.Framework,
118
+ Name=compliance.Name,
115
119
  )
116
120
  self._data.append(compliance_row)
@@ -28,6 +28,8 @@ class AWSMitreAttackModel(BaseModel):
28
28
  CheckId: str
29
29
  Muted: bool
30
30
  ResourceName: str
31
+ Framework: str
32
+ Name: str
31
33
 
32
34
 
33
35
  class AzureMitreAttackModel(BaseModel):
@@ -57,6 +59,8 @@ class AzureMitreAttackModel(BaseModel):
57
59
  Muted: bool
58
60
  ResourceName: str
59
61
  Location: str
62
+ Framework: str
63
+ Name: str
60
64
 
61
65
 
62
66
  class GCPMitreAttackModel(BaseModel):
@@ -86,6 +90,8 @@ class GCPMitreAttackModel(BaseModel):
86
90
  Muted: bool
87
91
  ResourceName: str
88
92
  Location: str
93
+ Framework: str
94
+ Name: str
89
95
 
90
96
 
91
97
  # TODO: Create a parent class for the common fields of MITRE ATT&CK and have the specific classes from each provider to inherit from it.
@@ -28,6 +28,8 @@ class ProwlerThreatScoreAWSModel(BaseModel):
28
28
  ResourceName: str
29
29
  CheckId: str
30
30
  Muted: bool
31
+ Framework: str
32
+ Name: str
31
33
 
32
34
 
33
35
  class ProwlerThreatScoreAzureModel(BaseModel):
@@ -55,6 +57,8 @@ class ProwlerThreatScoreAzureModel(BaseModel):
55
57
  ResourceName: str
56
58
  CheckId: str
57
59
  Muted: bool
60
+ Framework: str
61
+ Name: str
58
62
 
59
63
 
60
64
  class ProwlerThreatScoreGCPModel(BaseModel):
@@ -82,6 +86,8 @@ class ProwlerThreatScoreGCPModel(BaseModel):
82
86
  ResourceName: str
83
87
  CheckId: str
84
88
  Muted: bool
89
+ Framework: str
90
+ Name: str
85
91
 
86
92
 
87
93
  class ProwlerThreatScoreM365Model(BaseModel):
@@ -109,3 +115,5 @@ class ProwlerThreatScoreM365Model(BaseModel):
109
115
  ResourceName: str
110
116
  CheckId: str
111
117
  Muted: bool
118
+ Framework: str
119
+ Name: str
@@ -2,6 +2,7 @@ from colorama import Fore, Style
2
2
  from tabulate import tabulate
3
3
 
4
4
  from prowler.config.config import orange_color
5
+ from prowler.lib.check.compliance_models import Compliance
5
6
 
6
7
 
7
8
  def get_prowler_threatscore_table(
@@ -23,9 +24,12 @@ def get_prowler_threatscore_table(
23
24
  fail_count = []
24
25
  muted_count = []
25
26
  pillars = {}
27
+ generic_score = 0
28
+ max_generic_score = 0
29
+ counted_findings_generic = []
26
30
  score_per_pillar = {}
27
31
  max_score_per_pillar = {}
28
- counted_findings = []
32
+ counted_findings_per_pillar = {}
29
33
  for index, finding in enumerate(findings):
30
34
  check = bulk_checks_metadata[finding.check_metadata.CheckID]
31
35
  check_compliances = check.Compliance
@@ -39,12 +43,17 @@ def get_prowler_threatscore_table(
39
43
  [
40
44
  pillar in score_per_pillar.keys(),
41
45
  pillar in max_score_per_pillar.keys(),
46
+ pillar in counted_findings_per_pillar.keys(),
42
47
  ]
43
48
  ):
44
49
  score_per_pillar[pillar] = 0
45
50
  max_score_per_pillar[pillar] = 0
51
+ counted_findings_per_pillar[pillar] = []
46
52
 
47
- if index not in counted_findings:
53
+ if (
54
+ index not in counted_findings_per_pillar[pillar]
55
+ and not finding.muted
56
+ ):
48
57
  if finding.status == "PASS":
49
58
  score_per_pillar[pillar] += (
50
59
  attribute.LevelOfRisk * attribute.Weight
@@ -52,7 +61,7 @@ def get_prowler_threatscore_table(
52
61
  max_score_per_pillar[pillar] += (
53
62
  attribute.LevelOfRisk * attribute.Weight
54
63
  )
55
- counted_findings.append(index)
64
+ counted_findings_per_pillar[pillar].append(index)
56
65
 
57
66
  if pillar not in pillars:
58
67
  pillars[pillar] = {"FAIL": 0, "PASS": 0, "Muted": 0}
@@ -69,6 +78,27 @@ def get_prowler_threatscore_table(
69
78
  pass_count.append(index)
70
79
  pillars[pillar]["PASS"] += 1
71
80
 
81
+ # Generic score
82
+ if index not in counted_findings_generic and not finding.muted:
83
+ if finding.status == "PASS":
84
+ generic_score += (
85
+ attribute.LevelOfRisk * attribute.Weight
86
+ )
87
+ max_generic_score += (
88
+ attribute.LevelOfRisk * attribute.Weight
89
+ )
90
+ counted_findings_generic.append(index)
91
+
92
+ no_findings_pillars = []
93
+ bulk_compliance = Compliance.get_bulk(provider=compliance.Provider.lower()).get(
94
+ compliance_framework
95
+ )
96
+ for requirement in bulk_compliance.Requirements:
97
+ for attribute in requirement.Attributes:
98
+ pillar = attribute.Section
99
+ if pillar not in pillars.keys() and pillar not in no_findings_pillars:
100
+ no_findings_pillars.append(pillar)
101
+
72
102
  pillars = dict(sorted(pillars.items()))
73
103
  for pillar in pillars:
74
104
  pillar_table["Provider"].append(compliance.Provider)
@@ -88,6 +118,16 @@ def get_prowler_threatscore_table(
88
118
  f"{orange_color}{pillars[pillar]['Muted']}{Style.RESET_ALL}"
89
119
  )
90
120
 
121
+ for pillar in no_findings_pillars:
122
+ pillar_table["Provider"].append(compliance.Provider)
123
+ pillar_table["Pillar"].append(pillar)
124
+ pillar_table["Score"].append(f"{Style.BRIGHT}{Fore.GREEN}100%{Style.RESET_ALL}")
125
+ pillar_table["Status"].append(f"{Fore.GREEN}PASS{Style.RESET_ALL}")
126
+ pillar_table["Muted"].append(f"{orange_color}0{Style.RESET_ALL}")
127
+
128
+ # Sort table by pillars
129
+ pillar_table["Pillar"] = sorted(pillar_table["Pillar"])
130
+
91
131
  if (
92
132
  len(fail_count) + len(pass_count) + len(muted_count) > 1
93
133
  ): # If there are no resources, don't print the compliance table
@@ -108,7 +148,9 @@ def get_prowler_threatscore_table(
108
148
  print(
109
149
  f"\nFramework {Fore.YELLOW}{compliance_framework.upper()}{Style.RESET_ALL} Results:"
110
150
  )
111
-
151
+ print(
152
+ f"\nGeneric Threat Score: {generic_score / max_generic_score * 100:.2f}%"
153
+ )
112
154
  print(
113
155
  tabulate(
114
156
  pillar_table,
@@ -63,6 +63,8 @@ class ProwlerThreatScoreAWS(ComplianceOutput):
63
63
  ResourceName=finding.resource_name,
64
64
  CheckId=finding.check_id,
65
65
  Muted=finding.muted,
66
+ Framework=compliance.Framework,
67
+ Name=compliance.Name,
66
68
  )
67
69
  self._data.append(compliance_row)
68
70
  # Add manual requirements to the compliance output
@@ -90,5 +92,7 @@ class ProwlerThreatScoreAWS(ComplianceOutput):
90
92
  ResourceName="Manual check",
91
93
  CheckId="manual",
92
94
  Muted=False,
95
+ Framework=compliance.Framework,
96
+ Name=compliance.Name,
93
97
  )
94
98
  self._data.append(compliance_row)
@@ -63,6 +63,8 @@ class ProwlerThreatScoreAzure(ComplianceOutput):
63
63
  ResourceName=finding.resource_name,
64
64
  CheckId=finding.check_id,
65
65
  Muted=finding.muted,
66
+ Framework=compliance.Framework,
67
+ Name=compliance.Name,
66
68
  )
67
69
  self._data.append(compliance_row)
68
70
  # Add manual requirements to the compliance output
@@ -90,5 +92,7 @@ class ProwlerThreatScoreAzure(ComplianceOutput):
90
92
  ResourceName="Manual check",
91
93
  CheckId="manual",
92
94
  Muted=False,
95
+ Framework=compliance.Framework,
96
+ Name=compliance.Name,
93
97
  )
94
98
  self._data.append(compliance_row)