From 4f866674331315159b756802063e4fc3f8aabb27 Mon Sep 17 00:00:00 2001 From: Alejandro Bailo <59607668+alejandrobailo@users.noreply.github.com> Date: Tue, 31 Mar 2026 16:21:22 +0200 Subject: [PATCH] feat(sdk): add Vercel provider with 30 security checks (#10189) Co-authored-by: Daniel Barranquero Co-authored-by: Andoni A. <14891798+andoniaf@users.noreply.github.com> --- .github/labeler.yml | 7 + .github/test-impact.yml | 8 + .github/workflows/sdk-tests.yml | 24 ++ README.md | 1 + docs/docs.json | 7 + docs/introduction.mdx | 1 + .../cli/tutorials/configuration_file.mdx | 40 ++ .../providers/vercel/authentication.mdx | 137 ++++++ .../vercel/getting-started-vercel.mdx | 108 +++++ .../vercel/images/vercel-account-settings.png | Bin 0 -> 231905 bytes .../vercel/images/vercel-create-token.png | Bin 0 -> 291205 bytes .../vercel/images/vercel-team-id.png | Bin 0 -> 316902 bytes prowler/CHANGELOG.md | 3 +- prowler/__main__.py | 5 + prowler/config/config.py | 1 + prowler/config/config.yaml | 31 ++ prowler/config/vercel_mutelist_example.yaml | 50 +++ prowler/lib/check/check.py | 5 + prowler/lib/check/models.py | 44 ++ prowler/lib/cli/parser.py | 5 +- prowler/lib/outputs/finding.py | 17 + prowler/lib/outputs/html/html.py | 65 +++ prowler/lib/outputs/outputs.py | 2 + prowler/lib/outputs/summary_table.py | 8 + prowler/providers/common/provider.py | 7 + prowler/providers/vercel/__init__.py | 0 .../providers/vercel/exceptions/__init__.py | 0 .../providers/vercel/exceptions/exceptions.py | 127 ++++++ prowler/providers/vercel/lib/__init__.py | 0 .../vercel/lib/arguments/__init__.py | 0 .../vercel/lib/arguments/arguments.py | 18 + .../providers/vercel/lib/mutelist/__init__.py | 0 .../providers/vercel/lib/mutelist/mutelist.py | 20 + .../providers/vercel/lib/service/__init__.py | 0 .../providers/vercel/lib/service/service.py | 177 ++++++++ prowler/providers/vercel/models.py | 52 +++ prowler/providers/vercel/services/__init__.py | 0 .../services/authentication/__init__.py | 0 .../authentication/authentication_client.py | 6 + .../__init__.py | 0 ...thentication_no_stale_tokens.metadata.json | 38 ++ .../authentication_no_stale_tokens.py | 69 +++ .../authentication/authentication_service.py | 99 +++++ .../__init__.py | 0 ...entication_token_not_expired.metadata.json | 38 ++ .../authentication_token_not_expired.py | 75 ++++ .../vercel/services/deployment/__init__.py | 0 .../services/deployment/deployment_client.py | 4 + .../__init__.py | 0 ...roduction_uses_stable_target.metadata.json | 36 ++ ...eployment_production_uses_stable_target.py | 57 +++ .../services/deployment/deployment_service.py | 103 +++++ .../vercel/services/domain/__init__.py | 0 .../vercel/services/domain/domain_client.py | 4 + .../__init__.py | 0 ...main_dns_properly_configured.metadata.json | 39 ++ .../domain_dns_properly_configured.py | 45 ++ .../vercel/services/domain/domain_service.py | 124 ++++++ .../domain_ssl_certificate_valid/__init__.py | 0 ...domain_ssl_certificate_valid.metadata.json | 39 ++ .../domain_ssl_certificate_valid.py | 78 ++++ .../domain/domain_verified/__init__.py | 0 .../domain_verified.metadata.json | 39 ++ .../domain/domain_verified/domain_verified.py | 44 ++ .../vercel/services/project/__init__.py | 0 .../__init__.py | 0 ...o_expose_system_env_disabled.metadata.json | 36 ++ ...project_auto_expose_system_env_disabled.py | 42 ++ .../vercel/services/project/project_client.py | 4 + .../__init__.py | 0 ...eployment_protection_enabled.metadata.json | 38 ++ .../project_deployment_protection_enabled.py | 45 ++ .../__init__.py | 0 ...t_directory_listing_disabled.metadata.json | 36 ++ .../project_directory_listing_disabled.py | 40 ++ .../__init__.py | 0 ...nment_no_overly_broad_target.metadata.json | 38 ++ ...ject_environment_no_overly_broad_target.py | 54 +++ .../__init__.py | 0 ...ent_no_secrets_in_plain_type.metadata.json | 38 ++ ...ct_environment_no_secrets_in_plain_type.py | 68 +++ .../__init__.py | 0 ...oduction_vars_not_in_preview.metadata.json | 39 ++ ...ironment_production_vars_not_in_preview.py | 55 +++ .../__init__.py | 0 ..._git_fork_protection_enabled.metadata.json | 36 ++ .../project_git_fork_protection_enabled.py | 43 ++ .../__init__.py | 0 ..._password_protection_enabled.metadata.json | 38 ++ .../project_password_protection_enabled.py | 45 ++ .../__init__.py | 0 ...eployment_protection_enabled.metadata.json | 38 ++ ...roduction_deployment_protection_enabled.py | 45 ++ .../services/project/project_service.py | 163 +++++++ .../__init__.py | 0 ...ject_skew_protection_enabled.metadata.json | 36 ++ .../project_skew_protection_enabled.py | 41 ++ .../vercel/services/security/__init__.py | 0 .../services/security/security_client.py | 4 + .../__init__.py | 0 ...rity_custom_rules_configured.metadata.json | 38 ++ .../security_custom_rules_configured.py | 42 ++ .../__init__.py | 0 ...ip_blocking_rules_configured.metadata.json | 38 ++ .../security_ip_blocking_rules_configured.py | 43 ++ .../__init__.py | 0 ...ity_managed_rulesets_enabled.metadata.json | 38 ++ .../security_managed_rulesets_enabled.py | 52 +++ .../__init__.py | 0 ...ity_rate_limiting_configured.metadata.json | 38 ++ .../security_rate_limiting_configured.py | 42 ++ .../services/security/security_service.py | 127 ++++++ .../security/security_waf_enabled/__init__.py | 0 .../security_waf_enabled.metadata.json | 39 ++ .../security_waf_enabled.py | 50 +++ .../vercel/services/team/__init__.py | 0 .../vercel/services/team/team_client.py | 4 + .../team_directory_sync_enabled/__init__.py | 0 .../team_directory_sync_enabled.metadata.json | 39 ++ .../team_directory_sync_enabled.py | 47 ++ .../__init__.py | 0 ..._member_role_least_privilege.metadata.json | 36 ++ .../team_member_role_least_privilege.py | 88 ++++ .../team_no_stale_invitations/__init__.py | 0 .../team_no_stale_invitations.metadata.json | 36 ++ .../team_no_stale_invitations.py | 70 +++ .../team/team_saml_sso_enabled/__init__.py | 0 .../team_saml_sso_enabled.metadata.json | 39 ++ .../team_saml_sso_enabled.py | 45 ++ .../team/team_saml_sso_enforced/__init__.py | 0 .../team_saml_sso_enforced.metadata.json | 39 ++ .../team_saml_sso_enforced.py | 50 +++ .../vercel/services/team/team_service.py | 157 +++++++ prowler/providers/vercel/vercel_provider.py | 405 ++++++++++++++++++ tests/lib/cli/parser_test.py | 2 +- .../mutelist/fixtures/vercel_mutelist.yaml | 9 + .../lib/mutelist/vercel_mutelist_test.py | 93 ++++ .../authentication_no_stale_tokens_test.py | 152 +++++++ .../authentication_token_not_expired_test.py | 228 ++++++++++ ...ment_production_uses_stable_target_test.py | 151 +++++++ .../domain_dns_properly_configured_test.py | 108 +++++ .../domain_ssl_certificate_valid_test.py | 236 ++++++++++ .../domain_verified/domain_verified_test.py | 105 +++++ ...ct_auto_expose_system_env_disabled_test.py | 107 +++++ ...ject_deployment_protection_enabled_test.py | 151 +++++++ ...project_directory_listing_disabled_test.py | 107 +++++ ...environment_no_overly_broad_target_test.py | 126 ++++++ ...vironment_no_secrets_in_plain_type_test.py | 172 ++++++++ ...ent_production_vars_not_in_preview_test.py | 171 ++++++++ ...roject_git_fork_protection_enabled_test.py | 107 +++++ ...roject_password_protection_enabled_test.py | 144 +++++++ ...tion_deployment_protection_enabled_test.py | 151 +++++++ .../project_skew_protection_enabled_test.py | 107 +++++ .../security_custom_rules_configured_test.py | 113 +++++ ...urity_ip_blocking_rules_configured_test.py | 113 +++++ .../security_managed_rulesets_enabled_test.py | 155 +++++++ .../security_rate_limiting_configured_test.py | 113 +++++ .../security_waf_enabled_test.py | 115 +++++ .../team_directory_sync_enabled_test.py | 107 +++++ .../team_member_role_least_privilege_test.py | 266 ++++++++++++ .../team_no_stale_invitations_test.py | 130 ++++++ .../team_saml_sso_enabled_test.py | 108 +++++ .../team_saml_sso_enforced_test.py | 144 +++++++ tests/providers/vercel/vercel_fixtures.py | 59 +++ .../providers/vercel/vercel_provider_test.py | 224 ++++++++++ 165 files changed, 8600 insertions(+), 5 deletions(-) create mode 100644 docs/user-guide/providers/vercel/authentication.mdx create mode 100644 docs/user-guide/providers/vercel/getting-started-vercel.mdx create mode 100644 docs/user-guide/providers/vercel/images/vercel-account-settings.png create mode 100644 docs/user-guide/providers/vercel/images/vercel-create-token.png create mode 100644 docs/user-guide/providers/vercel/images/vercel-team-id.png create mode 100644 prowler/config/vercel_mutelist_example.yaml create mode 100644 prowler/providers/vercel/__init__.py create mode 100644 prowler/providers/vercel/exceptions/__init__.py create mode 100644 prowler/providers/vercel/exceptions/exceptions.py create mode 100644 prowler/providers/vercel/lib/__init__.py create mode 100644 prowler/providers/vercel/lib/arguments/__init__.py create mode 100644 prowler/providers/vercel/lib/arguments/arguments.py create mode 100644 prowler/providers/vercel/lib/mutelist/__init__.py create mode 100644 prowler/providers/vercel/lib/mutelist/mutelist.py create mode 100644 prowler/providers/vercel/lib/service/__init__.py create mode 100644 prowler/providers/vercel/lib/service/service.py create mode 100644 prowler/providers/vercel/models.py create mode 100644 prowler/providers/vercel/services/__init__.py create mode 100644 prowler/providers/vercel/services/authentication/__init__.py create mode 100644 prowler/providers/vercel/services/authentication/authentication_client.py create mode 100644 prowler/providers/vercel/services/authentication/authentication_no_stale_tokens/__init__.py create mode 100644 prowler/providers/vercel/services/authentication/authentication_no_stale_tokens/authentication_no_stale_tokens.metadata.json create mode 100644 prowler/providers/vercel/services/authentication/authentication_no_stale_tokens/authentication_no_stale_tokens.py create mode 100644 prowler/providers/vercel/services/authentication/authentication_service.py create mode 100644 prowler/providers/vercel/services/authentication/authentication_token_not_expired/__init__.py create mode 100644 prowler/providers/vercel/services/authentication/authentication_token_not_expired/authentication_token_not_expired.metadata.json create mode 100644 prowler/providers/vercel/services/authentication/authentication_token_not_expired/authentication_token_not_expired.py create mode 100644 prowler/providers/vercel/services/deployment/__init__.py create mode 100644 prowler/providers/vercel/services/deployment/deployment_client.py create mode 100644 prowler/providers/vercel/services/deployment/deployment_production_uses_stable_target/__init__.py create mode 100644 prowler/providers/vercel/services/deployment/deployment_production_uses_stable_target/deployment_production_uses_stable_target.metadata.json create mode 100644 prowler/providers/vercel/services/deployment/deployment_production_uses_stable_target/deployment_production_uses_stable_target.py create mode 100644 prowler/providers/vercel/services/deployment/deployment_service.py create mode 100644 prowler/providers/vercel/services/domain/__init__.py create mode 100644 prowler/providers/vercel/services/domain/domain_client.py create mode 100644 prowler/providers/vercel/services/domain/domain_dns_properly_configured/__init__.py create mode 100644 prowler/providers/vercel/services/domain/domain_dns_properly_configured/domain_dns_properly_configured.metadata.json create mode 100644 prowler/providers/vercel/services/domain/domain_dns_properly_configured/domain_dns_properly_configured.py create mode 100644 prowler/providers/vercel/services/domain/domain_service.py create mode 100644 prowler/providers/vercel/services/domain/domain_ssl_certificate_valid/__init__.py create mode 100644 prowler/providers/vercel/services/domain/domain_ssl_certificate_valid/domain_ssl_certificate_valid.metadata.json create mode 100644 prowler/providers/vercel/services/domain/domain_ssl_certificate_valid/domain_ssl_certificate_valid.py create mode 100644 prowler/providers/vercel/services/domain/domain_verified/__init__.py create mode 100644 prowler/providers/vercel/services/domain/domain_verified/domain_verified.metadata.json create mode 100644 prowler/providers/vercel/services/domain/domain_verified/domain_verified.py create mode 100644 prowler/providers/vercel/services/project/__init__.py create mode 100644 prowler/providers/vercel/services/project/project_auto_expose_system_env_disabled/__init__.py create mode 100644 prowler/providers/vercel/services/project/project_auto_expose_system_env_disabled/project_auto_expose_system_env_disabled.metadata.json create mode 100644 prowler/providers/vercel/services/project/project_auto_expose_system_env_disabled/project_auto_expose_system_env_disabled.py create mode 100644 prowler/providers/vercel/services/project/project_client.py create mode 100644 prowler/providers/vercel/services/project/project_deployment_protection_enabled/__init__.py create mode 100644 prowler/providers/vercel/services/project/project_deployment_protection_enabled/project_deployment_protection_enabled.metadata.json create mode 100644 prowler/providers/vercel/services/project/project_deployment_protection_enabled/project_deployment_protection_enabled.py create mode 100644 prowler/providers/vercel/services/project/project_directory_listing_disabled/__init__.py create mode 100644 prowler/providers/vercel/services/project/project_directory_listing_disabled/project_directory_listing_disabled.metadata.json create mode 100644 prowler/providers/vercel/services/project/project_directory_listing_disabled/project_directory_listing_disabled.py create mode 100644 prowler/providers/vercel/services/project/project_environment_no_overly_broad_target/__init__.py create mode 100644 prowler/providers/vercel/services/project/project_environment_no_overly_broad_target/project_environment_no_overly_broad_target.metadata.json create mode 100644 prowler/providers/vercel/services/project/project_environment_no_overly_broad_target/project_environment_no_overly_broad_target.py create mode 100644 prowler/providers/vercel/services/project/project_environment_no_secrets_in_plain_type/__init__.py create mode 100644 prowler/providers/vercel/services/project/project_environment_no_secrets_in_plain_type/project_environment_no_secrets_in_plain_type.metadata.json create mode 100644 prowler/providers/vercel/services/project/project_environment_no_secrets_in_plain_type/project_environment_no_secrets_in_plain_type.py create mode 100644 prowler/providers/vercel/services/project/project_environment_production_vars_not_in_preview/__init__.py create mode 100644 prowler/providers/vercel/services/project/project_environment_production_vars_not_in_preview/project_environment_production_vars_not_in_preview.metadata.json create mode 100644 prowler/providers/vercel/services/project/project_environment_production_vars_not_in_preview/project_environment_production_vars_not_in_preview.py create mode 100644 prowler/providers/vercel/services/project/project_git_fork_protection_enabled/__init__.py create mode 100644 prowler/providers/vercel/services/project/project_git_fork_protection_enabled/project_git_fork_protection_enabled.metadata.json create mode 100644 prowler/providers/vercel/services/project/project_git_fork_protection_enabled/project_git_fork_protection_enabled.py create mode 100644 prowler/providers/vercel/services/project/project_password_protection_enabled/__init__.py create mode 100644 prowler/providers/vercel/services/project/project_password_protection_enabled/project_password_protection_enabled.metadata.json create mode 100644 prowler/providers/vercel/services/project/project_password_protection_enabled/project_password_protection_enabled.py create mode 100644 prowler/providers/vercel/services/project/project_production_deployment_protection_enabled/__init__.py create mode 100644 prowler/providers/vercel/services/project/project_production_deployment_protection_enabled/project_production_deployment_protection_enabled.metadata.json create mode 100644 prowler/providers/vercel/services/project/project_production_deployment_protection_enabled/project_production_deployment_protection_enabled.py create mode 100644 prowler/providers/vercel/services/project/project_service.py create mode 100644 prowler/providers/vercel/services/project/project_skew_protection_enabled/__init__.py create mode 100644 prowler/providers/vercel/services/project/project_skew_protection_enabled/project_skew_protection_enabled.metadata.json create mode 100644 prowler/providers/vercel/services/project/project_skew_protection_enabled/project_skew_protection_enabled.py create mode 100644 prowler/providers/vercel/services/security/__init__.py create mode 100644 prowler/providers/vercel/services/security/security_client.py create mode 100644 prowler/providers/vercel/services/security/security_custom_rules_configured/__init__.py create mode 100644 prowler/providers/vercel/services/security/security_custom_rules_configured/security_custom_rules_configured.metadata.json create mode 100644 prowler/providers/vercel/services/security/security_custom_rules_configured/security_custom_rules_configured.py create mode 100644 prowler/providers/vercel/services/security/security_ip_blocking_rules_configured/__init__.py create mode 100644 prowler/providers/vercel/services/security/security_ip_blocking_rules_configured/security_ip_blocking_rules_configured.metadata.json create mode 100644 prowler/providers/vercel/services/security/security_ip_blocking_rules_configured/security_ip_blocking_rules_configured.py create mode 100644 prowler/providers/vercel/services/security/security_managed_rulesets_enabled/__init__.py create mode 100644 prowler/providers/vercel/services/security/security_managed_rulesets_enabled/security_managed_rulesets_enabled.metadata.json create mode 100644 prowler/providers/vercel/services/security/security_managed_rulesets_enabled/security_managed_rulesets_enabled.py create mode 100644 prowler/providers/vercel/services/security/security_rate_limiting_configured/__init__.py create mode 100644 prowler/providers/vercel/services/security/security_rate_limiting_configured/security_rate_limiting_configured.metadata.json create mode 100644 prowler/providers/vercel/services/security/security_rate_limiting_configured/security_rate_limiting_configured.py create mode 100644 prowler/providers/vercel/services/security/security_service.py create mode 100644 prowler/providers/vercel/services/security/security_waf_enabled/__init__.py create mode 100644 prowler/providers/vercel/services/security/security_waf_enabled/security_waf_enabled.metadata.json create mode 100644 prowler/providers/vercel/services/security/security_waf_enabled/security_waf_enabled.py create mode 100644 prowler/providers/vercel/services/team/__init__.py create mode 100644 prowler/providers/vercel/services/team/team_client.py create mode 100644 prowler/providers/vercel/services/team/team_directory_sync_enabled/__init__.py create mode 100644 prowler/providers/vercel/services/team/team_directory_sync_enabled/team_directory_sync_enabled.metadata.json create mode 100644 prowler/providers/vercel/services/team/team_directory_sync_enabled/team_directory_sync_enabled.py create mode 100644 prowler/providers/vercel/services/team/team_member_role_least_privilege/__init__.py create mode 100644 prowler/providers/vercel/services/team/team_member_role_least_privilege/team_member_role_least_privilege.metadata.json create mode 100644 prowler/providers/vercel/services/team/team_member_role_least_privilege/team_member_role_least_privilege.py create mode 100644 prowler/providers/vercel/services/team/team_no_stale_invitations/__init__.py create mode 100644 prowler/providers/vercel/services/team/team_no_stale_invitations/team_no_stale_invitations.metadata.json create mode 100644 prowler/providers/vercel/services/team/team_no_stale_invitations/team_no_stale_invitations.py create mode 100644 prowler/providers/vercel/services/team/team_saml_sso_enabled/__init__.py create mode 100644 prowler/providers/vercel/services/team/team_saml_sso_enabled/team_saml_sso_enabled.metadata.json create mode 100644 prowler/providers/vercel/services/team/team_saml_sso_enabled/team_saml_sso_enabled.py create mode 100644 prowler/providers/vercel/services/team/team_saml_sso_enforced/__init__.py create mode 100644 prowler/providers/vercel/services/team/team_saml_sso_enforced/team_saml_sso_enforced.metadata.json create mode 100644 prowler/providers/vercel/services/team/team_saml_sso_enforced/team_saml_sso_enforced.py create mode 100644 prowler/providers/vercel/services/team/team_service.py create mode 100644 prowler/providers/vercel/vercel_provider.py create mode 100644 tests/providers/vercel/lib/mutelist/fixtures/vercel_mutelist.yaml create mode 100644 tests/providers/vercel/lib/mutelist/vercel_mutelist_test.py create mode 100644 tests/providers/vercel/services/authentication/authentication_no_stale_tokens/authentication_no_stale_tokens_test.py create mode 100644 tests/providers/vercel/services/authentication/authentication_token_not_expired/authentication_token_not_expired_test.py create mode 100644 tests/providers/vercel/services/deployment/deployment_production_uses_stable_target/deployment_production_uses_stable_target_test.py create mode 100644 tests/providers/vercel/services/domain/domain_dns_properly_configured/domain_dns_properly_configured_test.py create mode 100644 tests/providers/vercel/services/domain/domain_ssl_certificate_valid/domain_ssl_certificate_valid_test.py create mode 100644 tests/providers/vercel/services/domain/domain_verified/domain_verified_test.py create mode 100644 tests/providers/vercel/services/project/project_auto_expose_system_env_disabled/project_auto_expose_system_env_disabled_test.py create mode 100644 tests/providers/vercel/services/project/project_deployment_protection_enabled/project_deployment_protection_enabled_test.py create mode 100644 tests/providers/vercel/services/project/project_directory_listing_disabled/project_directory_listing_disabled_test.py create mode 100644 tests/providers/vercel/services/project/project_environment_no_overly_broad_target/project_environment_no_overly_broad_target_test.py create mode 100644 tests/providers/vercel/services/project/project_environment_no_secrets_in_plain_type/project_environment_no_secrets_in_plain_type_test.py create mode 100644 tests/providers/vercel/services/project/project_environment_production_vars_not_in_preview/project_environment_production_vars_not_in_preview_test.py create mode 100644 tests/providers/vercel/services/project/project_git_fork_protection_enabled/project_git_fork_protection_enabled_test.py create mode 100644 tests/providers/vercel/services/project/project_password_protection_enabled/project_password_protection_enabled_test.py create mode 100644 tests/providers/vercel/services/project/project_production_deployment_protection_enabled/project_production_deployment_protection_enabled_test.py create mode 100644 tests/providers/vercel/services/project/project_skew_protection_enabled/project_skew_protection_enabled_test.py create mode 100644 tests/providers/vercel/services/security/security_custom_rules_configured/security_custom_rules_configured_test.py create mode 100644 tests/providers/vercel/services/security/security_ip_blocking_rules_configured/security_ip_blocking_rules_configured_test.py create mode 100644 tests/providers/vercel/services/security/security_managed_rulesets_enabled/security_managed_rulesets_enabled_test.py create mode 100644 tests/providers/vercel/services/security/security_rate_limiting_configured/security_rate_limiting_configured_test.py create mode 100644 tests/providers/vercel/services/security/security_waf_enabled/security_waf_enabled_test.py create mode 100644 tests/providers/vercel/services/team/team_directory_sync_enabled/team_directory_sync_enabled_test.py create mode 100644 tests/providers/vercel/services/team/team_member_role_least_privilege/team_member_role_least_privilege_test.py create mode 100644 tests/providers/vercel/services/team/team_no_stale_invitations/team_no_stale_invitations_test.py create mode 100644 tests/providers/vercel/services/team/team_saml_sso_enabled/team_saml_sso_enabled_test.py create mode 100644 tests/providers/vercel/services/team/team_saml_sso_enforced/team_saml_sso_enforced_test.py create mode 100644 tests/providers/vercel/vercel_fixtures.py create mode 100644 tests/providers/vercel/vercel_provider_test.py diff --git a/.github/labeler.yml b/.github/labeler.yml index 9a6b7262d0..49ec92e0d5 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -67,6 +67,11 @@ provider/googleworkspace: - any-glob-to-any-file: "prowler/providers/googleworkspace/**" - any-glob-to-any-file: "tests/providers/googleworkspace/**" +provider/vercel: + - changed-files: + - any-glob-to-any-file: "prowler/providers/vercel/**" + - any-glob-to-any-file: "tests/providers/vercel/**" + github_actions: - changed-files: - any-glob-to-any-file: ".github/workflows/*" @@ -102,6 +107,8 @@ mutelist: - any-glob-to-any-file: "tests/providers/openstack/lib/mutelist/**" - any-glob-to-any-file: "prowler/providers/googleworkspace/lib/mutelist/**" - any-glob-to-any-file: "tests/providers/googleworkspace/lib/mutelist/**" + - any-glob-to-any-file: "prowler/providers/vercel/lib/mutelist/**" + - any-glob-to-any-file: "tests/providers/vercel/lib/mutelist/**" integration/s3: - changed-files: diff --git a/.github/test-impact.yml b/.github/test-impact.yml index 3fab82c80b..7c290eeaa9 100644 --- a/.github/test-impact.yml +++ b/.github/test-impact.yml @@ -177,6 +177,14 @@ modules: - tests/providers/llm/** e2e: [] + - name: sdk-vercel + match: + - prowler/providers/vercel/** + - prowler/compliance/vercel/** + tests: + - tests/providers/vercel/** + e2e: [] + # ============================================ # SDK - Lib modules # ============================================ diff --git a/.github/workflows/sdk-tests.yml b/.github/workflows/sdk-tests.yml index 6e514916b1..d0da08cc55 100644 --- a/.github/workflows/sdk-tests.yml +++ b/.github/workflows/sdk-tests.yml @@ -499,6 +499,30 @@ jobs: flags: prowler-py${{ matrix.python-version }}-googleworkspace files: ./googleworkspace_coverage.xml + # Vercel Provider + - name: Check if Vercel files changed + if: steps.check-changes.outputs.any_changed == 'true' + id: changed-vercel + uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4 + with: + files: | + ./prowler/**/vercel/** + ./tests/**/vercel/** + ./poetry.lock + + - name: Run Vercel tests + if: steps.changed-vercel.outputs.any_changed == 'true' + run: poetry run pytest -n auto --cov=./prowler/providers/vercel --cov-report=xml:vercel_coverage.xml tests/providers/vercel + + - name: Upload Vercel coverage to Codecov + if: steps.changed-vercel.outputs.any_changed == 'true' + uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2 + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + with: + flags: prowler-py${{ matrix.python-version }}-vercel + files: ./vercel_coverage.xml + # Lib - name: Check if Lib files changed if: steps.check-changes.outputs.any_changed == 'true' diff --git a/README.md b/README.md index b8ca63f4c8..87ca1f152a 100644 --- a/README.md +++ b/README.md @@ -119,6 +119,7 @@ Every AWS provider scan will enqueue an Attack Paths ingestion job automatically | Image | N/A | N/A | N/A | N/A | Official | CLI, API | | Google Workspace | 1 | 1 | 0 | 1 | Official | CLI | | OpenStack | 27 | 4 | 0 | 8 | Official | UI, API, CLI | +| Vercel | 30 | 6 | 0 | 5 | Official | CLI | | NHN | 6 | 2 | 1 | 0 | Unofficial | CLI | > [!Note] diff --git a/docs/docs.json b/docs/docs.json index 6fcd387a07..21f65e027f 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -296,6 +296,13 @@ "user-guide/providers/openstack/getting-started-openstack", "user-guide/providers/openstack/authentication" ] + }, + { + "group": "Vercel", + "pages": [ + "user-guide/providers/vercel/getting-started-vercel", + "user-guide/providers/vercel/authentication" + ] } ] }, diff --git a/docs/introduction.mdx b/docs/introduction.mdx index 05de41b157..766f60e3c0 100644 --- a/docs/introduction.mdx +++ b/docs/introduction.mdx @@ -37,6 +37,7 @@ The supported providers right now are: | [Infra as Code](/user-guide/providers/iac/getting-started-iac) | Official | Repositories | UI, API, CLI | | [MongoDB Atlas](/user-guide/providers/mongodbatlas/getting-started-mongodbatlas) | Official | Organizations | UI, API, CLI | | [OpenStack](/user-guide/providers/openstack/getting-started-openstack) | Official | Projects | UI, API, CLI | +| [Vercel](/user-guide/providers/vercel/getting-started-vercel) | Official | Teams / Projects | CLI | | [LLM](/user-guide/providers/llm/getting-started-llm) | Official | Models | CLI | | [Image](/user-guide/providers/image/getting-started-image) | Official | Container Images | CLI, API | | [Google Workspace](/user-guide/providers/googleworkspace/getting-started-googleworkspace) | Official | Domains | CLI | diff --git a/docs/user-guide/cli/tutorials/configuration_file.mdx b/docs/user-guide/cli/tutorials/configuration_file.mdx index 923bef7ce1..7f96891cbb 100644 --- a/docs/user-guide/cli/tutorials/configuration_file.mdx +++ b/docs/user-guide/cli/tutorials/configuration_file.mdx @@ -141,6 +141,22 @@ The following list includes all the GitHub checks with configurable variables th |--------------------------------------------|---------------------------------------------|---------| | `repository_inactive_not_archived` | `inactive_not_archived_days_threshold` | Integer | +## Vercel + +### Configurable Checks +The following list includes all the Vercel checks with configurable variables that can be changed in the configuration YAML file: + +| Check Name | Value | Type | +|-----------------------------------------------------|------------------------------------|-----------------| +| `authentication_no_stale_tokens` | `stale_token_threshold_days` | Integer | +| `authentication_token_not_expired` | `days_to_expire_threshold` | Integer | +| `deployment_production_uses_stable_target` | `stable_branches` | List of Strings | +| `domain_ssl_certificate_valid` | `days_to_expire_threshold` | Integer | +| `project_environment_no_secrets_in_plain_type` | `secret_suffixes` | List of Strings | +| `team_member_role_least_privilege` | `max_owner_percentage` | Integer | +| `team_member_role_least_privilege` | `max_owners` | Integer | +| `team_no_stale_invitations` | `stale_invitation_threshold_days` | Integer | + ## Config YAML File Structure @@ -624,5 +640,29 @@ github: # github.repository_inactive_not_archived inactive_not_archived_days_threshold: 180 +# Vercel Configuration +vercel: + # vercel.deployment_production_uses_stable_target + stable_branches: + - "main" + - "master" + # vercel.authentication_token_not_expired & vercel.domain_ssl_certificate_valid + days_to_expire_threshold: 7 + # vercel.authentication_no_stale_tokens + stale_token_threshold_days: 90 + # vercel.team_no_stale_invitations + stale_invitation_threshold_days: 30 + # vercel.team_member_role_least_privilege + max_owner_percentage: 20 + max_owners: 3 + # vercel.project_environment_no_secrets_in_plain_type + secret_suffixes: + - "_KEY" + - "_SECRET" + - "_TOKEN" + - "_PASSWORD" + - "_API_KEY" + - "_PRIVATE_KEY" + ``` diff --git a/docs/user-guide/providers/vercel/authentication.mdx b/docs/user-guide/providers/vercel/authentication.mdx new file mode 100644 index 0000000000..32cb0256f9 --- /dev/null +++ b/docs/user-guide/providers/vercel/authentication.mdx @@ -0,0 +1,137 @@ +--- +title: "Vercel Authentication in Prowler" +--- + +import { VersionBadge } from "/snippets/version-badge.mdx" + + + +Prowler for Vercel authenticates using an **API Token**. + +## Required Permissions + +Prowler requires read-only access to Vercel teams, projects, deployments, domains, and security settings. The API Token must have access to the target team scope. + + +Vercel API Tokens inherit the permissions of the user that created them. Ensure the user has at least a **Viewer** role on the team to be scanned. + + +| Resource | Access | Description | +|----------|--------|-------------| +| Teams | Read | Required to list teams, members, and SSO configuration | +| Projects | Read | Required to list projects, environment variables, and deployment protection settings | +| Deployments | Read | Required to list deployments and protection status | +| Domains | Read | Required to list domains, DNS records, and SSL certificates | +| Firewall | Read | Required to read WAF rules, rate limiting, and IP blocking configuration | + +--- + +## API Token + +### Step 1: Create an API Token + +1. Log into the [Vercel Dashboard](https://vercel.com/dashboard). +2. Click the account avatar in the bottom-left corner and select "Settings". + + ![Vercel Account Settings](/user-guide/providers/vercel/images/vercel-account-settings.png) + +3. In the left sidebar, click "Tokens". +4. Under **Create Token**, enter a descriptive name (e.g., "Prowler Scan"). +5. Select the **Scope** — choose the team to be scanned or "Full Account" for all teams. +6. Set an **Expiration** date, or select "No expiration" for continuous scanning. +7. Click **Create**. + + ![Create Vercel Token](/user-guide/providers/vercel/images/vercel-create-token.png) + +8. Copy the token immediately. + + +Vercel only displays the token once. Copy it immediately and store it securely. If lost, a new token must be created. + + +### Step 2: Provide the Token to Prowler + +Export the token as an environment variable: + +```console +export VERCEL_TOKEN="your-api-token-here" +prowler vercel +``` + +--- + +## Team Scoping (Optional) + +By default, Prowler auto-discovers all teams the authenticated user belongs to and scans each one. To restrict the scan to a specific team, provide the Team ID. + +### Locate the Team ID + +1. In the Vercel Dashboard, navigate to "Settings" for the target team. +2. Scroll down to the **Team ID** section and copy the value. + + ![Vercel Team ID](/user-guide/providers/vercel/images/vercel-team-id.png) + +### Provide the Team ID to Prowler + +Export the Team ID as an environment variable: + +```console +export VERCEL_TOKEN="your-api-token-here" +export VERCEL_TEAM="team_yourteamid" +prowler vercel +``` + +--- + +## Environment Variables Reference + +| Variable | Required | Description | +|----------|----------|-------------| +| `VERCEL_TOKEN` | Yes | Vercel API Bearer Token | +| `VERCEL_TEAM` | No | Team ID or slug to scope the scan to a single team | + +--- + +## Best Practices + +- **Create a dedicated token for Prowler** — Avoid reusing tokens shared with other integrations. +- **Use environment variables** — Never hardcode credentials in scripts or commands. +- **Scope tokens to specific teams** — When possible, limit token access to the team being scanned. +- **Set token expiration** — Use time-limited tokens and rotate them regularly. +- **Use least privilege** — Assign the Viewer role to the user creating the token unless write access is explicitly needed. + +--- + +## Troubleshooting + +### "Vercel credentials not found" Error + +This error occurs when no API Token is provided. Ensure the `VERCEL_TOKEN` environment variable is set: + +```console +export VERCEL_TOKEN="your-api-token-here" +``` + +### "Invalid or expired Vercel API token" Error + +- Verify the API Token is correct and has not expired. +- Check that the token has not been revoked in the Vercel Dashboard under "Settings" > "Tokens". + +### "Insufficient permissions" Error + +- Ensure the user that created the token has at least a **Viewer** role on the target team. +- If scanning a specific team, verify the token scope includes that team. + +### "Team not found or not accessible" Error + +This error occurs when the provided `VERCEL_TEAM` value does not match an accessible team. Verify the Team ID is correct: + +1. Navigate to the team "Settings" in the Vercel Dashboard. +2. Copy the exact **Team ID** value from the settings page. + +### "Rate limit exceeded" Error + +Vercel applies rate limits to API requests. Prowler automatically retries rate-limited requests up to 3 times with exponential backoff. If this error persists: + +- Reduce the number of projects being scanned in a single run using the `--project` argument. +- Wait a few minutes and retry the scan. diff --git a/docs/user-guide/providers/vercel/getting-started-vercel.mdx b/docs/user-guide/providers/vercel/getting-started-vercel.mdx new file mode 100644 index 0000000000..67d4853d18 --- /dev/null +++ b/docs/user-guide/providers/vercel/getting-started-vercel.mdx @@ -0,0 +1,108 @@ +--- +title: "Getting Started With Vercel on Prowler" +--- + +import { VersionBadge } from "/snippets/version-badge.mdx" + +Prowler for Vercel scans teams and projects for security misconfigurations, including deployment protection, environment variable exposure, WAF rules, domain configuration, team access controls, and more. + +## Prerequisites + +Set up authentication for Vercel with the [Vercel Authentication](/user-guide/providers/vercel/authentication) guide before starting: + +- Create a Vercel API Token with access to the target team +- Identify the Team ID (optional, required to scope the scan to a single team) + +## Prowler CLI + + + +### Step 1: Set Up Authentication + +Follow the [Vercel Authentication](/user-guide/providers/vercel/authentication) guide to create an API Token, then export it: + +```console +export VERCEL_TOKEN="your-api-token-here" +``` + +Optionally, scope the scan to a specific team: + +```console +export VERCEL_TEAM="team_yourteamid" +``` + +### Step 2: Run the First Scan + +Run a baseline scan after credentials are configured: + +```console +prowler vercel +``` + +Prowler automatically discovers all teams accessible with the provided token and runs security checks against them. + +### Step 3: Filter the Scan Scope (Optional) + +#### Filter by Team + +To scan a specific team, set the `VERCEL_TEAM` environment variable with the Team ID or slug: + +```console +export VERCEL_TEAM="team_yourteamid" +prowler vercel +``` + + +When no team is specified, Prowler auto-discovers all teams the authenticated user belongs to and scans each one. + + +#### Filter by Project + +To scan only specific projects, use the `--project` argument: + +```console +prowler vercel --project my-project-name +``` + +Multiple projects can be specified: + +```console +prowler vercel --project my-project-name another-project +``` + +Project IDs are also supported: + +```console +prowler vercel --project prj_abc123def456 +``` + +### Step 4: Use a Custom Configuration (Optional) + +Prowler uses a configuration file to customize provider behavior. The Vercel configuration includes: + +```yaml +vercel: + # Maximum number of retries for API requests (default is 3) + max_retries: 3 +``` + +To use a custom configuration: + +```console +prowler vercel --config-file /path/to/config.yaml +``` + +--- + +## Supported Services + +Prowler for Vercel includes security checks across the following services: + +| Service | Description | +|---------|-------------| +| **Authentication** | Token expiration and staleness checks | +| **Deployment** | Preview deployment access and production stability | +| **Domain** | DNS configuration, SSL certificates, and wildcard exposure | +| **Project** | Deployment protection, environment variable security, fork protection, and skew protection | +| **Security** | Web Application Firewall (WAF), rate limiting, IP blocking, and managed rulesets | +| **Team** | SSO enforcement, directory sync, member access, and invitation hygiene | diff --git a/docs/user-guide/providers/vercel/images/vercel-account-settings.png b/docs/user-guide/providers/vercel/images/vercel-account-settings.png new file mode 100644 index 0000000000000000000000000000000000000000..429c7a12f18213e08b7a3cb25ee5838cfeaac2c7 GIT binary patch literal 231905 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 literal 0 HcmV?d00001 diff --git a/docs/user-guide/providers/vercel/images/vercel-create-token.png b/docs/user-guide/providers/vercel/images/vercel-create-token.png new file mode 100644 index 0000000000000000000000000000000000000000..4aaf93da73ad7056f94fa75afb331da88db27353 GIT binary patch literal 291205 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%0DU^!Y`~H#5u=G`|tA$@$HWEE8qx|9cwJHy( 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%0Dh9nj_bu3ad^ZO{ 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ྭIufsJe5|41NAqt{|B_5)^*iQs} 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

67#ZS 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 V%X*aFKfr&dPpJHiJAU!T{{h+`@V5W} literal 0 HcmV?d00001 diff --git a/docs/user-guide/providers/vercel/images/vercel-team-id.png b/docs/user-guide/providers/vercel/images/vercel-team-id.png new file mode 100644 index 0000000000000000000000000000000000000000..c377439e7a4f93ba0e447aba59260edab637faf0 GIT binary patch literal 316902 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

!tKlmt(dSMtv}(3ewnJ&O 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 +### Region == * (Vercel is a global service, region is always "global") +### Resources and tags are lists that can have either Regex or Keywords. +### Tags is an optional list that matches on tuples of 'key=value' and are "ANDed" together. +### Use an alternation Regex to match one of multiple tags with "ORed" logic. +### For each check you can except Accounts, Regions, Resources and/or Tags. +########################### MUTELIST EXAMPLE ########################### +Mutelist: + Accounts: + "team_example123": + Checks: + "project_deployment_protection_enabled": + Regions: + - "*" + Resources: + - "prj_internal001" + - "prj_internal002" + Description: "Mute deployment protection check for internal-only projects" + "project_environment_*": + Regions: + - "*" + Resources: + - "prj_staging.*" + Description: "Mute all environment variable checks for staging projects" + "*": + Regions: + - "*" + Resources: + - "prj_sandbox" + Tags: + - "environment=sandbox" + Description: "Mute all checks for sandbox project with matching tag" + + "*": + Checks: + "security_waf_enabled": + Regions: + - "*" + Resources: + - "prj_static.*" + Description: "Mute WAF check for static-only projects across all teams" + "*": + Regions: + - "*" + Resources: + - "*" + Tags: + - "prowler-ignore=true" + Description: "Global mute for resources tagged with prowler-ignore=true" diff --git a/prowler/lib/check/check.py b/prowler/lib/check/check.py index 0b93a0e82e..0041d4fde2 100644 --- a/prowler/lib/check/check.py +++ b/prowler/lib/check/check.py @@ -713,6 +713,11 @@ def execute( is_finding_muted_args["project_id"] = ( global_provider.identity.project_id ) + elif global_provider.type == "vercel": + team = getattr(global_provider.identity, "team", None) + is_finding_muted_args["team_id"] = ( + team.id if team else global_provider.identity.user_id + ) for finding in check_findings: if global_provider.type == "cloudflare": is_finding_muted_args["account_id"] = finding.account_id diff --git a/prowler/lib/check/models.py b/prowler/lib/check/models.py index 524248d26f..43d6018cbf 100644 --- a/prowler/lib/check/models.py +++ b/prowler/lib/check/models.py @@ -1240,6 +1240,50 @@ class CheckReportMongoDBAtlas(Check_Report): self.location = getattr(resource, "location", self.project_id) +@dataclass +class CheckReportVercel(Check_Report): + """Contains the Vercel Check's finding information. + + Vercel is a global platform - team_id is the scoping context. + All resource-related attributes are derived from the resource object. + """ + + resource_name: str + resource_id: str + team_id: str + + def __init__( + self, + metadata: Dict, + resource: Any, + resource_name: str = None, + resource_id: str = None, + team_id: str = None, + ) -> None: + """Initialize the Vercel Check's finding information. + + Args: + metadata: Check metadata dictionary + resource: The Vercel resource being checked + resource_name: Override for resource name + resource_id: Override for resource ID + team_id: Override for team ID + """ + super().__init__(metadata, resource) + self.resource_name = resource_name or getattr( + resource, "name", getattr(resource, "resource_name", "") + ) + self.resource_id = resource_id or getattr( + resource, "id", getattr(resource, "resource_id", "") + ) + self.team_id = team_id or getattr(resource, "team_id", "") + + @property + def region(self) -> str: + """Vercel is global - return 'global'.""" + return "global" + + # Testing Pending def load_check_metadata(metadata_file: str) -> CheckMetadata: """ diff --git a/prowler/lib/cli/parser.py b/prowler/lib/cli/parser.py index e82ead1db9..47275b12cf 100644 --- a/prowler/lib/cli/parser.py +++ b/prowler/lib/cli/parser.py @@ -29,10 +29,10 @@ class ProwlerArgumentParser: self.parser = argparse.ArgumentParser( prog="prowler", formatter_class=RawTextHelpFormatter, - usage="prowler [-h] [--version] {aws,azure,gcp,kubernetes,m365,github,googleworkspace,nhn,mongodbatlas,oraclecloud,alibabacloud,cloudflare,openstack,dashboard,iac,image} ...", + usage="prowler [-h] [--version] {aws,azure,gcp,kubernetes,m365,github,googleworkspace,nhn,mongodbatlas,oraclecloud,alibabacloud,cloudflare,openstack,vercel,dashboard,iac,image} ...", epilog=""" Available Cloud Providers: - {aws,azure,gcp,kubernetes,m365,github,googleworkspace,iac,llm,image,nhn,mongodbatlas,oraclecloud,alibabacloud,cloudflare,openstack} + {aws,azure,gcp,kubernetes,m365,github,googleworkspace,iac,llm,image,nhn,mongodbatlas,oraclecloud,alibabacloud,cloudflare,openstack,vercel} aws AWS Provider azure Azure Provider gcp GCP Provider @@ -49,6 +49,7 @@ Available Cloud Providers: image Container Image Provider nhn NHN Provider (Unofficial) mongodbatlas MongoDB Atlas Provider (Beta) + vercel Vercel Provider Available components: dashboard Local dashboard diff --git a/prowler/lib/outputs/finding.py b/prowler/lib/outputs/finding.py index a93d20f063..26fbe327ee 100644 --- a/prowler/lib/outputs/finding.py +++ b/prowler/lib/outputs/finding.py @@ -404,6 +404,23 @@ class Finding(BaseModel): output_data["resource_uid"] = check_output.resource_id output_data["region"] = check_output.zone_name + elif provider.type == "vercel": + output_data["auth_method"] = "api_token" + team = get_nested_attribute(provider, "identity.team") + output_data["account_uid"] = ( + team.id + if team + else get_nested_attribute(provider, "identity.user_id") + ) + output_data["account_name"] = ( + team.name + if team + else get_nested_attribute(provider, "identity.username") + ) + output_data["resource_name"] = check_output.resource_name + output_data["resource_uid"] = check_output.resource_id + output_data["region"] = "global" + elif provider.type == "alibabacloud": output_data["auth_method"] = get_nested_attribute( provider, "identity.identity_arn" diff --git a/prowler/lib/outputs/html/html.py b/prowler/lib/outputs/html/html.py index 4ffbf1f402..d547ea3b95 100644 --- a/prowler/lib/outputs/html/html.py +++ b/prowler/lib/outputs/html/html.py @@ -1332,6 +1332,71 @@ class HTML(Output): ) return "" + @staticmethod + def get_vercel_assessment_summary(provider: Provider) -> str: + """ + get_vercel_assessment_summary gets the HTML assessment summary for the Vercel provider + + Args: + provider (Provider): the Vercel provider object + + Returns: + str: HTML assessment summary for the Vercel provider + """ + try: + assessment_items = "" + + team = getattr(provider.identity, "team", None) + if team: + assessment_items += f""" +
  • + Team: {team.name} ({team.id}) +
  • """ + + credentials_items = """ +
  • + Authentication: API Token +
  • """ + + email = getattr(provider.identity, "email", None) + if email: + credentials_items += f""" +
  • + Email: {email} +
  • """ + + username = getattr(provider.identity, "username", None) + if username: + credentials_items += f""" +
  • + Username: {username} +
  • """ + + return f""" +
    +
    +
    + Vercel Assessment Summary +
    +
      {assessment_items} +
    +
    +
    +
    +
    +
    + Vercel Credentials +
    +
      {credentials_items} +
    +
    +
    """ + except Exception as error: + logger.error( + f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}] -- {error}" + ) + return "" + @staticmethod def get_assessment_summary(provider: Provider) -> str: """ diff --git a/prowler/lib/outputs/outputs.py b/prowler/lib/outputs/outputs.py index 82d3494a5e..1e2f6f2058 100644 --- a/prowler/lib/outputs/outputs.py +++ b/prowler/lib/outputs/outputs.py @@ -38,6 +38,8 @@ def stdout_report(finding, color, verbose, status, fix): details = finding.zone_name if finding.check_metadata.Provider == "googleworkspace": details = finding.location + if finding.check_metadata.Provider == "vercel": + details = finding.region if (verbose or fix) and (not status or finding.status in status): if finding.muted: diff --git a/prowler/lib/outputs/summary_table.py b/prowler/lib/outputs/summary_table.py index 5f50f53c81..635139117d 100644 --- a/prowler/lib/outputs/summary_table.py +++ b/prowler/lib/outputs/summary_table.py @@ -99,6 +99,14 @@ def display_summary_table( elif provider.type == "image": entity_type = "Image" audited_entities = ", ".join(provider.images) + elif provider.type == "vercel": + entity_type = "Team" + if provider.identity.team: + audited_entities = ( + f"{provider.identity.team.name} ({provider.identity.team.slug})" + ) + else: + audited_entities = provider.identity.username or "Personal Account" # Check if there are findings and that they are not all MANUAL if findings and not all(finding.status == "MANUAL" for finding in findings): diff --git a/prowler/providers/common/provider.py b/prowler/providers/common/provider.py index 8798179a8d..debc1c4ef2 100644 --- a/prowler/providers/common/provider.py +++ b/prowler/providers/common/provider.py @@ -371,6 +371,13 @@ class Provider(ABC): mutelist_path=arguments.mutelist_file, fixer_config=fixer_config, ) + elif "vercel" in provider_class_name.lower(): + provider_class( + projects=getattr(arguments, "project", None), + config_path=arguments.config_file, + mutelist_path=arguments.mutelist_file, + fixer_config=fixer_config, + ) except TypeError as error: logger.critical( diff --git a/prowler/providers/vercel/__init__.py b/prowler/providers/vercel/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/exceptions/__init__.py b/prowler/providers/vercel/exceptions/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/exceptions/exceptions.py b/prowler/providers/vercel/exceptions/exceptions.py new file mode 100644 index 0000000000..f876f778bb --- /dev/null +++ b/prowler/providers/vercel/exceptions/exceptions.py @@ -0,0 +1,127 @@ +# Exceptions codes from 13000 to 13999 are reserved for Vercel exceptions +from prowler.exceptions.exceptions import ProwlerException + + +class VercelBaseException(ProwlerException): + """Base exception for Vercel provider errors.""" + + VERCEL_ERROR_CODES = { + (13000, "VercelCredentialsError"): { + "message": "Vercel credentials not found or invalid.", + "remediation": "Set the VERCEL_TOKEN environment variable with a valid Vercel API token. Generate one at https://vercel.com/account/tokens.", + }, + (13001, "VercelAuthenticationError"): { + "message": "Authentication to Vercel API failed.", + "remediation": "Verify your Vercel API token is valid and has not expired. Check at https://vercel.com/account/tokens.", + }, + (13002, "VercelSessionError"): { + "message": "Failed to create a Vercel API session.", + "remediation": "Check network connectivity and ensure the Vercel API is reachable at https://api.vercel.com.", + }, + (13003, "VercelIdentityError"): { + "message": "Failed to retrieve Vercel identity information.", + "remediation": "Ensure the API token has permissions to read user and team information.", + }, + (13004, "VercelInvalidTeamError"): { + "message": "The specified Vercel team was not found or is not accessible.", + "remediation": "Verify the team ID or slug is correct and that your token has access to the team.", + }, + (13005, "VercelInvalidProviderIdError"): { + "message": "The provided Vercel provider ID is invalid.", + "remediation": "Ensure the provider UID matches a valid Vercel team ID or user ID format.", + }, + (13006, "VercelAPIError"): { + "message": "An error occurred while calling the Vercel API.", + "remediation": "Check the Vercel API status at https://www.vercel-status.com/ and retry the request.", + }, + (13007, "VercelRateLimitError"): { + "message": "Rate limited by the Vercel API.", + "remediation": "Wait and retry. Vercel API rate limits vary by endpoint. See https://vercel.com/docs/rest-api#rate-limits.", + }, + (13008, "VercelPlanLimitationError"): { + "message": "This feature requires a higher Vercel plan.", + "remediation": "Some security features (e.g., WAF managed rulesets) require Vercel Enterprise. Upgrade your plan or skip these checks.", + }, + } + + def __init__(self, code, file=None, original_exception=None, message=None): + provider = "Vercel" + error_info = self.VERCEL_ERROR_CODES.get((code, self.__class__.__name__)) + if error_info is None: + error_info = { + "message": message or "Unknown Vercel error.", + "remediation": "Check the Vercel API documentation for more details.", + } + elif message: + error_info = error_info.copy() + error_info["message"] = message + super().__init__( + code=code, + source=provider, + file=file, + original_exception=original_exception, + error_info=error_info, + ) + + +class VercelCredentialsError(VercelBaseException): + def __init__(self, file=None, original_exception=None, message=None): + super().__init__( + 13000, file=file, original_exception=original_exception, message=message + ) + + +class VercelAuthenticationError(VercelBaseException): + def __init__(self, file=None, original_exception=None, message=None): + super().__init__( + 13001, file=file, original_exception=original_exception, message=message + ) + + +class VercelSessionError(VercelBaseException): + def __init__(self, file=None, original_exception=None, message=None): + super().__init__( + 13002, file=file, original_exception=original_exception, message=message + ) + + +class VercelIdentityError(VercelBaseException): + def __init__(self, file=None, original_exception=None, message=None): + super().__init__( + 13003, file=file, original_exception=original_exception, message=message + ) + + +class VercelInvalidTeamError(VercelBaseException): + def __init__(self, file=None, original_exception=None, message=None): + super().__init__( + 13004, file=file, original_exception=original_exception, message=message + ) + + +class VercelInvalidProviderIdError(VercelBaseException): + def __init__(self, file=None, original_exception=None, message=None): + super().__init__( + 13005, file=file, original_exception=original_exception, message=message + ) + + +class VercelAPIError(VercelBaseException): + def __init__(self, file=None, original_exception=None, message=None): + super().__init__( + 13006, file=file, original_exception=original_exception, message=message + ) + + +class VercelRateLimitError(VercelBaseException): + def __init__(self, file=None, original_exception=None, message=None): + super().__init__( + 13007, file=file, original_exception=original_exception, message=message + ) + + +class VercelPlanLimitationError(VercelBaseException): + def __init__(self, file=None, original_exception=None, message=None): + super().__init__( + 13008, file=file, original_exception=original_exception, message=message + ) diff --git a/prowler/providers/vercel/lib/__init__.py b/prowler/providers/vercel/lib/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/lib/arguments/__init__.py b/prowler/providers/vercel/lib/arguments/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/lib/arguments/arguments.py b/prowler/providers/vercel/lib/arguments/arguments.py new file mode 100644 index 0000000000..df179ff4d8 --- /dev/null +++ b/prowler/providers/vercel/lib/arguments/arguments.py @@ -0,0 +1,18 @@ +def init_parser(self): + """Init the Vercel provider CLI parser.""" + vercel_parser = self.subparsers.add_parser( + "vercel", + parents=[self.common_providers_parser], + help="Vercel Provider", + ) + + # Scope + scope_group = vercel_parser.add_argument_group("Scope") + scope_group.add_argument( + "--project", + "--projects", + nargs="*", + default=None, + metavar="PROJECT", + help="Filter scan to specific Vercel project names or IDs.", + ) diff --git a/prowler/providers/vercel/lib/mutelist/__init__.py b/prowler/providers/vercel/lib/mutelist/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/lib/mutelist/mutelist.py b/prowler/providers/vercel/lib/mutelist/mutelist.py new file mode 100644 index 0000000000..38095a69d8 --- /dev/null +++ b/prowler/providers/vercel/lib/mutelist/mutelist.py @@ -0,0 +1,20 @@ +from prowler.lib.check.models import CheckReportVercel +from prowler.lib.mutelist.mutelist import Mutelist +from prowler.lib.outputs.utils import unroll_dict, unroll_tags + + +class VercelMutelist(Mutelist): + """Vercel-specific mutelist helper.""" + + def is_finding_muted( + self, + finding: CheckReportVercel, + team_id: str, + ) -> bool: + return self.is_muted( + team_id, + finding.check_metadata.CheckID, + "global", # Vercel is a global service + finding.resource_id or finding.resource_name, + unroll_dict(unroll_tags(finding.resource_tags)), + ) diff --git a/prowler/providers/vercel/lib/service/__init__.py b/prowler/providers/vercel/lib/service/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/lib/service/service.py b/prowler/providers/vercel/lib/service/service.py new file mode 100644 index 0000000000..aaf4d2625c --- /dev/null +++ b/prowler/providers/vercel/lib/service/service.py @@ -0,0 +1,177 @@ +import time +from concurrent.futures import ThreadPoolExecutor, as_completed + +import requests + +from prowler.lib.logger import logger +from prowler.providers.vercel.exceptions.exceptions import ( + VercelAPIError, + VercelRateLimitError, +) + +MAX_WORKERS = 10 + + +class VercelService: + """Base class for Vercel services to share provider context and HTTP client.""" + + def __init__(self, service: str, provider): + self.provider = provider + self.audit_config = provider.audit_config + self.fixer_config = provider.fixer_config + self.service = service.lower() if not service.islower() else service + + # Set up HTTP session with Bearer token + self._http_session = requests.Session() + self._http_session.headers.update( + { + "Authorization": f"Bearer {provider.session.token}", + "Content-Type": "application/json", + } + ) + self._base_url = provider.session.base_url + self._team_id = provider.session.team_id + + # Thread pool for parallel API calls + self.thread_pool = ThreadPoolExecutor(max_workers=MAX_WORKERS) + + @property + def _all_team_ids(self) -> list[str]: + """Return team IDs to scan: explicit team_id, or all auto-discovered teams.""" + if self._team_id: + return [self._team_id] + return [t.id for t in self.provider.identity.teams] + + def _get(self, path: str, params: dict = None) -> dict: + """Make a rate-limit-aware GET request to the Vercel API. + + Args: + path: API path (e.g., "/v9/projects"). + params: Query parameters. + + Returns: + Parsed JSON response as dict. + + Raises: + VercelRateLimitError: If rate limited after retries. + VercelAPIError: If the API returns an error. + """ + if params is None: + params = {} + + # Append teamId if operating in team scope + if self._team_id and "teamId" not in params: + params["teamId"] = self._team_id + + url = f"{self._base_url}{path}" + max_retries = self.audit_config.get("max_retries", 3) + + for attempt in range(max_retries + 1): + try: + response = self._http_session.get(url, params=params, timeout=30) + + if response.status_code == 429: + retry_after = int(response.headers.get("Retry-After", 5)) + if attempt < max_retries: + logger.warning( + f"{self.service} - Rate limited, retrying after {retry_after}s (attempt {attempt + 1}/{max_retries})" + ) + time.sleep(retry_after) + continue + raise VercelRateLimitError( + file=__file__, + message=f"Rate limited on {path} after {max_retries} retries.", + ) + + if response.status_code == 403: + # Plan limitation or permission error — return None for graceful handling + logger.warning( + f"{self.service} - Access denied for {path} (403). " + "This may be a plan limitation." + ) + return None + + response.raise_for_status() + return response.json() + + except VercelRateLimitError: + raise + except requests.exceptions.HTTPError as error: + raise VercelAPIError( + file=__file__, + original_exception=error, + message=f"HTTP error on {path}: {error}", + ) + except requests.exceptions.RequestException as error: + if attempt < max_retries: + logger.warning( + f"{self.service} - Request error on {path}, retrying (attempt {attempt + 1}/{max_retries}): {error}" + ) + time.sleep(2**attempt) + continue + raise VercelAPIError( + file=__file__, + original_exception=error, + message=f"Request failed on {path} after {max_retries} retries: {error}", + ) + + return {} + + def _paginate(self, path: str, key: str, params: dict = None) -> list: + """Paginate through a Vercel API list endpoint. + + Vercel uses cursor-based pagination with a `pagination.next` field. + + Args: + path: API path. + key: JSON key containing the list of items. + params: Additional query parameters. + + Returns: + Combined list of all items across pages. + """ + if params is None: + params = {} + + params["limit"] = params.get("limit", 100) + all_items = [] + + while True: + data = self._get(path, params) + if data is None: + break + + items = data.get(key, []) + all_items.extend(items) + + # Check for next page cursor + pagination = data.get("pagination", {}) + next_cursor = pagination.get("next") + if not next_cursor: + break + + params["until"] = next_cursor + + return all_items + + def __threading_call__(self, call, iterator): + """Execute a function across multiple items using threading.""" + items = list(iterator) if not isinstance(iterator, list) else iterator + + futures = {self.thread_pool.submit(call, item): item for item in items} + results = [] + + for future in as_completed(futures): + try: + result = future.result() + if result is not None: + results.append(result) + except Exception as error: + item = futures[future] + item_id = getattr(item, "id", str(item)) + logger.error( + f"{self.service} - Threading error processing {item_id}: " + f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" + ) + + return results diff --git a/prowler/providers/vercel/models.py b/prowler/providers/vercel/models.py new file mode 100644 index 0000000000..5f0e207f19 --- /dev/null +++ b/prowler/providers/vercel/models.py @@ -0,0 +1,52 @@ +from typing import Any, Optional + +from pydantic import BaseModel, Field + +from prowler.config.config import output_file_timestamp +from prowler.providers.common.models import ProviderOutputOptions + + +class VercelSession(BaseModel): + """Vercel API session information.""" + + token: str + team_id: Optional[str] = None + base_url: str = "https://api.vercel.com" + http_session: Any = Field(default=None, exclude=True) + + +class VercelTeamInfo(BaseModel): + """Vercel team metadata.""" + + id: str + name: str + slug: str + + +class VercelIdentityInfo(BaseModel): + """Vercel identity and scoping information.""" + + user_id: Optional[str] = None + username: Optional[str] = None + email: Optional[str] = None + team: Optional[VercelTeamInfo] = None + teams: list[VercelTeamInfo] = Field(default_factory=list) + + +class VercelOutputOptions(ProviderOutputOptions): + """Customize output filenames for Vercel scans.""" + + def __init__(self, arguments, bulk_checks_metadata, identity: VercelIdentityInfo): + super().__init__(arguments, bulk_checks_metadata) + if ( + not hasattr(arguments, "output_filename") + or arguments.output_filename is None + ): + account_fragment = ( + identity.team.slug if identity.team else identity.username or "vercel" + ) + self.output_filename = ( + f"prowler-output-{account_fragment}-{output_file_timestamp}" + ) + else: + self.output_filename = arguments.output_filename diff --git a/prowler/providers/vercel/services/__init__.py b/prowler/providers/vercel/services/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/authentication/__init__.py b/prowler/providers/vercel/services/authentication/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/authentication/authentication_client.py b/prowler/providers/vercel/services/authentication/authentication_client.py new file mode 100644 index 0000000000..b5074a9f94 --- /dev/null +++ b/prowler/providers/vercel/services/authentication/authentication_client.py @@ -0,0 +1,6 @@ +from prowler.providers.common.provider import Provider +from prowler.providers.vercel.services.authentication.authentication_service import ( + Authentication, +) + +authentication_client = Authentication(Provider.get_global_provider()) diff --git a/prowler/providers/vercel/services/authentication/authentication_no_stale_tokens/__init__.py b/prowler/providers/vercel/services/authentication/authentication_no_stale_tokens/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/authentication/authentication_no_stale_tokens/authentication_no_stale_tokens.metadata.json b/prowler/providers/vercel/services/authentication/authentication_no_stale_tokens/authentication_no_stale_tokens.metadata.json new file mode 100644 index 0000000000..d94e12f0b9 --- /dev/null +++ b/prowler/providers/vercel/services/authentication/authentication_no_stale_tokens/authentication_no_stale_tokens.metadata.json @@ -0,0 +1,38 @@ +{ + "Provider": "vercel", + "CheckID": "authentication_no_stale_tokens", + "CheckTitle": "Vercel API tokens are not stale or unused for over 90 days", + "CheckType": [], + "ServiceName": "authentication", + "SubServiceName": "", + "ResourceIdTemplate": "", + "Severity": "medium", + "ResourceType": "NotDefined", + "ResourceGroup": "governance", + "Description": "**Vercel API tokens** are assessed for **staleness** by checking whether each token has been active within the last 90 days. Stale tokens that remain unused for extended periods represent unnecessary access credentials that increase the attack surface. Tokens with no recorded activity are also flagged.", + "Risk": "Stale tokens that have not been used for over **90 days** may belong to decommissioned integrations, former team members, or forgotten automation. These tokens remain **valid** and could be compromised or misused without detection, as their inactivity makes suspicious usage harder to notice in access logs.", + "RelatedUrl": "", + "AdditionalURLs": [ + "https://vercel.com/docs/rest-api#authentication" + ], + "Remediation": { + "Code": { + "CLI": "", + "NativeIaC": "", + "Other": "1. Sign in to the Vercel dashboard\n2. Navigate to Account Settings > Tokens\n3. Review the last active date for each token\n4. Revoke or delete tokens that have not been used in over 90 days\n5. Contact token owners to confirm whether the token is still needed\n6. Implement a regular token review process (e.g., quarterly)", + "Terraform": "" + }, + "Recommendation": { + "Text": "Regularly audit API tokens and revoke any that have not been used within 90 days. Implement a token lifecycle management process that includes periodic reviews, automatic expiration dates, and documentation of each token's purpose and owner.", + "Url": "https://hub.prowler.com/checks/vercel/authentication_no_stale_tokens" + } + }, + "Categories": [ + "trust-boundaries" + ], + "DependsOn": [], + "RelatedTo": [ + "authentication_token_not_expired" + ], + "Notes": "The stale threshold is configurable via ``stale_token_threshold_days`` in audit_config (default: 90 days). Tokens with no recorded activity (active_at is None) are considered stale." +} diff --git a/prowler/providers/vercel/services/authentication/authentication_no_stale_tokens/authentication_no_stale_tokens.py b/prowler/providers/vercel/services/authentication/authentication_no_stale_tokens/authentication_no_stale_tokens.py new file mode 100644 index 0000000000..5b958ce39e --- /dev/null +++ b/prowler/providers/vercel/services/authentication/authentication_no_stale_tokens/authentication_no_stale_tokens.py @@ -0,0 +1,69 @@ +from datetime import datetime, timedelta, timezone +from typing import List + +from prowler.lib.check.models import Check, CheckReportVercel +from prowler.providers.vercel.services.authentication.authentication_client import ( + authentication_client, +) + + +class authentication_no_stale_tokens(Check): + """Check if API tokens have been used recently. + + This class verifies whether each Vercel API token has been active within + the configured threshold (default: 90 days). Stale tokens that remain + unused pose a security risk as they may have been forgotten or belong + to former team members. + """ + + def execute(self) -> List[CheckReportVercel]: + """Execute the Vercel Stale Token check. + + Iterates over all tokens and checks if each token has been active + within the configured threshold. The threshold is configurable via + ``stale_token_threshold_days`` in audit_config (default: 90 days). + + Returns: + List[CheckReportVercel]: A list of reports for each token. + """ + findings = [] + now = datetime.now(timezone.utc) + stale_threshold_days = authentication_client.audit_config.get( + "stale_token_threshold_days", 90 + ) + stale_cutoff = now - timedelta(days=stale_threshold_days) + + for token in authentication_client.tokens.values(): + report = CheckReportVercel( + metadata=self.metadata(), + resource=token, + resource_name=token.name, + resource_id=token.id, + ) + + if token.active_at is None: + report.status = "FAIL" + report.status_extended = ( + f"Token '{token.name}' ({token.id}) has no recorded activity " + f"and is considered stale." + ) + elif token.active_at < stale_cutoff: + days_inactive = (now - token.active_at).days + report.status = "FAIL" + report.status_extended = ( + f"Token '{token.name}' ({token.id}) has not been used for " + f"{days_inactive} days (last active: " + f"{token.active_at.strftime('%Y-%m-%d %H:%M UTC')}). " + f"Threshold is {stale_threshold_days} days." + ) + else: + report.status = "PASS" + report.status_extended = ( + f"Token '{token.name}' ({token.id}) was last active on " + f"{token.active_at.strftime('%Y-%m-%d %H:%M UTC')} " + f"(within the last {stale_threshold_days} days)." + ) + + findings.append(report) + + return findings diff --git a/prowler/providers/vercel/services/authentication/authentication_service.py b/prowler/providers/vercel/services/authentication/authentication_service.py new file mode 100644 index 0000000000..ef1ed5b2c7 --- /dev/null +++ b/prowler/providers/vercel/services/authentication/authentication_service.py @@ -0,0 +1,99 @@ +from datetime import datetime, timezone +from typing import Optional + +from pydantic import BaseModel, Field + +from prowler.lib.logger import logger +from prowler.providers.vercel.lib.service.service import VercelService + + +class Authentication(VercelService): + """Retrieve Vercel API token metadata for hygiene checks.""" + + def __init__(self, provider): + super().__init__("Authentication", provider) + self.tokens: dict[str, VercelAuthToken] = {} + self._list_tokens() + + def _list_tokens(self): + """List all API tokens for the authenticated user and their teams.""" + # Always fetch personal tokens (no teamId filter) + self._fetch_tokens_for_scope(team_id=None) + + # Also fetch tokens scoped to each team + for tid in self._all_team_ids: + self._fetch_tokens_for_scope(team_id=tid) + + logger.info(f"Authentication - Found {len(self.tokens)} token(s)") + + def _fetch_tokens_for_scope(self, team_id: str = None): + """Fetch tokens for a specific scope (personal or team). + + Args: + team_id: Team ID to fetch tokens for. None for personal tokens. + """ + try: + # Always set teamId key explicitly — _get won't auto-inject when key + # is present, and requests skips None values from query params. + params = {"teamId": team_id} + data = self._get("/v5/user/tokens", params=params) + if not data: + return + + tokens = data.get("tokens", []) + + for token in tokens: + token_id = token.get("id", "") + if not token_id or token_id in self.tokens: + continue + + active_at = None + if token.get("activeAt"): + active_at = datetime.fromtimestamp( + token["activeAt"] / 1000, tz=timezone.utc + ) + + created_at = None + if token.get("createdAt"): + created_at = datetime.fromtimestamp( + token["createdAt"] / 1000, tz=timezone.utc + ) + + expires_at = None + if token.get("expiresAt"): + expires_at = datetime.fromtimestamp( + token["expiresAt"] / 1000, tz=timezone.utc + ) + + self.tokens[token_id] = VercelAuthToken( + id=token_id, + name=token.get("name", "Unnamed Token"), + type=token.get("type"), + active_at=active_at, + created_at=created_at, + expires_at=expires_at, + scopes=token.get("scopes", []), + origin=token.get("origin"), + team_id=token.get("teamId") or team_id, + ) + + except Exception as error: + scope = f"team {team_id}" if team_id else "personal" + logger.error( + f"Authentication - Error listing tokens for {scope}: " + f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" + ) + + +class VercelAuthToken(BaseModel): + """Vercel API token representation.""" + + id: str + name: str + type: Optional[str] = None + active_at: Optional[datetime] = None + created_at: Optional[datetime] = None + expires_at: Optional[datetime] = None + scopes: list[dict] = Field(default_factory=list) + origin: Optional[str] = None + team_id: Optional[str] = None diff --git a/prowler/providers/vercel/services/authentication/authentication_token_not_expired/__init__.py b/prowler/providers/vercel/services/authentication/authentication_token_not_expired/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/authentication/authentication_token_not_expired/authentication_token_not_expired.metadata.json b/prowler/providers/vercel/services/authentication/authentication_token_not_expired/authentication_token_not_expired.metadata.json new file mode 100644 index 0000000000..dca48e73bf --- /dev/null +++ b/prowler/providers/vercel/services/authentication/authentication_token_not_expired/authentication_token_not_expired.metadata.json @@ -0,0 +1,38 @@ +{ + "Provider": "vercel", + "CheckID": "authentication_token_not_expired", + "CheckTitle": "Vercel API tokens have not expired", + "CheckType": [], + "ServiceName": "authentication", + "SubServiceName": "", + "ResourceIdTemplate": "", + "Severity": "high", + "ResourceType": "NotDefined", + "ResourceGroup": "IAM", + "Description": "**Vercel API tokens** are assessed for **expiration status** to identify expired tokens or those about to expire within a configurable threshold (default: 7 days). Tokens about to expire are flagged proactively so they can be rotated before causing disruptions. Tokens without an expiration date are considered valid.", + "Risk": "Expired tokens indicate poor **token lifecycle management**. Tokens about to expire risk **imminent service disruption** if not rotated in time. Integrations or **CI/CD pipelines** relying on expired or soon-to-expire tokens will fail silently.", + "RelatedUrl": "", + "AdditionalURLs": [ + "https://vercel.com/docs/rest-api#authentication" + ], + "Remediation": { + "Code": { + "CLI": "", + "NativeIaC": "", + "Other": "1. Sign in to the Vercel dashboard\n2. Navigate to Account Settings > Tokens\n3. Identify any expired tokens\n4. Delete expired tokens that are no longer needed\n5. Create new tokens with appropriate expiration dates to replace expired ones\n6. Update any integrations or CI/CD pipelines that used the expired tokens", + "Terraform": "" + }, + "Recommendation": { + "Text": "Remove expired tokens and create new ones with appropriate expiration dates. Implement a token rotation schedule to ensure tokens are refreshed before they expire. Update all integrations and automation that depend on the replaced tokens.", + "Url": "https://hub.prowler.com/checks/vercel/authentication_token_not_expired" + } + }, + "Categories": [ + "trust-boundaries" + ], + "DependsOn": [], + "RelatedTo": [ + "authentication_no_stale_tokens" + ], + "Notes": "Tokens without an expiration date (expires_at is None) are treated as valid since they have no defined expiry. The days_to_expire_threshold is configurable via audit_config (default: 7 days). Tokens expiring within the threshold are reported with medium severity; already expired tokens are reported with high severity." +} diff --git a/prowler/providers/vercel/services/authentication/authentication_token_not_expired/authentication_token_not_expired.py b/prowler/providers/vercel/services/authentication/authentication_token_not_expired/authentication_token_not_expired.py new file mode 100644 index 0000000000..b3e9c3ec9e --- /dev/null +++ b/prowler/providers/vercel/services/authentication/authentication_token_not_expired/authentication_token_not_expired.py @@ -0,0 +1,75 @@ +from datetime import datetime, timezone +from typing import List + +from prowler.lib.check.models import Check, CheckReportVercel, Severity +from prowler.providers.vercel.services.authentication.authentication_client import ( + authentication_client, +) + + +class authentication_token_not_expired(Check): + """Check if API tokens have not expired or are about to expire. + + This class verifies whether each Vercel API token is still valid by + checking its expiration date against the current time. Tokens expiring + within a configurable threshold (default: 7 days) are flagged as + about to expire with medium severity. + """ + + def execute(self) -> List[CheckReportVercel]: + """Execute the Vercel Token Expiration check. + + Iterates over all tokens and checks if each token has expired or + is about to expire soon. The threshold is configurable via + ``days_to_expire_threshold`` in audit_config (default: 7 days). + Tokens without an expiration date are considered valid (no expiry set). + + Returns: + List[CheckReportVercel]: A list of reports for each token. + """ + findings = [] + now = datetime.now(timezone.utc) + days_to_expire_threshold = authentication_client.audit_config.get( + "days_to_expire_threshold", 7 + ) + for token in authentication_client.tokens.values(): + report = CheckReportVercel( + metadata=self.metadata(), + resource=token, + resource_name=token.name, + resource_id=token.id, + ) + + if token.expires_at is None: + report.status = "PASS" + report.status_extended = ( + f"Token '{token.name}' ({token.id}) does not have an expiration " + f"date set and is currently valid." + ) + elif token.expires_at <= now: + report.status = "FAIL" + report.check_metadata.Severity = Severity.high + report.status_extended = ( + f"Token '{token.name}' ({token.id}) has expired " + f"on {token.expires_at.strftime('%Y-%m-%d %H:%M UTC')}." + ) + else: + days_left = (token.expires_at - now).days + if days_left <= days_to_expire_threshold: + report.status = "FAIL" + report.check_metadata.Severity = Severity.medium + report.status_extended = ( + f"Token '{token.name}' ({token.id}) is about to expire " + f"in {days_left} days " + f"on {token.expires_at.strftime('%Y-%m-%d %H:%M UTC')}." + ) + else: + report.status = "PASS" + report.status_extended = ( + f"Token '{token.name}' ({token.id}) is valid and expires " + f"on {token.expires_at.strftime('%Y-%m-%d %H:%M UTC')}." + ) + + findings.append(report) + + return findings diff --git a/prowler/providers/vercel/services/deployment/__init__.py b/prowler/providers/vercel/services/deployment/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/deployment/deployment_client.py b/prowler/providers/vercel/services/deployment/deployment_client.py new file mode 100644 index 0000000000..18c240a83b --- /dev/null +++ b/prowler/providers/vercel/services/deployment/deployment_client.py @@ -0,0 +1,4 @@ +from prowler.providers.common.provider import Provider +from prowler.providers.vercel.services.deployment.deployment_service import Deployment + +deployment_client = Deployment(Provider.get_global_provider()) diff --git a/prowler/providers/vercel/services/deployment/deployment_production_uses_stable_target/__init__.py b/prowler/providers/vercel/services/deployment/deployment_production_uses_stable_target/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/deployment/deployment_production_uses_stable_target/deployment_production_uses_stable_target.metadata.json b/prowler/providers/vercel/services/deployment/deployment_production_uses_stable_target/deployment_production_uses_stable_target.metadata.json new file mode 100644 index 0000000000..8a7cc70d40 --- /dev/null +++ b/prowler/providers/vercel/services/deployment/deployment_production_uses_stable_target/deployment_production_uses_stable_target.metadata.json @@ -0,0 +1,36 @@ +{ + "Provider": "vercel", + "CheckID": "deployment_production_uses_stable_target", + "CheckTitle": "Vercel production deployments originate from a stable branch", + "CheckType": [], + "ServiceName": "deployment", + "SubServiceName": "", + "ResourceIdTemplate": "", + "Severity": "medium", + "ResourceType": "NotDefined", + "ResourceGroup": "devops", + "Description": "**Vercel production deployments** are assessed for **source branch stability** by verifying they are sourced from a stable branch (`main` or `master`). Deploying to production from feature branches bypasses standard CI/CD review processes and may introduce untested or incomplete code into the production environment.", + "Risk": "Production deployments from **feature branches** may contain untested, incomplete, or unapproved code changes. This bypasses the standard **code review and merge workflow**, increasing the risk of shipping bugs, security vulnerabilities, or breaking changes to end users.", + "RelatedUrl": "", + "AdditionalURLs": [ + "https://vercel.com/docs/deployments/git" + ], + "Remediation": { + "Code": { + "CLI": "", + "NativeIaC": "", + "Other": "1. Sign in to the Vercel dashboard\n2. Navigate to the project Settings > Git\n3. Ensure the Production Branch is set to 'main' or 'master'\n4. Review recent production deployments and revert any that originated from feature branches", + "Terraform": "" + }, + "Recommendation": { + "Text": "Configure the production branch to main or master and ensure all production deployments go through the standard merge workflow. Use branch protection rules in your Git provider to prevent direct pushes to the production branch.", + "Url": "https://hub.prowler.com/checks/vercel/deployment_production_uses_stable_target" + } + }, + "Categories": [ + "trust-boundaries" + ], + "DependsOn": [], + "RelatedTo": [], + "Notes": "Deployments without git source information are skipped as they may be manual deployments or CLI-triggered builds." +} diff --git a/prowler/providers/vercel/services/deployment/deployment_production_uses_stable_target/deployment_production_uses_stable_target.py b/prowler/providers/vercel/services/deployment/deployment_production_uses_stable_target/deployment_production_uses_stable_target.py new file mode 100644 index 0000000000..39b4d43904 --- /dev/null +++ b/prowler/providers/vercel/services/deployment/deployment_production_uses_stable_target/deployment_production_uses_stable_target.py @@ -0,0 +1,57 @@ +from typing import List + +from prowler.lib.check.models import Check, CheckReportVercel +from prowler.providers.vercel.services.deployment.deployment_client import ( + deployment_client, +) + + +class deployment_production_uses_stable_target(Check): + """Check if production deployments are sourced from a stable branch. + + This class verifies whether each Vercel production deployment originates + from a configured stable branch rather than a feature branch. The list of + stable branches is configurable via audit_config key ``stable_branches`` + (default: ``["main", "master"]``). + """ + + def execute(self) -> List[CheckReportVercel]: + """Execute the Vercel Production Deployment Stable Target check. + + Iterates over all deployments, filters for production targets with + git source information, and checks if the branch is main or master. + + Returns: + List[CheckReportVercel]: A list of reports for each production deployment. + """ + findings = [] + for deployment in deployment_client.deployments.values(): + if deployment.target != "production": + continue + + if not deployment.git_source: + continue + + report = CheckReportVercel(metadata=self.metadata(), resource=deployment) + + stable_branches = deployment_client.audit_config.get( + "stable_branches", ["main", "master"] + ) + branch = deployment.git_source.get("branch") or "" + if branch in stable_branches: + report.status = "PASS" + report.status_extended = ( + f"Production deployment {deployment.name} ({deployment.id}) " + f"is sourced from stable branch '{branch}'." + ) + else: + report.status = "FAIL" + report.status_extended = ( + f"Production deployment {deployment.name} ({deployment.id}) " + f"is sourced from branch '{branch}' instead of a " + f"configured stable branch ({', '.join(stable_branches)})." + ) + + findings.append(report) + + return findings diff --git a/prowler/providers/vercel/services/deployment/deployment_service.py b/prowler/providers/vercel/services/deployment/deployment_service.py new file mode 100644 index 0000000000..ec271086c9 --- /dev/null +++ b/prowler/providers/vercel/services/deployment/deployment_service.py @@ -0,0 +1,103 @@ +from datetime import datetime, timezone +from typing import Optional + +from pydantic import BaseModel + +from prowler.lib.logger import logger +from prowler.providers.vercel.lib.service.service import VercelService + + +class Deployment(VercelService): + """Retrieve recent Vercel deployments.""" + + def __init__(self, provider): + super().__init__("Deployment", provider) + self.deployments: dict[str, VercelDeployment] = {} + self._list_deployments() + + def _list_deployments(self): + """List recent deployments across all projects.""" + try: + params = {"limit": 100} + # Fetch only recent deployments (first page is sufficient for security checks) + raw_deployments = self._paginate("/v6/deployments", "deployments", params) + + seen_ids: set[str] = set() + filter_projects = self.provider.filter_projects + + for dep in raw_deployments: + dep_id = dep.get("uid", dep.get("id", "")) + if not dep_id or dep_id in seen_ids: + continue + seen_ids.add(dep_id) + + project_id = dep.get("projectId", "") + + # Apply project filter if specified + if filter_projects and project_id not in filter_projects: + project_name = dep.get("name", "") + if project_name not in filter_projects: + continue + + created_at = None + if dep.get("createdAt"): + created_at = datetime.fromtimestamp( + dep["createdAt"] / 1000, tz=timezone.utc + ) + + ready_at = None + if dep.get("ready"): + ready_at = datetime.fromtimestamp( + dep["ready"] / 1000, tz=timezone.utc + ) + + git_source = None + meta = dep.get("meta", {}) or {} + if meta.get("githubCommitSha") or meta.get("gitlabCommitSha"): + git_source = { + "commit_sha": meta.get("githubCommitSha") + or meta.get("gitlabCommitSha"), + "branch": meta.get("githubCommitRef") + or meta.get("gitlabCommitRef"), + "repo": meta.get("githubRepo") or meta.get("gitlabRepo"), + } + + self.deployments[dep_id] = VercelDeployment( + id=dep_id, + name=dep.get("name", ""), + url=dep.get("url", ""), + state=dep.get("state", dep.get("readyState", "")), + target=dep.get("target"), + created_at=created_at, + ready_at=ready_at, + project_id=project_id, + project_name=dep.get("name", ""), + team_id=dep.get("teamId") or self.provider.session.team_id, + git_source=git_source, + deployment_protection=dep.get("deploymentProtection"), + ) + + logger.info(f"Deployment - Found {len(self.deployments)} deployment(s)") + + except Exception as error: + logger.error( + f"Deployment - Error listing deployments: " + f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" + ) + + +class VercelDeployment(BaseModel): + """Vercel deployment representation.""" + + id: str + name: str + url: str = "" + state: str = "" + target: Optional[str] = None # "production" | "preview" + created_at: Optional[datetime] = None + ready_at: Optional[datetime] = None + project_id: Optional[str] = None + project_name: Optional[str] = None + team_id: Optional[str] = None + git_source: Optional[dict] = None + deployment_protection: Optional[dict] = None diff --git a/prowler/providers/vercel/services/domain/__init__.py b/prowler/providers/vercel/services/domain/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/domain/domain_client.py b/prowler/providers/vercel/services/domain/domain_client.py new file mode 100644 index 0000000000..30479da773 --- /dev/null +++ b/prowler/providers/vercel/services/domain/domain_client.py @@ -0,0 +1,4 @@ +from prowler.providers.common.provider import Provider +from prowler.providers.vercel.services.domain.domain_service import Domain + +domain_client = Domain(Provider.get_global_provider()) diff --git a/prowler/providers/vercel/services/domain/domain_dns_properly_configured/__init__.py b/prowler/providers/vercel/services/domain/domain_dns_properly_configured/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/domain/domain_dns_properly_configured/domain_dns_properly_configured.metadata.json b/prowler/providers/vercel/services/domain/domain_dns_properly_configured/domain_dns_properly_configured.metadata.json new file mode 100644 index 0000000000..f9104ee960 --- /dev/null +++ b/prowler/providers/vercel/services/domain/domain_dns_properly_configured/domain_dns_properly_configured.metadata.json @@ -0,0 +1,39 @@ +{ + "Provider": "vercel", + "CheckID": "domain_dns_properly_configured", + "CheckTitle": "Vercel domain DNS records are properly configured", + "CheckType": [], + "ServiceName": "domain", + "SubServiceName": "", + "ResourceIdTemplate": "", + "Severity": "medium", + "ResourceType": "NotDefined", + "ResourceGroup": "network", + "Description": "**Vercel domains** are assessed for **DNS configuration** to verify records properly point to Vercel's infrastructure. Misconfigured DNS can result in domains that fail to serve content, SSL certificate provisioning failures, and degraded user experience.", + "Risk": "**Misconfigured DNS records** can cause the domain to be unreachable, preventing users from accessing the application. It can also prevent **SSL certificate provisioning**, resulting in browser security warnings. Stale DNS configurations may point to decommissioned infrastructure, creating a risk of **subdomain takeover**.", + "RelatedUrl": "", + "AdditionalURLs": [ + "https://vercel.com/docs/projects/domains" + ], + "Remediation": { + "Code": { + "CLI": "", + "NativeIaC": "", + "Other": "1. Sign in to the Vercel dashboard\n2. Navigate to the project Settings > Domains\n3. Review the DNS configuration status for each domain\n4. Update DNS records at your domain registrar to match the values shown in the Vercel dashboard\n5. Wait for DNS propagation (typically 24-48 hours)", + "Terraform": "" + }, + "Recommendation": { + "Text": "Update DNS records at your domain registrar to correctly point to Vercel. Use a CNAME record for subdomains or an A record for apex domains. Verify the configuration in the Vercel dashboard after making changes.", + "Url": "https://hub.prowler.com/checks/vercel/domain_dns_properly_configured" + } + }, + "Categories": [ + "trust-boundaries" + ], + "DependsOn": [], + "RelatedTo": [ + "domain_verified", + "domain_ssl_certificate_valid" + ], + "Notes": "" +} diff --git a/prowler/providers/vercel/services/domain/domain_dns_properly_configured/domain_dns_properly_configured.py b/prowler/providers/vercel/services/domain/domain_dns_properly_configured/domain_dns_properly_configured.py new file mode 100644 index 0000000000..1e3f91c394 --- /dev/null +++ b/prowler/providers/vercel/services/domain/domain_dns_properly_configured/domain_dns_properly_configured.py @@ -0,0 +1,45 @@ +from typing import List + +from prowler.lib.check.models import Check, CheckReportVercel +from prowler.providers.vercel.services.domain.domain_client import domain_client + + +class domain_dns_properly_configured(Check): + """Check if domains have DNS properly configured. + + This class verifies whether each Vercel domain has its DNS records + properly configured to point to Vercel's infrastructure. + """ + + def execute(self) -> List[CheckReportVercel]: + """Execute the Vercel Domain DNS Configuration check. + + Iterates over all domains and checks if DNS is properly configured. + + Returns: + List[CheckReportVercel]: A list of reports for each domain. + """ + findings = [] + for domain in domain_client.domains.values(): + report = CheckReportVercel( + metadata=self.metadata(), + resource=domain, + resource_name=domain.name, + resource_id=domain.id or domain.name, + ) + + if domain.configured: + report.status = "PASS" + report.status_extended = ( + f"Domain {domain.name} has DNS properly configured." + ) + else: + report.status = "FAIL" + report.status_extended = ( + f"Domain {domain.name} does not have DNS properly configured. " + f"The domain may not be resolving to Vercel's infrastructure." + ) + + findings.append(report) + + return findings diff --git a/prowler/providers/vercel/services/domain/domain_service.py b/prowler/providers/vercel/services/domain/domain_service.py new file mode 100644 index 0000000000..9b3dba644a --- /dev/null +++ b/prowler/providers/vercel/services/domain/domain_service.py @@ -0,0 +1,124 @@ +from datetime import datetime, timezone +from typing import Optional + +from pydantic import BaseModel, Field + +from prowler.lib.logger import logger +from prowler.providers.vercel.lib.service.service import VercelService + + +class Domain(VercelService): + """Retrieve Vercel domains with DNS and SSL information.""" + + def __init__(self, provider): + super().__init__("Domain", provider) + self.domains: dict[str, VercelDomain] = {} + self._list_domains() + self.__threading_call__(self._fetch_dns_records, list(self.domains.values())) + self.__threading_call__( + self._fetch_ssl_certificate, list(self.domains.values()) + ) + + def _list_domains(self): + """List all domains.""" + try: + raw_domains = self._paginate("/v5/domains", "domains") + + seen_names: set[str] = set() + + for domain in raw_domains: + domain_name = domain.get("name", "") + if not domain_name or domain_name in seen_names: + continue + seen_names.add(domain_name) + + self.domains[domain_name] = VercelDomain( + name=domain_name, + id=domain.get("id", domain_name), + apex_name=domain.get("apexName"), + verified=domain.get("verified", False), + configured=( + domain.get("configured", False) + if "configured" in domain + else domain.get("verified", False) + ), + redirect=domain.get("redirect"), + team_id=self.provider.session.team_id, + ) + + logger.info(f"Domain - Found {len(self.domains)} domain(s)") + + except Exception as error: + logger.error( + f"Domain - Error listing domains: " + f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" + ) + + def _fetch_dns_records(self, domain: "VercelDomain"): + """Fetch DNS records for a single domain.""" + try: + data = self._get(f"/v4/domains/{domain.name}/records") + if data and "records" in data: + domain.dns_records = data["records"] + logger.debug( + f"Domain - Fetched {len(domain.dns_records)} DNS records for {domain.name}" + ) + except Exception as error: + logger.error( + f"Domain - Error fetching DNS records for {domain.name}: " + f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" + ) + + def _fetch_ssl_certificate(self, domain: "VercelDomain"): + """Fetch SSL certificate for a domain via the certs endpoint.""" + try: + data = self._get(f"/v8/certs/{domain.name}") + if data: + expires_at_ms = data.get("expiresAt") + created_at_ms = data.get("createdAt") + domain.ssl_certificate = VercelSSLCertificate( + id=data.get("id", ""), + created_at=( + datetime.fromtimestamp(created_at_ms / 1000, tz=timezone.utc) + if created_at_ms + else None + ), + expires_at=( + datetime.fromtimestamp(expires_at_ms / 1000, tz=timezone.utc) + if expires_at_ms + else None + ), + auto_renew=data.get("autoRenew", False), + cns=data.get("cns", []), + ) + logger.debug(f"Domain - Fetched SSL certificate for {domain.name}") + except Exception as error: + logger.error( + f"Domain - Error fetching SSL certificate for {domain.name}: " + f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" + ) + + +class VercelSSLCertificate(BaseModel): + """Vercel SSL certificate representation.""" + + id: str = "" + created_at: Optional[datetime] = None + expires_at: Optional[datetime] = None + auto_renew: bool = False + cns: list[str] = Field(default_factory=list) + + +class VercelDomain(BaseModel): + """Vercel domain representation.""" + + name: str + id: str = "" + apex_name: Optional[str] = None + verified: bool = False + configured: bool = False + ssl_certificate: Optional[VercelSSLCertificate] = None + redirect: Optional[str] = None + dns_records: list[dict] = Field(default_factory=list) + team_id: Optional[str] = None + project_id: Optional[str] = None diff --git a/prowler/providers/vercel/services/domain/domain_ssl_certificate_valid/__init__.py b/prowler/providers/vercel/services/domain/domain_ssl_certificate_valid/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/domain/domain_ssl_certificate_valid/domain_ssl_certificate_valid.metadata.json b/prowler/providers/vercel/services/domain/domain_ssl_certificate_valid/domain_ssl_certificate_valid.metadata.json new file mode 100644 index 0000000000..f15892df61 --- /dev/null +++ b/prowler/providers/vercel/services/domain/domain_ssl_certificate_valid/domain_ssl_certificate_valid.metadata.json @@ -0,0 +1,39 @@ +{ + "Provider": "vercel", + "CheckID": "domain_ssl_certificate_valid", + "CheckTitle": "Vercel domains have a valid, non-expired SSL certificate", + "CheckType": [], + "ServiceName": "domain", + "SubServiceName": "", + "ResourceIdTemplate": "", + "Severity": "critical", + "ResourceType": "NotDefined", + "ResourceGroup": "network", + "Description": "**Vercel domains** are assessed for **SSL certificate validity** including provisioning, expiration, and upcoming expiry. Vercel automatically provisions and renews SSL certificates for properly configured domains. A missing, expired, or soon-to-expire certificate indicates a configuration issue that may leave traffic unencrypted.", + "Risk": "Without an **SSL certificate**, traffic between users and the domain is transmitted in **plain text**. This exposes sensitive data such as authentication tokens, form submissions, and personal information to interception via **man-in-the-middle attacks**. Search engines also penalize non-HTTPS sites, reducing visibility.", + "RelatedUrl": "", + "AdditionalURLs": [ + "https://vercel.com/docs/security/encryption" + ], + "Remediation": { + "Code": { + "CLI": "", + "NativeIaC": "", + "Other": "1. Sign in to the Vercel dashboard\n2. Navigate to the project Settings > Domains\n3. Verify the domain's DNS records point to Vercel correctly\n4. Vercel will automatically provision an SSL certificate once DNS is properly configured\n5. If issues persist, remove and re-add the domain", + "Terraform": "" + }, + "Recommendation": { + "Text": "Ensure domain DNS records are properly configured to point to Vercel. Once DNS is validated, Vercel automatically provisions and renews SSL/TLS certificates. Check the domain configuration in the Vercel dashboard if the certificate is not being issued.", + "Url": "https://hub.prowler.com/checks/vercel/domain_ssl_certificate_valid" + } + }, + "Categories": [ + "encryption" + ], + "DependsOn": [], + "RelatedTo": [ + "domain_verified", + "domain_dns_properly_configured" + ], + "Notes": "" +} diff --git a/prowler/providers/vercel/services/domain/domain_ssl_certificate_valid/domain_ssl_certificate_valid.py b/prowler/providers/vercel/services/domain/domain_ssl_certificate_valid/domain_ssl_certificate_valid.py new file mode 100644 index 0000000000..f4e61e6675 --- /dev/null +++ b/prowler/providers/vercel/services/domain/domain_ssl_certificate_valid/domain_ssl_certificate_valid.py @@ -0,0 +1,78 @@ +from datetime import datetime, timezone +from typing import List + +from prowler.lib.check.models import Check, CheckReportVercel, Severity +from prowler.providers.vercel.services.domain.domain_client import domain_client + + +class domain_ssl_certificate_valid(Check): + """Check if domains have a valid, non-expired SSL certificate. + + This class verifies whether each Vercel domain has an SSL certificate + that is provisioned, not expired, and not about to expire. The + expiration threshold is configurable via ``days_to_expire_threshold`` + in audit_config (default: 7 days). + """ + + def execute(self) -> List[CheckReportVercel]: + """Execute the Vercel Domain SSL Certificate check. + + Iterates over all domains and checks SSL certificate presence and + expiration status. + + Returns: + List[CheckReportVercel]: A list of reports for each domain. + """ + findings = [] + now = datetime.now(timezone.utc) + days_to_expire_threshold = domain_client.audit_config.get( + "days_to_expire_threshold", 7 + ) + + for domain in domain_client.domains.values(): + report = CheckReportVercel( + metadata=self.metadata(), + resource=domain, + resource_name=domain.name, + resource_id=domain.id or domain.name, + ) + + if domain.ssl_certificate is None: + report.status = "FAIL" + report.check_metadata.Severity = Severity.high + report.status_extended = f"Domain {domain.name} does not have an SSL certificate provisioned." + elif ( + domain.ssl_certificate.expires_at is not None + and domain.ssl_certificate.expires_at <= now + ): + report.status = "FAIL" + report.check_metadata.Severity = Severity.critical + report.status_extended = ( + f"Domain {domain.name} has an SSL certificate that expired " + f"on {domain.ssl_certificate.expires_at.strftime('%Y-%m-%d %H:%M UTC')}." + ) + elif domain.ssl_certificate.expires_at is not None: + days_left = (domain.ssl_certificate.expires_at - now).days + if days_left <= days_to_expire_threshold: + report.status = "FAIL" + report.check_metadata.Severity = Severity.high + report.status_extended = ( + f"Domain {domain.name} has an SSL certificate expiring " + f"in {days_left} days " + f"on {domain.ssl_certificate.expires_at.strftime('%Y-%m-%d %H:%M UTC')}." + ) + else: + report.status = "PASS" + report.status_extended = ( + f"Domain {domain.name} has a valid SSL certificate expiring " + f"on {domain.ssl_certificate.expires_at.strftime('%Y-%m-%d %H:%M UTC')}." + ) + else: + report.status = "PASS" + report.status_extended = ( + f"Domain {domain.name} has an SSL certificate provisioned." + ) + + findings.append(report) + + return findings diff --git a/prowler/providers/vercel/services/domain/domain_verified/__init__.py b/prowler/providers/vercel/services/domain/domain_verified/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/domain/domain_verified/domain_verified.metadata.json b/prowler/providers/vercel/services/domain/domain_verified/domain_verified.metadata.json new file mode 100644 index 0000000000..f520fb00d8 --- /dev/null +++ b/prowler/providers/vercel/services/domain/domain_verified/domain_verified.metadata.json @@ -0,0 +1,39 @@ +{ + "Provider": "vercel", + "CheckID": "domain_verified", + "CheckTitle": "Vercel domains are verified", + "CheckType": [], + "ServiceName": "domain", + "SubServiceName": "", + "ResourceIdTemplate": "", + "Severity": "high", + "ResourceType": "NotDefined", + "ResourceGroup": "network", + "Description": "**Vercel domains** are assessed for **ownership verification** status. Unverified domains may not serve traffic correctly and could indicate a pending or incomplete domain setup. Domain verification confirms that the domain owner has authorized Vercel to manage the domain.", + "Risk": "**Unverified domains** may fail to resolve or serve content, causing **downtime** for users. An unverified domain could also indicate a stale or orphaned configuration, or a domain that was added but never properly transferred, creating potential for **domain takeover** if the ownership verification is left incomplete.", + "RelatedUrl": "", + "AdditionalURLs": [ + "https://vercel.com/docs/projects/domains" + ], + "Remediation": { + "Code": { + "CLI": "", + "NativeIaC": "", + "Other": "1. Sign in to the Vercel dashboard\n2. Navigate to the project Settings > Domains\n3. For any unverified domain, follow the verification steps shown\n4. Add the required DNS records (CNAME or A record) at your domain registrar\n5. Wait for DNS propagation and verify the domain", + "Terraform": "" + }, + "Recommendation": { + "Text": "Complete domain verification by configuring the required DNS records at your domain registrar. Remove any domains that are no longer needed to reduce the attack surface. Regularly audit domain configurations to ensure all domains remain verified.", + "Url": "https://hub.prowler.com/checks/vercel/domain_verified" + } + }, + "Categories": [ + "trust-boundaries" + ], + "DependsOn": [], + "RelatedTo": [ + "domain_dns_properly_configured", + "domain_ssl_certificate_valid" + ], + "Notes": "" +} diff --git a/prowler/providers/vercel/services/domain/domain_verified/domain_verified.py b/prowler/providers/vercel/services/domain/domain_verified/domain_verified.py new file mode 100644 index 0000000000..b6589b873e --- /dev/null +++ b/prowler/providers/vercel/services/domain/domain_verified/domain_verified.py @@ -0,0 +1,44 @@ +from typing import List + +from prowler.lib.check.models import Check, CheckReportVercel +from prowler.providers.vercel.services.domain.domain_client import domain_client + + +class domain_verified(Check): + """Check if domains have been verified by Vercel. + + This class verifies whether each Vercel domain has passed ownership + verification. Unverified domains may not function correctly and could + indicate domain misconfiguration or hijacking attempts. + """ + + def execute(self) -> List[CheckReportVercel]: + """Execute the Vercel Domain Verified check. + + Iterates over all domains and checks if each is verified. + + Returns: + List[CheckReportVercel]: A list of reports for each domain. + """ + findings = [] + for domain in domain_client.domains.values(): + report = CheckReportVercel( + metadata=self.metadata(), + resource=domain, + resource_name=domain.name, + resource_id=domain.id or domain.name, + ) + + if domain.verified: + report.status = "PASS" + report.status_extended = f"Domain {domain.name} is verified." + else: + report.status = "FAIL" + report.status_extended = ( + f"Domain {domain.name} is not verified. " + f"The domain may not be serving traffic correctly." + ) + + findings.append(report) + + return findings diff --git a/prowler/providers/vercel/services/project/__init__.py b/prowler/providers/vercel/services/project/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/project/project_auto_expose_system_env_disabled/__init__.py b/prowler/providers/vercel/services/project/project_auto_expose_system_env_disabled/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/project/project_auto_expose_system_env_disabled/project_auto_expose_system_env_disabled.metadata.json b/prowler/providers/vercel/services/project/project_auto_expose_system_env_disabled/project_auto_expose_system_env_disabled.metadata.json new file mode 100644 index 0000000000..bf7adc2832 --- /dev/null +++ b/prowler/providers/vercel/services/project/project_auto_expose_system_env_disabled/project_auto_expose_system_env_disabled.metadata.json @@ -0,0 +1,36 @@ +{ + "Provider": "vercel", + "CheckID": "project_auto_expose_system_env_disabled", + "CheckTitle": "Vercel project has automatic exposure of system environment variables disabled", + "CheckType": [], + "ServiceName": "project", + "SubServiceName": "", + "ResourceIdTemplate": "", + "Severity": "medium", + "ResourceType": "NotDefined", + "ResourceGroup": "security", + "Description": "**Vercel projects** are assessed for **automatic system environment variable exposure** (`VERCEL_URL`, `VERCEL_ENV`, `VERCEL_GIT_COMMIT_SHA`). When enabled, these variables are injected into every deployment and may be accessible in client-side JavaScript bundles if not handled carefully, leaking internal infrastructure details.", + "Risk": "Automatically exposed **system environment variables** can reveal deployment URLs, Git metadata, environment names, and other internal details. If these values are inadvertently included in **client-side bundles**, attackers can use them to map infrastructure, identify staging environments, or craft targeted attacks against specific deployment instances.", + "RelatedUrl": "", + "AdditionalURLs": [ + "https://vercel.com/docs/projects/environment-variables/system-environment-variables" + ], + "Remediation": { + "Code": { + "CLI": "", + "NativeIaC": "", + "Other": "1. Sign in to the Vercel dashboard\n2. Navigate to the project Settings > Environment Variables\n3. Locate the 'Automatically expose System Environment Variables' toggle\n4. Disable the toggle\n5. Manually add only the specific system variables your application needs", + "Terraform": "" + }, + "Recommendation": { + "Text": "Disable automatic exposure of system environment variables and explicitly define only the variables required by your application. This follows the principle of least privilege and reduces the risk of leaking internal infrastructure details through client-side code.", + "Url": "https://hub.prowler.com/checks/vercel/project_auto_expose_system_env_disabled" + } + }, + "Categories": [ + "trust-boundaries" + ], + "DependsOn": [], + "RelatedTo": [], + "Notes": "" +} diff --git a/prowler/providers/vercel/services/project/project_auto_expose_system_env_disabled/project_auto_expose_system_env_disabled.py b/prowler/providers/vercel/services/project/project_auto_expose_system_env_disabled/project_auto_expose_system_env_disabled.py new file mode 100644 index 0000000000..e2d12ceab9 --- /dev/null +++ b/prowler/providers/vercel/services/project/project_auto_expose_system_env_disabled/project_auto_expose_system_env_disabled.py @@ -0,0 +1,42 @@ +from typing import List + +from prowler.lib.check.models import Check, CheckReportVercel +from prowler.providers.vercel.services.project.project_client import project_client + + +class project_auto_expose_system_env_disabled(Check): + """Check if automatic exposure of system environment variables is disabled. + + This class verifies whether each Vercel project has the automatic exposure + of system environment variables disabled to prevent information leakage. + """ + + def execute(self) -> List[CheckReportVercel]: + """Execute the Vercel Project Auto Expose System Env check. + + Iterates over all projects and checks if automatic exposure of system + environment variables is disabled. + + Returns: + List[CheckReportVercel]: A list of reports for each project. + """ + findings = [] + for project in project_client.projects.values(): + report = CheckReportVercel(metadata=self.metadata(), resource=project) + + if not project.auto_expose_system_envs: + report.status = "PASS" + report.status_extended = ( + f"Project {project.name} does not automatically expose " + f"system environment variables to the build process." + ) + else: + report.status = "FAIL" + report.status_extended = ( + f"Project {project.name} automatically exposes system " + f"environment variables to the build process." + ) + + findings.append(report) + + return findings diff --git a/prowler/providers/vercel/services/project/project_client.py b/prowler/providers/vercel/services/project/project_client.py new file mode 100644 index 0000000000..571180d3e7 --- /dev/null +++ b/prowler/providers/vercel/services/project/project_client.py @@ -0,0 +1,4 @@ +from prowler.providers.common.provider import Provider +from prowler.providers.vercel.services.project.project_service import Project + +project_client = Project(Provider.get_global_provider()) diff --git a/prowler/providers/vercel/services/project/project_deployment_protection_enabled/__init__.py b/prowler/providers/vercel/services/project/project_deployment_protection_enabled/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/project/project_deployment_protection_enabled/project_deployment_protection_enabled.metadata.json b/prowler/providers/vercel/services/project/project_deployment_protection_enabled/project_deployment_protection_enabled.metadata.json new file mode 100644 index 0000000000..c704b42784 --- /dev/null +++ b/prowler/providers/vercel/services/project/project_deployment_protection_enabled/project_deployment_protection_enabled.metadata.json @@ -0,0 +1,38 @@ +{ + "Provider": "vercel", + "CheckID": "project_deployment_protection_enabled", + "CheckTitle": "Vercel project has deployment protection enabled on preview deployments", + "CheckType": [], + "ServiceName": "project", + "SubServiceName": "", + "ResourceIdTemplate": "", + "Severity": "high", + "ResourceType": "NotDefined", + "ResourceGroup": "security", + "Description": "**Vercel projects** are assessed for **deployment protection** configuration, which restricts access to preview deployments by requiring authentication before visitors can view them. When disabled, anyone with the preview URL can access in-progress or staging versions of the application, potentially exposing unreleased features, debug information, or internal endpoints.", + "Risk": "Without **deployment protection** on preview deployments, any person who obtains or guesses a preview URL can view **unreleased application code**, test data, or internal API endpoints. This increases the attack surface and may leak sensitive business logic or credentials embedded in preview builds.", + "RelatedUrl": "", + "AdditionalURLs": [ + "https://vercel.com/docs/security/deployment-protection" + ], + "Remediation": { + "Code": { + "CLI": "", + "NativeIaC": "", + "Other": "1. Sign in to the Vercel dashboard\n2. Navigate to the project Settings > General\n3. Scroll to Deployment Protection\n4. Under Preview deployments, select 'Standard Protection' or 'Vercel Authentication'\n5. Click Save", + "Terraform": "" + }, + "Recommendation": { + "Text": "Enable deployment protection on preview deployments to require authentication before visitors can access preview URLs. Use 'Standard Protection' for Vercel Authentication or configure trusted IP ranges for more granular control.", + "Url": "https://hub.prowler.com/checks/vercel/project_deployment_protection_enabled" + } + }, + "Categories": [ + "internet-exposed" + ], + "DependsOn": [], + "RelatedTo": [ + "project_production_deployment_protection_enabled" + ], + "Notes": "" +} diff --git a/prowler/providers/vercel/services/project/project_deployment_protection_enabled/project_deployment_protection_enabled.py b/prowler/providers/vercel/services/project/project_deployment_protection_enabled/project_deployment_protection_enabled.py new file mode 100644 index 0000000000..b9966b27db --- /dev/null +++ b/prowler/providers/vercel/services/project/project_deployment_protection_enabled/project_deployment_protection_enabled.py @@ -0,0 +1,45 @@ +from typing import List + +from prowler.lib.check.models import Check, CheckReportVercel +from prowler.providers.vercel.services.project.project_client import project_client + + +class project_deployment_protection_enabled(Check): + """Check if deployment protection is enabled on preview deployments. + + This class verifies whether each Vercel project has deployment protection + configured for preview deployments to prevent unauthorized access. + """ + + def execute(self) -> List[CheckReportVercel]: + """Execute the Vercel Project Deployment Protection check. + + Iterates over all projects and checks if deployment protection is enabled + on preview deployments. + + Returns: + List[CheckReportVercel]: A list of reports for each project. + """ + findings = [] + for project in project_client.projects.values(): + report = CheckReportVercel(metadata=self.metadata(), resource=project) + + if ( + project.deployment_protection is not None + and project.deployment_protection.level != "none" + ): + report.status = "PASS" + report.status_extended = ( + f"Project {project.name} has deployment protection enabled " + f"with level '{project.deployment_protection.level}' on preview deployments." + ) + else: + report.status = "FAIL" + report.status_extended = ( + f"Project {project.name} does not have deployment protection " + f"enabled on preview deployments." + ) + + findings.append(report) + + return findings diff --git a/prowler/providers/vercel/services/project/project_directory_listing_disabled/__init__.py b/prowler/providers/vercel/services/project/project_directory_listing_disabled/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/project/project_directory_listing_disabled/project_directory_listing_disabled.metadata.json b/prowler/providers/vercel/services/project/project_directory_listing_disabled/project_directory_listing_disabled.metadata.json new file mode 100644 index 0000000000..b9de49aa0e --- /dev/null +++ b/prowler/providers/vercel/services/project/project_directory_listing_disabled/project_directory_listing_disabled.metadata.json @@ -0,0 +1,36 @@ +{ + "Provider": "vercel", + "CheckID": "project_directory_listing_disabled", + "CheckTitle": "Vercel project has directory listing disabled", + "CheckType": [], + "ServiceName": "project", + "SubServiceName": "", + "ResourceIdTemplate": "", + "Severity": "medium", + "ResourceType": "NotDefined", + "ResourceGroup": "security", + "Description": "**Vercel projects** are assessed for **directory listing** configuration. When enabled, this feature allows visitors to browse the file structure of a deployment when no index file is present in a directory, potentially exposing source files, configuration files, and other assets that should not be publicly accessible.", + "Risk": "Enabled **directory listing** allows attackers to enumerate the file structure of the deployment, potentially discovering backup files, configuration files, source maps, or other **sensitive assets**. This information disclosure can be leveraged to identify attack vectors or access files that were not intended to be public.", + "RelatedUrl": "", + "AdditionalURLs": [ + "https://vercel.com/docs/projects/project-configuration" + ], + "Remediation": { + "Code": { + "CLI": "", + "NativeIaC": "", + "Other": "1. Sign in to the Vercel dashboard\n2. Navigate to the project Settings > General\n3. Locate the 'Directory Listing' option\n4. Ensure it is disabled\n5. Click Save", + "Terraform": "" + }, + "Recommendation": { + "Text": "Disable directory listing to prevent visitors from browsing the file structure of your deployments. Ensure that all directories either contain an index file or return a 404 response when accessed directly.", + "Url": "https://hub.prowler.com/checks/vercel/project_directory_listing_disabled" + } + }, + "Categories": [ + "internet-exposed" + ], + "DependsOn": [], + "RelatedTo": [], + "Notes": "" +} diff --git a/prowler/providers/vercel/services/project/project_directory_listing_disabled/project_directory_listing_disabled.py b/prowler/providers/vercel/services/project/project_directory_listing_disabled/project_directory_listing_disabled.py new file mode 100644 index 0000000000..57405fe43e --- /dev/null +++ b/prowler/providers/vercel/services/project/project_directory_listing_disabled/project_directory_listing_disabled.py @@ -0,0 +1,40 @@ +from typing import List + +from prowler.lib.check.models import Check, CheckReportVercel +from prowler.providers.vercel.services.project.project_client import project_client + + +class project_directory_listing_disabled(Check): + """Check if directory listing is disabled for the project. + + This class verifies whether each Vercel project has directory listing + disabled to prevent exposure of the project's file structure. + """ + + def execute(self) -> List[CheckReportVercel]: + """Execute the Vercel Project Directory Listing check. + + Iterates over all projects and checks if directory listing is disabled. + + Returns: + List[CheckReportVercel]: A list of reports for each project. + """ + findings = [] + for project in project_client.projects.values(): + report = CheckReportVercel(metadata=self.metadata(), resource=project) + + if not project.directory_listing: + report.status = "PASS" + report.status_extended = ( + f"Project {project.name} has directory listing disabled." + ) + else: + report.status = "FAIL" + report.status_extended = ( + f"Project {project.name} has directory listing enabled, " + f"which may expose the project's file structure to visitors." + ) + + findings.append(report) + + return findings diff --git a/prowler/providers/vercel/services/project/project_environment_no_overly_broad_target/__init__.py b/prowler/providers/vercel/services/project/project_environment_no_overly_broad_target/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/project/project_environment_no_overly_broad_target/project_environment_no_overly_broad_target.metadata.json b/prowler/providers/vercel/services/project/project_environment_no_overly_broad_target/project_environment_no_overly_broad_target.metadata.json new file mode 100644 index 0000000000..2467c1b104 --- /dev/null +++ b/prowler/providers/vercel/services/project/project_environment_no_overly_broad_target/project_environment_no_overly_broad_target.metadata.json @@ -0,0 +1,38 @@ +{ + "Provider": "vercel", + "CheckID": "project_environment_no_overly_broad_target", + "CheckTitle": "Vercel project has no environment variables targeting all three environments", + "CheckType": [], + "ServiceName": "project", + "SubServiceName": "", + "ResourceIdTemplate": "", + "Severity": "medium", + "ResourceType": "NotDefined", + "ResourceGroup": "security", + "Description": "**Vercel project environment variables** are assessed for **overly broad targeting** by checking whether any variable targets all three environments (production, preview, development) simultaneously, which violates the principle of least privilege.", + "Risk": "Environment variables targeting **all environments** share the same values across production, preview, and development, increasing **blast radius** if credentials are compromised. Production secrets are exposed to weaker environments, making it harder to isolate and track unauthorized changes.", + "RelatedUrl": "", + "AdditionalURLs": [ + "https://vercel.com/docs/environment-variables" + ], + "Remediation": { + "Code": { + "CLI": "", + "NativeIaC": "", + "Other": "1. Navigate to your Vercel project dashboard\n2. Go to Settings > Environment Variables\n3. Identify variables that target all three environments (Production, Preview, Development)\n4. Edit each variable to target only the specific environments where it is needed\n5. Create separate variables with environment-specific values where different credentials are needed per environment", + "Terraform": "" + }, + "Recommendation": { + "Text": "Follow the **principle of least privilege** for environment variable targeting.\n- Assign each variable to only the environments where it is actually needed\n- Use different credentials for production, preview, and development environments\n- Non-sensitive configuration (e.g. feature flags, public URLs) may be acceptable in multiple environments but should still be reviewed\n- Regularly audit environment variable targets to prevent scope creep", + "Url": "https://hub.prowler.com/checks/vercel/project_environment_no_overly_broad_target" + } + }, + "Categories": [ + "secrets" + ], + "DependsOn": [], + "RelatedTo": [ + "project_environment_production_vars_not_in_preview" + ], + "Notes": "This check flags any variable targeting all three environments regardless of its type. Even non-sensitive configuration shared across all environments may indicate a lack of environment-specific configuration management." +} diff --git a/prowler/providers/vercel/services/project/project_environment_no_overly_broad_target/project_environment_no_overly_broad_target.py b/prowler/providers/vercel/services/project/project_environment_no_overly_broad_target/project_environment_no_overly_broad_target.py new file mode 100644 index 0000000000..d62d88d965 --- /dev/null +++ b/prowler/providers/vercel/services/project/project_environment_no_overly_broad_target/project_environment_no_overly_broad_target.py @@ -0,0 +1,54 @@ +from typing import List + +from prowler.lib.check.models import Check, CheckReportVercel +from prowler.providers.vercel.services.project.project_client import project_client + +ALL_ENVIRONMENTS = {"production", "preview", "development"} + + +class project_environment_no_overly_broad_target(Check): + """Check that no environment variables target all three environments simultaneously. + + This class verifies that environment variables are not configured to target + production, preview, and development environments at the same time, which + violates the principle of least privilege and may expose production secrets + to development and preview contexts. + """ + + def execute(self) -> List[CheckReportVercel]: + """Execute the no-overly-broad-target check. + + Iterates over all projects and inspects each environment variable, + flagging any that target all three environments (production, preview, + and development) simultaneously. + + Returns: + List[CheckReportVercel]: A list of reports for each project. + """ + findings = [] + for project in project_client.projects.values(): + report = CheckReportVercel(metadata=self.metadata(), resource=project) + + broad_keys = [] + for env_var in project.environment_variables: + targets = {t.lower() for t in env_var.target} + if ALL_ENVIRONMENTS.issubset(targets): + broad_keys.append(env_var.key) + + if broad_keys: + report.status = "FAIL" + report.status_extended = ( + f"Project {project.name} has {len(broad_keys)} environment " + f"variable(s) targeting all three environments: " + f"{', '.join(broad_keys)}." + ) + else: + report.status = "PASS" + report.status_extended = ( + f"Project {project.name} has no environment variables targeting " + f"all three environments simultaneously." + ) + + findings.append(report) + + return findings diff --git a/prowler/providers/vercel/services/project/project_environment_no_secrets_in_plain_type/__init__.py b/prowler/providers/vercel/services/project/project_environment_no_secrets_in_plain_type/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/project/project_environment_no_secrets_in_plain_type/project_environment_no_secrets_in_plain_type.metadata.json b/prowler/providers/vercel/services/project/project_environment_no_secrets_in_plain_type/project_environment_no_secrets_in_plain_type.metadata.json new file mode 100644 index 0000000000..f8d5621914 --- /dev/null +++ b/prowler/providers/vercel/services/project/project_environment_no_secrets_in_plain_type/project_environment_no_secrets_in_plain_type.metadata.json @@ -0,0 +1,38 @@ +{ + "Provider": "vercel", + "CheckID": "project_environment_no_secrets_in_plain_type", + "CheckTitle": "Vercel project has no secret-like environment variables stored as plain text", + "CheckType": [], + "ServiceName": "project", + "SubServiceName": "", + "ResourceIdTemplate": "", + "Severity": "high", + "ResourceType": "NotDefined", + "ResourceGroup": "security", + "Description": "**Vercel project environment variables** are assessed for **secret exposure** by checking whether variables with secret-like name suffixes (`*_KEY`, `*_SECRET`, `*_TOKEN`, `*_PASSWORD`, `*_API_KEY`, `*_PRIVATE_KEY`) are stored using the `plain` type, which makes their values readable.", + "Risk": "Secrets stored as **plain text** environment variables are visible to all team members with project access and may appear in API responses. Plaintext secrets can be read through the Vercel dashboard or API, enabling **unauthorized modification** of connected services or disruption of integrations.", + "RelatedUrl": "", + "AdditionalURLs": [ + "https://vercel.com/docs/environment-variables" + ], + "Remediation": { + "Code": { + "CLI": "", + "NativeIaC": "", + "Other": "1. Navigate to your Vercel project dashboard\n2. Go to Settings > Environment Variables\n3. Identify any variables ending in _KEY, _SECRET, _TOKEN, _PASSWORD, _API_KEY, or _PRIVATE_KEY that are stored as 'Plain'\n4. Delete the plain-text variable\n5. Re-create it using the 'Sensitive' type to ensure the value is encrypted and write-only", + "Terraform": "" + }, + "Recommendation": { + "Text": "Use the **Sensitive** type for all environment variables that contain secrets, keys, tokens, or passwords.\n- Sensitive variables are never exposed in the dashboard or API responses after creation\n- Rotate all credentials that were previously stored as plain text\n- Implement naming conventions that make it easy to identify secret variables", + "Url": "https://hub.prowler.com/checks/vercel/project_environment_no_secrets_in_plain_type" + } + }, + "Categories": [ + "secrets" + ], + "DependsOn": [], + "RelatedTo": [ + "project_environment_production_vars_not_in_preview" + ], + "Notes": "This check uses suffix-based matching on variable names (_KEY, _SECRET, _TOKEN, _PASSWORD, _API_KEY, _PRIVATE_KEY) to identify likely secrets." +} diff --git a/prowler/providers/vercel/services/project/project_environment_no_secrets_in_plain_type/project_environment_no_secrets_in_plain_type.py b/prowler/providers/vercel/services/project/project_environment_no_secrets_in_plain_type/project_environment_no_secrets_in_plain_type.py new file mode 100644 index 0000000000..904e592575 --- /dev/null +++ b/prowler/providers/vercel/services/project/project_environment_no_secrets_in_plain_type/project_environment_no_secrets_in_plain_type.py @@ -0,0 +1,68 @@ +from typing import List + +from prowler.lib.check.models import Check, CheckReportVercel +from prowler.providers.vercel.services.project.project_client import project_client + +DEFAULT_SECRET_SUFFIXES = [ + "_KEY", + "_SECRET", + "_TOKEN", + "_PASSWORD", + "_API_KEY", + "_PRIVATE_KEY", +] + + +class project_environment_no_secrets_in_plain_type(Check): + """Check that no environment variables with secret-like name suffixes are stored as plain text. + + This class verifies that environment variables whose names end with + configurable secret suffixes are not stored with the "plain" type, + which makes their values readable in the dashboard and API responses. + The suffix list is configurable via ``secret_suffixes`` in audit_config. + """ + + def execute(self) -> List[CheckReportVercel]: + """Execute the no-secrets-in-plain-type check. + + Iterates over all projects and inspects each environment variable, + flagging any variable whose name ends with a known secret suffix and + is stored as "plain" type. + + Returns: + List[CheckReportVercel]: A list of reports for each project. + """ + findings = [] + secret_suffixes = project_client.audit_config.get( + "secret_suffixes", DEFAULT_SECRET_SUFFIXES + ) + # Normalize to uppercase tuples for efficient endswith matching + secret_suffixes_upper = tuple(s.upper() for s in secret_suffixes) + + for project in project_client.projects.values(): + report = CheckReportVercel(metadata=self.metadata(), resource=project) + + plain_secret_keys = [] + for env_var in project.environment_variables: + upper_key = env_var.key.upper() + if upper_key.endswith(secret_suffixes_upper): + if env_var.type == "plain": + plain_secret_keys.append(env_var.key) + + if plain_secret_keys: + report.status = "FAIL" + report.status_extended = ( + f"Project {project.name} has {len(plain_secret_keys)} secret-like " + f"environment variable(s) stored as plain text: " + f"{', '.join(plain_secret_keys)}." + ) + else: + report.status = "PASS" + report.status_extended = ( + f"Project {project.name} has no secret-like environment variables " + f"stored as plain text." + ) + + findings.append(report) + + return findings diff --git a/prowler/providers/vercel/services/project/project_environment_production_vars_not_in_preview/__init__.py b/prowler/providers/vercel/services/project/project_environment_production_vars_not_in_preview/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/project/project_environment_production_vars_not_in_preview/project_environment_production_vars_not_in_preview.metadata.json b/prowler/providers/vercel/services/project/project_environment_production_vars_not_in_preview/project_environment_production_vars_not_in_preview.metadata.json new file mode 100644 index 0000000000..55f468fa8a --- /dev/null +++ b/prowler/providers/vercel/services/project/project_environment_production_vars_not_in_preview/project_environment_production_vars_not_in_preview.metadata.json @@ -0,0 +1,39 @@ +{ + "Provider": "vercel", + "CheckID": "project_environment_production_vars_not_in_preview", + "CheckTitle": "Vercel sensitive production environment variables do not target preview", + "CheckType": [], + "ServiceName": "project", + "SubServiceName": "", + "ResourceIdTemplate": "", + "Severity": "medium", + "ResourceType": "NotDefined", + "ResourceGroup": "security", + "Description": "**Vercel project environment variables** are assessed for **environment separation** by checking whether sensitive variables (type `secret` or `encrypted`) that target the `production` environment also target `preview`, which could expose production credentials to untrusted preview builds.", + "Risk": "Preview deployments are often triggered by **pull requests**, including those from external contributors or forks. Sharing **production secrets** with preview environments can lead to credential theft. Production API keys and database credentials could be exfiltrated by malicious code in preview builds and used to modify or disrupt live services.", + "RelatedUrl": "", + "AdditionalURLs": [ + "https://vercel.com/docs/environment-variables" + ], + "Remediation": { + "Code": { + "CLI": "", + "NativeIaC": "", + "Other": "1. Navigate to your Vercel project dashboard\n2. Go to Settings > Environment Variables\n3. Identify sensitive variables (type Secret or Encrypted) that target both Production and Preview\n4. Edit each variable to remove the Preview target\n5. If preview builds require credentials, create separate variables with limited-scope preview-only credentials", + "Terraform": "" + }, + "Recommendation": { + "Text": "Maintain strict **environment separation** between production and preview deployments.\n- Use dedicated, limited-scope credentials for preview environments\n- Never share production database credentials, API keys, or signing keys with preview builds\n- Enable Vercel's deployment protection features to further restrict access to preview deployments\n- Regularly audit which environment variables target multiple environments", + "Url": "https://hub.prowler.com/checks/vercel/project_environment_production_vars_not_in_preview" + } + }, + "Categories": [ + "secrets" + ], + "DependsOn": [], + "RelatedTo": [ + "project_environment_no_secrets_in_plain_type", + "project_environment_no_overly_broad_target" + ], + "Notes": "This check only inspects variables with type 'secret' or 'encrypted' since these are the ones most likely to contain actual credentials. Plain-text variables with sensitive names should be caught by the project_environment_no_secrets_in_plain_type check." +} diff --git a/prowler/providers/vercel/services/project/project_environment_production_vars_not_in_preview/project_environment_production_vars_not_in_preview.py b/prowler/providers/vercel/services/project/project_environment_production_vars_not_in_preview/project_environment_production_vars_not_in_preview.py new file mode 100644 index 0000000000..ac84a08887 --- /dev/null +++ b/prowler/providers/vercel/services/project/project_environment_production_vars_not_in_preview/project_environment_production_vars_not_in_preview.py @@ -0,0 +1,55 @@ +from typing import List + +from prowler.lib.check.models import Check, CheckReportVercel +from prowler.providers.vercel.services.project.project_client import project_client + +SENSITIVE_TYPES = {"secret", "encrypted"} + + +class project_environment_production_vars_not_in_preview(Check): + """Check that sensitive production environment variables do not also target preview. + + This class verifies that environment variables using "secret" or "encrypted" + types that target "production" do not simultaneously target "preview" + deployments, which could expose production credentials to untrusted code + running in preview builds from pull requests. + """ + + def execute(self) -> List[CheckReportVercel]: + """Execute the production-vars-not-in-preview check. + + Iterates over all projects, inspects each environment variable with a + sensitive type (secret or encrypted), and flags any that target both + "production" and "preview" environments. + + Returns: + List[CheckReportVercel]: A list of reports for each project. + """ + findings = [] + for project in project_client.projects.values(): + report = CheckReportVercel(metadata=self.metadata(), resource=project) + + leaking_keys = [] + for env_var in project.environment_variables: + if env_var.type in SENSITIVE_TYPES: + targets = {t.lower() for t in env_var.target} + if "production" in targets and "preview" in targets: + leaking_keys.append(env_var.key) + + if leaking_keys: + report.status = "FAIL" + report.status_extended = ( + f"Project {project.name} has {len(leaking_keys)} sensitive " + f"production environment variable(s) also targeting preview: " + f"{', '.join(leaking_keys)}." + ) + else: + report.status = "PASS" + report.status_extended = ( + f"Project {project.name} has no sensitive production environment " + f"variables leaking to preview deployments." + ) + + findings.append(report) + + return findings diff --git a/prowler/providers/vercel/services/project/project_git_fork_protection_enabled/__init__.py b/prowler/providers/vercel/services/project/project_git_fork_protection_enabled/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/project/project_git_fork_protection_enabled/project_git_fork_protection_enabled.metadata.json b/prowler/providers/vercel/services/project/project_git_fork_protection_enabled/project_git_fork_protection_enabled.metadata.json new file mode 100644 index 0000000000..744a227d61 --- /dev/null +++ b/prowler/providers/vercel/services/project/project_git_fork_protection_enabled/project_git_fork_protection_enabled.metadata.json @@ -0,0 +1,36 @@ +{ + "Provider": "vercel", + "CheckID": "project_git_fork_protection_enabled", + "CheckTitle": "Vercel project has Git fork protection enabled to prevent untrusted forks from accessing secrets", + "CheckType": [], + "ServiceName": "project", + "SubServiceName": "", + "ResourceIdTemplate": "", + "Severity": "high", + "ResourceType": "NotDefined", + "ResourceGroup": "devops", + "Description": "**Vercel projects** are assessed for **Git fork protection** configuration, which controls whether pull requests from forked repositories can trigger deployments and access environment variables. When disabled, anyone who forks a public repository can submit a pull request that triggers a Vercel build with access to the project's environment variables, including secrets and API keys.", + "Risk": "Without **Git fork protection**, an attacker can fork a public repository, modify the build process to **exfiltrate environment variables** (API keys, database credentials, third-party tokens), and submit a pull request. The Vercel build triggered by the PR would execute the attacker's code with access to the project's secrets, leading to **credential theft** and potential full system compromise.", + "RelatedUrl": "", + "AdditionalURLs": [ + "https://vercel.com/docs/security/deployment-protection/managing-deployment-protection#git-fork-protection" + ], + "Remediation": { + "Code": { + "CLI": "", + "NativeIaC": "", + "Other": "1. Sign in to the Vercel dashboard\n2. Navigate to the project Settings > General\n3. Scroll to the 'Git Fork Protection' section\n4. Enable the option to require authorization for fork pull requests\n5. Click Save", + "Terraform": "" + }, + "Recommendation": { + "Text": "Enable Git fork protection to require explicit authorization before pull requests from forked repositories can trigger deployments. This prevents untrusted contributors from accessing environment variables and secrets through the build process. For open-source projects, review fork PRs manually before allowing builds.", + "Url": "https://hub.prowler.com/checks/vercel/project_git_fork_protection_enabled" + } + }, + "Categories": [ + "internet-exposed" + ], + "DependsOn": [], + "RelatedTo": [], + "Notes": "" +} diff --git a/prowler/providers/vercel/services/project/project_git_fork_protection_enabled/project_git_fork_protection_enabled.py b/prowler/providers/vercel/services/project/project_git_fork_protection_enabled/project_git_fork_protection_enabled.py new file mode 100644 index 0000000000..b3b05e58c2 --- /dev/null +++ b/prowler/providers/vercel/services/project/project_git_fork_protection_enabled/project_git_fork_protection_enabled.py @@ -0,0 +1,43 @@ +from typing import List + +from prowler.lib.check.models import Check, CheckReportVercel +from prowler.providers.vercel.services.project.project_client import project_client + + +class project_git_fork_protection_enabled(Check): + """Check if Git fork protection is enabled for the project. + + This class verifies whether each Vercel project has Git fork protection + enabled to prevent untrusted forks from accessing environment variables + and triggering deployments. + """ + + def execute(self) -> List[CheckReportVercel]: + """Execute the Vercel Project Git Fork Protection check. + + Iterates over all projects and checks if Git fork protection is enabled. + + Returns: + List[CheckReportVercel]: A list of reports for each project. + """ + findings = [] + for project in project_client.projects.values(): + report = CheckReportVercel(metadata=self.metadata(), resource=project) + + if project.git_fork_protection: + report.status = "PASS" + report.status_extended = ( + f"Project {project.name} has Git fork protection enabled, " + f"preventing untrusted forks from accessing secrets." + ) + else: + report.status = "FAIL" + report.status_extended = ( + f"Project {project.name} does not have Git fork protection " + f"enabled, allowing forks to access environment variables " + f"and trigger deployments." + ) + + findings.append(report) + + return findings diff --git a/prowler/providers/vercel/services/project/project_password_protection_enabled/__init__.py b/prowler/providers/vercel/services/project/project_password_protection_enabled/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/project/project_password_protection_enabled/project_password_protection_enabled.metadata.json b/prowler/providers/vercel/services/project/project_password_protection_enabled/project_password_protection_enabled.metadata.json new file mode 100644 index 0000000000..58e3e46e41 --- /dev/null +++ b/prowler/providers/vercel/services/project/project_password_protection_enabled/project_password_protection_enabled.metadata.json @@ -0,0 +1,38 @@ +{ + "Provider": "vercel", + "CheckID": "project_password_protection_enabled", + "CheckTitle": "Vercel project has password protection configured for deployments", + "CheckType": [], + "ServiceName": "project", + "SubServiceName": "", + "ResourceIdTemplate": "", + "Severity": "medium", + "ResourceType": "NotDefined", + "ResourceGroup": "security", + "Description": "**Vercel projects** are assessed for **password protection** configuration, which adds a shared-password gate in front of deployments requiring visitors to enter a password before they can access the application. This provides an additional layer of access control beyond Vercel Authentication, useful for sharing preview deployments with external stakeholders who do not have Vercel accounts.", + "Risk": "Without **password protection**, deployments are accessible to anyone who has the URL. For projects that contain pre-release features, client work, or sensitive content, this means **unauthorized individuals** can view and interact with the application without any authentication barrier.", + "RelatedUrl": "", + "AdditionalURLs": [ + "https://vercel.com/docs/security/deployment-protection/methods-to-protect-deployments/password-protection" + ], + "Remediation": { + "Code": { + "CLI": "", + "NativeIaC": "", + "Other": "1. Sign in to the Vercel dashboard\n2. Navigate to the project Settings > General\n3. Scroll to the 'Password Protection' section\n4. Enable Password Protection and set a strong shared password\n5. Click Save\n6. Share the password only with authorized stakeholders", + "Terraform": "" + }, + "Recommendation": { + "Text": "Enable password protection to add a shared-password gate to your deployments. This is especially recommended for preview deployments shared with external clients or stakeholders who do not have Vercel accounts. Combine with Vercel Authentication for defense-in-depth.", + "Url": "https://hub.prowler.com/checks/vercel/project_password_protection_enabled" + } + }, + "Categories": [ + "internet-exposed" + ], + "DependsOn": [], + "RelatedTo": [ + "project_deployment_protection_enabled" + ], + "Notes": "" +} diff --git a/prowler/providers/vercel/services/project/project_password_protection_enabled/project_password_protection_enabled.py b/prowler/providers/vercel/services/project/project_password_protection_enabled/project_password_protection_enabled.py new file mode 100644 index 0000000000..86c0778408 --- /dev/null +++ b/prowler/providers/vercel/services/project/project_password_protection_enabled/project_password_protection_enabled.py @@ -0,0 +1,45 @@ +from typing import List + +from prowler.lib.check.models import Check, CheckReportVercel +from prowler.providers.vercel.services.project.project_client import project_client + + +class project_password_protection_enabled(Check): + """Check if password protection is enabled for the project. + + This class verifies whether each Vercel project has password protection + configured to restrict access to deployments with a shared password. + """ + + def execute(self) -> List[CheckReportVercel]: + """Execute the Vercel Project Password Protection check. + + Iterates over all projects and checks if password protection is configured. + + Returns: + List[CheckReportVercel]: A list of reports for each project. + """ + findings = [] + for project in project_client.projects.values(): + report = CheckReportVercel(metadata=self.metadata(), resource=project) + + if ( + project.password_protection + and isinstance(project.password_protection, dict) + and project.password_protection.get("deploymentType") + ): + report.status = "PASS" + report.status_extended = ( + f"Project {project.name} has password protection configured " + f"to restrict access to deployments." + ) + else: + report.status = "FAIL" + report.status_extended = ( + f"Project {project.name} does not have password protection " + f"configured for deployments." + ) + + findings.append(report) + + return findings diff --git a/prowler/providers/vercel/services/project/project_production_deployment_protection_enabled/__init__.py b/prowler/providers/vercel/services/project/project_production_deployment_protection_enabled/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/project/project_production_deployment_protection_enabled/project_production_deployment_protection_enabled.metadata.json b/prowler/providers/vercel/services/project/project_production_deployment_protection_enabled/project_production_deployment_protection_enabled.metadata.json new file mode 100644 index 0000000000..213bc51d07 --- /dev/null +++ b/prowler/providers/vercel/services/project/project_production_deployment_protection_enabled/project_production_deployment_protection_enabled.metadata.json @@ -0,0 +1,38 @@ +{ + "Provider": "vercel", + "CheckID": "project_production_deployment_protection_enabled", + "CheckTitle": "Vercel project has deployment protection enabled on production deployments", + "CheckType": [], + "ServiceName": "project", + "SubServiceName": "", + "ResourceIdTemplate": "", + "Severity": "critical", + "ResourceType": "NotDefined", + "ResourceGroup": "security", + "Description": "**Vercel projects** are assessed for **production deployment protection** configuration, which restricts access to the live production deployment by requiring Vercel Authentication or other access controls. When enabled, visitors must authenticate before accessing the production URL, adding a layer of defense for internal applications or projects that should not be publicly accessible.", + "Risk": "Without **production deployment protection**, the live production deployment is fully accessible to anyone on the internet. For internal tools, admin panels, or pre-launch applications this means **unauthorized users** can interact with production systems, potentially exploiting vulnerabilities, accessing sensitive data, or abusing application functionality.", + "RelatedUrl": "", + "AdditionalURLs": [ + "https://vercel.com/docs/security/deployment-protection" + ], + "Remediation": { + "Code": { + "CLI": "", + "NativeIaC": "", + "Other": "1. Sign in to the Vercel dashboard\n2. Navigate to the project Settings > General\n3. Scroll to Deployment Protection\n4. Under Production deployments, select 'Standard Protection' or 'Vercel Authentication'\n5. Click Save", + "Terraform": "" + }, + "Recommendation": { + "Text": "Enable deployment protection on production deployments for applications that should not be publicly accessible. This is critical for internal tools, admin dashboards, and pre-launch applications where unauthorized access could lead to data exposure or system compromise.", + "Url": "https://hub.prowler.com/checks/vercel/project_production_deployment_protection_enabled" + } + }, + "Categories": [ + "internet-exposed" + ], + "DependsOn": [], + "RelatedTo": [ + "project_deployment_protection_enabled" + ], + "Notes": "" +} diff --git a/prowler/providers/vercel/services/project/project_production_deployment_protection_enabled/project_production_deployment_protection_enabled.py b/prowler/providers/vercel/services/project/project_production_deployment_protection_enabled/project_production_deployment_protection_enabled.py new file mode 100644 index 0000000000..ccbfd15325 --- /dev/null +++ b/prowler/providers/vercel/services/project/project_production_deployment_protection_enabled/project_production_deployment_protection_enabled.py @@ -0,0 +1,45 @@ +from typing import List + +from prowler.lib.check.models import Check, CheckReportVercel +from prowler.providers.vercel.services.project.project_client import project_client + + +class project_production_deployment_protection_enabled(Check): + """Check if deployment protection is enabled on production deployments. + + This class verifies whether each Vercel project has deployment protection + configured for production deployments to prevent unauthorized public access. + """ + + def execute(self) -> List[CheckReportVercel]: + """Execute the Vercel Project Production Deployment Protection check. + + Iterates over all projects and checks if deployment protection is enabled + on production deployments. + + Returns: + List[CheckReportVercel]: A list of reports for each project. + """ + findings = [] + for project in project_client.projects.values(): + report = CheckReportVercel(metadata=self.metadata(), resource=project) + + if ( + project.production_deployment_protection is not None + and project.production_deployment_protection.level != "none" + ): + report.status = "PASS" + report.status_extended = ( + f"Project {project.name} has production deployment protection " + f"enabled with level '{project.production_deployment_protection.level}'." + ) + else: + report.status = "FAIL" + report.status_extended = ( + f"Project {project.name} does not have deployment protection " + f"enabled on production deployments." + ) + + findings.append(report) + + return findings diff --git a/prowler/providers/vercel/services/project/project_service.py b/prowler/providers/vercel/services/project/project_service.py new file mode 100644 index 0000000000..9b3b24859d --- /dev/null +++ b/prowler/providers/vercel/services/project/project_service.py @@ -0,0 +1,163 @@ +from datetime import datetime, timezone +from typing import Optional + +from pydantic import BaseModel, Field + +from prowler.lib.logger import logger +from prowler.providers.vercel.lib.service.service import VercelService + + +class Project(VercelService): + """Retrieve Vercel projects with security-relevant settings and environment variables.""" + + def __init__(self, provider): + super().__init__("Project", provider) + self.projects: dict[str, VercelProject] = {} + self._list_projects() + self.__threading_call__(self._fetch_env_vars, list(self.projects.values())) + + def _list_projects(self): + """List all projects, optionally filtered by --project argument.""" + try: + raw_projects = self._paginate("/v9/projects", "projects") + + filter_projects = self.provider.filter_projects + seen_ids: set[str] = set() + + for proj in raw_projects: + project_id = proj.get("id") + if not project_id or project_id in seen_ids: + continue + seen_ids.add(project_id) + + project_name = proj.get("name", "") + + # Apply project filter if specified + if filter_projects and ( + project_id not in filter_projects + and project_name not in filter_projects + ): + continue + + # Parse deployment protection + dp = None + dp_raw = proj.get("deploymentProtection", {}) or {} + + preview_dp = dp_raw.get("deploymentType", "none") + if preview_dp and preview_dp != "none": + dp = DeploymentProtectionConfig(level=preview_dp) + + prod_dp = None + prod_raw = dp_raw.get("prod", {}) or {} + prod_level = prod_raw.get("deploymentType", "none") + if prod_level and prod_level != "none": + prod_dp = DeploymentProtectionConfig(level=prod_level) + + # Parse password protection + pwd_protection = proj.get("passwordProtection") + + self.projects[project_id] = VercelProject( + id=project_id, + name=project_name, + team_id=proj.get("accountId") or self.provider.session.team_id, + framework=proj.get("framework"), + node_version=proj.get("nodeVersion"), + auto_expose_system_envs=proj.get("autoExposeSystemEnvs", False), + directory_listing=proj.get("directoryListing", False), + skew_protection=( + proj.get("skewProtection") == "enabled" + if isinstance(proj.get("skewProtection"), str) + else bool(proj.get("skewProtection", False)) + ), + deployment_protection=dp, + production_deployment_protection=prod_dp, + password_protection=pwd_protection, + git_fork_protection=proj.get("gitForkProtection", True), + git_repository=proj.get("link"), + secure_compute=proj.get("secureCompute"), + ) + + logger.info(f"Project - Found {len(self.projects)} project(s)") + + except Exception as error: + logger.error( + f"Project - Error listing projects: " + f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" + ) + + def _fetch_env_vars(self, project: "VercelProject"): + """Fetch environment variables for a single project.""" + try: + env_data = self._paginate(f"/v9/projects/{project.id}/env", "envs") + + env_vars = [] + for env in env_data: + env_vars.append( + VercelEnvironmentVariable( + id=env.get("id", ""), + key=env.get("key", ""), + type=env.get("type", "plain"), + target=env.get("target", []), + project_id=project.id, + project_name=project.name, + git_branch=env.get("gitBranch"), + created_at=( + datetime.fromtimestamp( + env["createdAt"] / 1000, tz=timezone.utc + ) + if env.get("createdAt") + else None + ), + ) + ) + + project.environment_variables = env_vars + logger.debug( + f"Project - Fetched {len(env_vars)} env vars for project {project.name}" + ) + + except Exception as error: + logger.error( + f"Project - Error fetching env vars for {project.name}: " + f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" + ) + + +class DeploymentProtectionConfig(BaseModel): + """Per-environment deployment protection settings.""" + + level: str = "none" # "standard" | "all" | "none" + method: Optional[str] = None + + +class VercelEnvironmentVariable(BaseModel): + """Vercel project environment variable.""" + + id: str + key: str + type: str = "plain" # "encrypted" | "plain" | "secret" | "system" + target: list[str] = Field(default_factory=list) + project_id: str = "" + project_name: Optional[str] = None + git_branch: Optional[str] = None + created_at: Optional[datetime] = None + + +class VercelProject(BaseModel): + """Vercel project representation used across checks.""" + + id: str + name: str + team_id: Optional[str] = None + framework: Optional[str] = None + node_version: Optional[str] = None + auto_expose_system_envs: bool = False + directory_listing: bool = False + skew_protection: bool = False + deployment_protection: Optional[DeploymentProtectionConfig] = None + production_deployment_protection: Optional[DeploymentProtectionConfig] = None + password_protection: Optional[dict] = None + git_fork_protection: bool = True + git_repository: Optional[dict] = None + secure_compute: Optional[dict] = None + environment_variables: list[VercelEnvironmentVariable] = Field(default_factory=list) diff --git a/prowler/providers/vercel/services/project/project_skew_protection_enabled/__init__.py b/prowler/providers/vercel/services/project/project_skew_protection_enabled/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/project/project_skew_protection_enabled/project_skew_protection_enabled.metadata.json b/prowler/providers/vercel/services/project/project_skew_protection_enabled/project_skew_protection_enabled.metadata.json new file mode 100644 index 0000000000..b73aaa6991 --- /dev/null +++ b/prowler/providers/vercel/services/project/project_skew_protection_enabled/project_skew_protection_enabled.metadata.json @@ -0,0 +1,36 @@ +{ + "Provider": "vercel", + "CheckID": "project_skew_protection_enabled", + "CheckTitle": "Vercel project has skew protection enabled to prevent version mismatches during deployments", + "CheckType": [], + "ServiceName": "project", + "SubServiceName": "", + "ResourceIdTemplate": "", + "Severity": "low", + "ResourceType": "NotDefined", + "ResourceGroup": "compute", + "Description": "**Vercel projects** are assessed for **skew protection**, which ensures clients always communicate with the correct deployment version during rollouts. Without it, clients may fetch assets or call APIs against a different version than the one that served the initial page, causing hydration errors or broken functionality.", + "Risk": "Without **skew protection**, users may experience **version mismatches** during deployment rollouts where the HTML is served from one deployment version but subsequent client-side navigation or API calls hit a newer version. This can cause broken user interfaces, failed client-side transitions, or **data corruption** from incompatible API contract changes.", + "RelatedUrl": "", + "AdditionalURLs": [ + "https://vercel.com/docs/deployments/skew-protection" + ], + "Remediation": { + "Code": { + "CLI": "", + "NativeIaC": "", + "Other": "1. Sign in to the Vercel dashboard\n2. Navigate to the project Settings > General\n3. Locate the 'Skew Protection' section\n4. Enable Skew Protection\n5. Click Save", + "Terraform": "" + }, + "Recommendation": { + "Text": "Enable skew protection to ensure that all client requests during a deployment rollout are routed to the same deployment version that served the initial page. This prevents version mismatch errors and ensures a consistent user experience during deployments.", + "Url": "https://hub.prowler.com/checks/vercel/project_skew_protection_enabled" + } + }, + "Categories": [ + "resilience" + ], + "DependsOn": [], + "RelatedTo": [], + "Notes": "" +} diff --git a/prowler/providers/vercel/services/project/project_skew_protection_enabled/project_skew_protection_enabled.py b/prowler/providers/vercel/services/project/project_skew_protection_enabled/project_skew_protection_enabled.py new file mode 100644 index 0000000000..f4e878ba5c --- /dev/null +++ b/prowler/providers/vercel/services/project/project_skew_protection_enabled/project_skew_protection_enabled.py @@ -0,0 +1,41 @@ +from typing import List + +from prowler.lib.check.models import Check, CheckReportVercel +from prowler.providers.vercel.services.project.project_client import project_client + + +class project_skew_protection_enabled(Check): + """Check if skew protection is enabled for the project. + + This class verifies whether each Vercel project has skew protection enabled + to ensure clients are served consistent deployment versions during rollouts. + """ + + def execute(self) -> List[CheckReportVercel]: + """Execute the Vercel Project Skew Protection check. + + Iterates over all projects and checks if skew protection is enabled. + + Returns: + List[CheckReportVercel]: A list of reports for each project. + """ + findings = [] + for project in project_client.projects.values(): + report = CheckReportVercel(metadata=self.metadata(), resource=project) + + if project.skew_protection: + report.status = "PASS" + report.status_extended = ( + f"Project {project.name} has skew protection enabled, " + f"ensuring consistent deployment versions during rollouts." + ) + else: + report.status = "FAIL" + report.status_extended = ( + f"Project {project.name} does not have skew protection enabled, " + f"which may cause version mismatches during deployments." + ) + + findings.append(report) + + return findings diff --git a/prowler/providers/vercel/services/security/__init__.py b/prowler/providers/vercel/services/security/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/security/security_client.py b/prowler/providers/vercel/services/security/security_client.py new file mode 100644 index 0000000000..f55b2177b0 --- /dev/null +++ b/prowler/providers/vercel/services/security/security_client.py @@ -0,0 +1,4 @@ +from prowler.providers.common.provider import Provider +from prowler.providers.vercel.services.security.security_service import Security + +security_client = Security(Provider.get_global_provider()) diff --git a/prowler/providers/vercel/services/security/security_custom_rules_configured/__init__.py b/prowler/providers/vercel/services/security/security_custom_rules_configured/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/security/security_custom_rules_configured/security_custom_rules_configured.metadata.json b/prowler/providers/vercel/services/security/security_custom_rules_configured/security_custom_rules_configured.metadata.json new file mode 100644 index 0000000000..c3f986b173 --- /dev/null +++ b/prowler/providers/vercel/services/security/security_custom_rules_configured/security_custom_rules_configured.metadata.json @@ -0,0 +1,38 @@ +{ + "Provider": "vercel", + "CheckID": "security_custom_rules_configured", + "CheckTitle": "Vercel project has custom firewall rules configured", + "CheckType": [], + "ServiceName": "security", + "SubServiceName": "", + "ResourceIdTemplate": "", + "Severity": "medium", + "ResourceType": "NotDefined", + "ResourceGroup": "security", + "Description": "**Vercel projects** are assessed for **custom firewall rule** configuration. Custom rules allow fine-grained control over traffic based on request attributes such as path, headers, user agent, and geographic location, providing application-specific protection beyond managed rulesets.", + "Risk": "Without **custom firewall rules**, the application lacks application-specific traffic filtering. Generic managed rulesets may not cover all threat vectors unique to the application. Custom rules are needed to block **known attack patterns**, restrict access to sensitive paths, and enforce application-level security policies.", + "RelatedUrl": "", + "AdditionalURLs": [ + "https://vercel.com/docs/security/vercel-firewall/custom-rules" + ], + "Remediation": { + "Code": { + "CLI": "", + "NativeIaC": "", + "Other": "1. Sign in to the Vercel dashboard\n2. Navigate to the project Settings > Security > Firewall\n3. Add custom rules to protect sensitive endpoints\n4. Configure conditions based on path, headers, geographic location, or other request attributes\n5. Set appropriate actions (block, challenge, or allow) for each rule", + "Terraform": "" + }, + "Recommendation": { + "Text": "Configure custom firewall rules to protect application-specific endpoints and enforce security policies. Focus on protecting admin panels, API routes, authentication endpoints, and any paths that handle sensitive data.", + "Url": "https://hub.prowler.com/checks/vercel/security_custom_rules_configured" + } + }, + "Categories": [ + "internet-exposed" + ], + "DependsOn": [], + "RelatedTo": [ + "security_waf_enabled" + ], + "Notes": "" +} diff --git a/prowler/providers/vercel/services/security/security_custom_rules_configured/security_custom_rules_configured.py b/prowler/providers/vercel/services/security/security_custom_rules_configured/security_custom_rules_configured.py new file mode 100644 index 0000000000..6ec7f8834f --- /dev/null +++ b/prowler/providers/vercel/services/security/security_custom_rules_configured/security_custom_rules_configured.py @@ -0,0 +1,42 @@ +from typing import List + +from prowler.lib.check.models import Check, CheckReportVercel +from prowler.providers.vercel.services.security.security_client import security_client + + +class security_custom_rules_configured(Check): + """Check if custom firewall rules are configured for each project. + + This class verifies whether each Vercel project has at least one + custom firewall rule configured for application-specific protection. + """ + + def execute(self) -> List[CheckReportVercel]: + """Execute the Vercel Custom Rules Configuration check. + + Iterates over all firewall configurations and checks if at least + one custom rule is present. + + Returns: + List[CheckReportVercel]: A list of reports for each project. + """ + findings = [] + for config in security_client.firewall_configs.values(): + report = CheckReportVercel(metadata=self.metadata(), resource=config) + + if config.custom_rules: + report.status = "PASS" + report.status_extended = ( + f"Project {config.project_name} ({config.project_id}) " + f"has {len(config.custom_rules)} custom firewall rule(s) configured." + ) + else: + report.status = "FAIL" + report.status_extended = ( + f"Project {config.project_name} ({config.project_id}) " + f"does not have any custom firewall rules configured." + ) + + findings.append(report) + + return findings diff --git a/prowler/providers/vercel/services/security/security_ip_blocking_rules_configured/__init__.py b/prowler/providers/vercel/services/security/security_ip_blocking_rules_configured/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/security/security_ip_blocking_rules_configured/security_ip_blocking_rules_configured.metadata.json b/prowler/providers/vercel/services/security/security_ip_blocking_rules_configured/security_ip_blocking_rules_configured.metadata.json new file mode 100644 index 0000000000..cc7712d4ec --- /dev/null +++ b/prowler/providers/vercel/services/security/security_ip_blocking_rules_configured/security_ip_blocking_rules_configured.metadata.json @@ -0,0 +1,38 @@ +{ + "Provider": "vercel", + "CheckID": "security_ip_blocking_rules_configured", + "CheckTitle": "Vercel project has IP blocking rules configured", + "CheckType": [], + "ServiceName": "security", + "SubServiceName": "", + "ResourceIdTemplate": "", + "Severity": "medium", + "ResourceType": "NotDefined", + "ResourceGroup": "security", + "Description": "**Vercel projects** are assessed for **IP blocking rule** configuration. IP blocking rules allow denying access from known malicious IP addresses or ranges, reducing the attack surface and preventing traffic from untrusted sources.", + "Risk": "Without **IP blocking rules**, all traffic is accepted regardless of source IP. Known malicious IPs, abuse networks, and previously identified attackers can freely access the application. This increases the risk of **automated scanning**, credential stuffing, and targeted attacks from known threat sources.", + "RelatedUrl": "", + "AdditionalURLs": [ + "https://vercel.com/docs/security/vercel-firewall" + ], + "Remediation": { + "Code": { + "CLI": "", + "NativeIaC": "", + "Other": "1. Sign in to the Vercel dashboard\n2. Navigate to the project Settings > Security > Firewall\n3. Add a new IP blocking rule\n4. Specify the IP addresses or CIDR ranges to block\n5. Review firewall logs to identify malicious IPs that should be blocked", + "Terraform": "" + }, + "Recommendation": { + "Text": "Configure IP blocking rules to deny traffic from known malicious sources. Maintain a blocklist of IPs identified through security monitoring, threat intelligence feeds, or incident investigation. Regularly review and update the blocklist.", + "Url": "https://hub.prowler.com/checks/vercel/security_ip_blocking_rules_configured" + } + }, + "Categories": [ + "internet-exposed" + ], + "DependsOn": [], + "RelatedTo": [ + "security_waf_enabled" + ], + "Notes": "" +} diff --git a/prowler/providers/vercel/services/security/security_ip_blocking_rules_configured/security_ip_blocking_rules_configured.py b/prowler/providers/vercel/services/security/security_ip_blocking_rules_configured/security_ip_blocking_rules_configured.py new file mode 100644 index 0000000000..0b89c8d111 --- /dev/null +++ b/prowler/providers/vercel/services/security/security_ip_blocking_rules_configured/security_ip_blocking_rules_configured.py @@ -0,0 +1,43 @@ +from typing import List + +from prowler.lib.check.models import Check, CheckReportVercel +from prowler.providers.vercel.services.security.security_client import security_client + + +class security_ip_blocking_rules_configured(Check): + """Check if IP blocking rules are configured for each project. + + This class verifies whether each Vercel project has at least one IP + blocking rule configured to restrict access from known malicious + IP addresses or ranges. + """ + + def execute(self) -> List[CheckReportVercel]: + """Execute the Vercel IP Blocking Rules Configuration check. + + Iterates over all firewall configurations and checks if at least + one IP blocking rule is present. + + Returns: + List[CheckReportVercel]: A list of reports for each project. + """ + findings = [] + for config in security_client.firewall_configs.values(): + report = CheckReportVercel(metadata=self.metadata(), resource=config) + + if config.ip_blocking_rules: + report.status = "PASS" + report.status_extended = ( + f"Project {config.project_name} ({config.project_id}) " + f"has {len(config.ip_blocking_rules)} IP blocking rule(s) configured." + ) + else: + report.status = "FAIL" + report.status_extended = ( + f"Project {config.project_name} ({config.project_id}) " + f"does not have any IP blocking rules configured." + ) + + findings.append(report) + + return findings diff --git a/prowler/providers/vercel/services/security/security_managed_rulesets_enabled/__init__.py b/prowler/providers/vercel/services/security/security_managed_rulesets_enabled/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/security/security_managed_rulesets_enabled/security_managed_rulesets_enabled.metadata.json b/prowler/providers/vercel/services/security/security_managed_rulesets_enabled/security_managed_rulesets_enabled.metadata.json new file mode 100644 index 0000000000..95d7db6d20 --- /dev/null +++ b/prowler/providers/vercel/services/security/security_managed_rulesets_enabled/security_managed_rulesets_enabled.metadata.json @@ -0,0 +1,38 @@ +{ + "Provider": "vercel", + "CheckID": "security_managed_rulesets_enabled", + "CheckTitle": "Vercel project has managed WAF rulesets enabled", + "CheckType": [], + "ServiceName": "security", + "SubServiceName": "", + "ResourceIdTemplate": "", + "Severity": "high", + "ResourceType": "NotDefined", + "ResourceGroup": "security", + "Description": "**Vercel projects** are assessed for **managed WAF ruleset** enablement. Managed rulesets are curated by Vercel and provide protection against known attack patterns including **OWASP Top 10** threats. This feature requires an Enterprise plan and reports MANUAL status when unavailable.", + "Risk": "Without **managed rulesets** enabled, the firewall lacks curated protection rules against well-known attack patterns. The application relies solely on custom rules, which may miss **new or evolving threats** that managed rulesets are designed to detect and block automatically.", + "RelatedUrl": "", + "AdditionalURLs": [ + "https://vercel.com/docs/security/vercel-firewall/managed-rulesets" + ], + "Remediation": { + "Code": { + "CLI": "", + "NativeIaC": "", + "Other": "1. Sign in to the Vercel dashboard\n2. Navigate to the project Settings > Security > Firewall\n3. Enable managed rulesets from the available options\n4. Review and configure ruleset sensitivity levels\n5. Note: This feature requires an Enterprise plan", + "Terraform": "" + }, + "Recommendation": { + "Text": "Enable managed WAF rulesets to benefit from Vercel-curated protection against common attack patterns. If you are on a plan that does not support managed rulesets, consider upgrading to the Enterprise plan for enhanced security features.", + "Url": "https://hub.prowler.com/checks/vercel/security_managed_rulesets_enabled" + } + }, + "Categories": [ + "internet-exposed" + ], + "DependsOn": [], + "RelatedTo": [ + "security_waf_enabled" + ], + "Notes": "This check is plan-gated. If the Vercel API returns a 403 for managed rulesets, the check reports MANUAL status indicating that an Enterprise plan is required." +} diff --git a/prowler/providers/vercel/services/security/security_managed_rulesets_enabled/security_managed_rulesets_enabled.py b/prowler/providers/vercel/services/security/security_managed_rulesets_enabled/security_managed_rulesets_enabled.py new file mode 100644 index 0000000000..ead4623f4c --- /dev/null +++ b/prowler/providers/vercel/services/security/security_managed_rulesets_enabled/security_managed_rulesets_enabled.py @@ -0,0 +1,52 @@ +from typing import List + +from prowler.lib.check.models import Check, CheckReportVercel +from prowler.providers.vercel.services.security.security_client import security_client + + +class security_managed_rulesets_enabled(Check): + """Check if managed WAF rulesets are enabled for each project. + + This class verifies whether each Vercel project has managed rulesets + enabled. Managed rulesets provide curated protection rules maintained + by Vercel against known attack patterns. This feature is plan-gated + and may not be available on all plans. + """ + + def execute(self) -> List[CheckReportVercel]: + """Execute the Vercel Managed Rulesets Enabled check. + + Iterates over all firewall configurations and checks if managed + rulesets are enabled. Reports MANUAL status when the feature is + not available due to plan limitations. + + Returns: + List[CheckReportVercel]: A list of reports for each project. + """ + findings = [] + for config in security_client.firewall_configs.values(): + report = CheckReportVercel(metadata=self.metadata(), resource=config) + + if config.managed_rulesets is None: + report.status = "MANUAL" + report.status_extended = ( + f"Project {config.project_name} ({config.project_id}) " + f"could not be assessed for managed rulesets. " + f"Enterprise plan required to access this feature." + ) + elif config.managed_rulesets: + report.status = "PASS" + report.status_extended = ( + f"Project {config.project_name} ({config.project_id}) " + f"has managed WAF rulesets enabled." + ) + else: + report.status = "FAIL" + report.status_extended = ( + f"Project {config.project_name} ({config.project_id}) " + f"does not have managed WAF rulesets enabled." + ) + + findings.append(report) + + return findings diff --git a/prowler/providers/vercel/services/security/security_rate_limiting_configured/__init__.py b/prowler/providers/vercel/services/security/security_rate_limiting_configured/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/security/security_rate_limiting_configured/security_rate_limiting_configured.metadata.json b/prowler/providers/vercel/services/security/security_rate_limiting_configured/security_rate_limiting_configured.metadata.json new file mode 100644 index 0000000000..28a9c44d5f --- /dev/null +++ b/prowler/providers/vercel/services/security/security_rate_limiting_configured/security_rate_limiting_configured.metadata.json @@ -0,0 +1,38 @@ +{ + "Provider": "vercel", + "CheckID": "security_rate_limiting_configured", + "CheckTitle": "Vercel project has rate limiting rules configured", + "CheckType": [], + "ServiceName": "security", + "SubServiceName": "", + "ResourceIdTemplate": "", + "Severity": "medium", + "ResourceType": "NotDefined", + "ResourceGroup": "security", + "Description": "**Vercel projects** are assessed for **rate limiting rule** configuration. Rate limiting protects applications from abuse, brute-force attacks, and DDoS attempts by restricting the number of requests from a single source within a given time window.", + "Risk": "Without **rate limiting**, the application is vulnerable to **brute-force attacks** on authentication endpoints, API abuse, resource exhaustion, and denial-of-service attacks. Attackers can overwhelm the application with excessive requests, degrading performance for legitimate users or exploiting endpoints without throttling.", + "RelatedUrl": "", + "AdditionalURLs": [ + "https://vercel.com/docs/security/vercel-firewall" + ], + "Remediation": { + "Code": { + "CLI": "", + "NativeIaC": "", + "Other": "1. Sign in to the Vercel dashboard\n2. Navigate to the project Settings > Security > Firewall\n3. Add a new rate limiting rule\n4. Configure the request threshold, time window, and action (challenge or block)\n5. Apply the rule to appropriate paths (e.g., /api/*, /login)", + "Terraform": "" + }, + "Recommendation": { + "Text": "Configure rate limiting rules to protect critical endpoints such as authentication, API routes, and form submissions. Start with conservative thresholds and adjust based on traffic patterns to avoid blocking legitimate users.", + "Url": "https://hub.prowler.com/checks/vercel/security_rate_limiting_configured" + } + }, + "Categories": [ + "internet-exposed" + ], + "DependsOn": [], + "RelatedTo": [ + "security_waf_enabled" + ], + "Notes": "" +} diff --git a/prowler/providers/vercel/services/security/security_rate_limiting_configured/security_rate_limiting_configured.py b/prowler/providers/vercel/services/security/security_rate_limiting_configured/security_rate_limiting_configured.py new file mode 100644 index 0000000000..3e6419666c --- /dev/null +++ b/prowler/providers/vercel/services/security/security_rate_limiting_configured/security_rate_limiting_configured.py @@ -0,0 +1,42 @@ +from typing import List + +from prowler.lib.check.models import Check, CheckReportVercel +from prowler.providers.vercel.services.security.security_client import security_client + + +class security_rate_limiting_configured(Check): + """Check if rate limiting rules are configured for each project. + + This class verifies whether each Vercel project has at least one rate + limiting rule configured to protect against abuse and DDoS attacks. + """ + + def execute(self) -> List[CheckReportVercel]: + """Execute the Vercel Rate Limiting Configuration check. + + Iterates over all firewall configurations and checks if at least + one rate limiting rule is present. + + Returns: + List[CheckReportVercel]: A list of reports for each project. + """ + findings = [] + for config in security_client.firewall_configs.values(): + report = CheckReportVercel(metadata=self.metadata(), resource=config) + + if config.rate_limiting_rules: + report.status = "PASS" + report.status_extended = ( + f"Project {config.project_name} ({config.project_id}) " + f"has {len(config.rate_limiting_rules)} rate limiting rule(s) configured." + ) + else: + report.status = "FAIL" + report.status_extended = ( + f"Project {config.project_name} ({config.project_id}) " + f"does not have any rate limiting rules configured." + ) + + findings.append(report) + + return findings diff --git a/prowler/providers/vercel/services/security/security_service.py b/prowler/providers/vercel/services/security/security_service.py new file mode 100644 index 0000000000..eadac856b9 --- /dev/null +++ b/prowler/providers/vercel/services/security/security_service.py @@ -0,0 +1,127 @@ +from typing import Optional + +from pydantic import BaseModel, Field + +from prowler.lib.logger import logger +from prowler.providers.vercel.lib.service.service import VercelService + + +class Security(VercelService): + """Retrieve Vercel WAF/Firewall configuration per project.""" + + def __init__(self, provider): + super().__init__("Security", provider) + self.firewall_configs: dict[str, VercelFirewallConfig] = {} + + # We need project IDs to fetch firewall configs + # Import project_client to get project list + from prowler.providers.vercel.services.project.project_client import ( + project_client, + ) + + self.__threading_call__( + self._fetch_firewall_config, list(project_client.projects.values()) + ) + + def _fetch_firewall_config(self, project): + """Fetch WAF/Firewall config for a single project.""" + try: + data = self._get( + "/v1/security/firewall/config", + params={"projectId": project.id}, + ) + + if data is None: + # 403 — plan limitation, store with managed_rulesets=None + self.firewall_configs[project.id] = VercelFirewallConfig( + project_id=project.id, + project_name=project.name, + team_id=project.team_id, + firewall_enabled=False, + managed_rulesets=None, + name=project.name, + id=project.id, + ) + return + + # Parse firewall config + fw = data.get("firewallConfig", data) if isinstance(data, dict) else {} + + # Determine if firewall is enabled + rules = fw.get("rules", []) or [] + managed = fw.get("managedRules", fw.get("managedRulesets")) + custom_rules = [] + ip_blocking = [] + rate_limiting = [] + + for rule in rules: + rule_action = rule.get("action", {}) + action_type = ( + rule_action.get("type", "") + if isinstance(rule_action, dict) + else str(rule_action) + ) + + if action_type == "rate_limit" or rule.get("rateLimit"): + rate_limiting.append(rule) + elif action_type in ("deny", "block") and self._is_ip_rule(rule): + ip_blocking.append(rule) + else: + custom_rules.append(rule) + + firewall_enabled = bool(rules) or bool(managed) + + self.firewall_configs[project.id] = VercelFirewallConfig( + project_id=project.id, + project_name=project.name, + team_id=project.team_id, + firewall_enabled=firewall_enabled, + managed_rulesets=managed if managed is not None else {}, + custom_rules=custom_rules, + ip_blocking_rules=ip_blocking, + rate_limiting_rules=rate_limiting, + name=project.name, + id=project.id, + ) + + logger.debug( + f"Security - Loaded firewall config for {project.name}: " + f"enabled={firewall_enabled}, rules={len(rules)}" + ) + + except Exception as error: + logger.error( + f"Security - Error fetching firewall config for {project.name}: " + f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" + ) + + @staticmethod + def _is_ip_rule(rule: dict) -> bool: + """Check if a rule is an IP blocking rule based on conditions.""" + conditions = rule.get("conditionGroup", []) + for group in conditions: + for condition in group.get("conditions", []): + if condition.get("type") == "ip_address" or condition.get("op") in ( + "inc", + "eq", + ): + prop = condition.get("prop", "") + if "ip" in prop.lower(): + return True + return False + + +class VercelFirewallConfig(BaseModel): + """Vercel WAF/Firewall configuration per project.""" + + project_id: str + project_name: Optional[str] = None + team_id: Optional[str] = None + firewall_enabled: bool = False + managed_rulesets: Optional[dict] = None # None means plan-gated (403) + custom_rules: list[dict] = Field(default_factory=list) + ip_blocking_rules: list[dict] = Field(default_factory=list) + rate_limiting_rules: list[dict] = Field(default_factory=list) + # Provide name/id for CheckReportVercel + name: str = "" + id: str = "" diff --git a/prowler/providers/vercel/services/security/security_waf_enabled/__init__.py b/prowler/providers/vercel/services/security/security_waf_enabled/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/security/security_waf_enabled/security_waf_enabled.metadata.json b/prowler/providers/vercel/services/security/security_waf_enabled/security_waf_enabled.metadata.json new file mode 100644 index 0000000000..c758c82f18 --- /dev/null +++ b/prowler/providers/vercel/services/security/security_waf_enabled/security_waf_enabled.metadata.json @@ -0,0 +1,39 @@ +{ + "Provider": "vercel", + "CheckID": "security_waf_enabled", + "CheckTitle": "Vercel project has the Web Application Firewall enabled", + "CheckType": [], + "ServiceName": "security", + "SubServiceName": "", + "ResourceIdTemplate": "", + "Severity": "high", + "ResourceType": "NotDefined", + "ResourceGroup": "security", + "Description": "**Vercel projects** are assessed for **Web Application Firewall (WAF)** enablement. The WAF provides protection against common web attacks including **SQL injection**, **cross-site scripting (XSS)**, and other OWASP Top 10 threats.", + "Risk": "Without the **Web Application Firewall** enabled, the application is directly exposed to common web attacks including **SQL injection**, **cross-site scripting**, request smuggling, and other exploits. Attackers can exploit these vulnerabilities to steal data, deface the application, or gain unauthorized access.", + "RelatedUrl": "", + "AdditionalURLs": [ + "https://vercel.com/docs/security/vercel-firewall" + ], + "Remediation": { + "Code": { + "CLI": "", + "NativeIaC": "", + "Other": "1. Sign in to the Vercel dashboard\n2. Navigate to the project Settings > Security\n3. Enable the Web Application Firewall\n4. Configure appropriate rules and managed rulesets\n5. Monitor firewall logs for false positives and adjust rules accordingly", + "Terraform": "" + }, + "Recommendation": { + "Text": "Enable the Vercel Web Application Firewall to protect your application against common web attacks. Start with managed rulesets for baseline protection and add custom rules as needed based on your application's threat model.", + "Url": "https://hub.prowler.com/checks/vercel/security_waf_enabled" + } + }, + "Categories": [ + "internet-exposed" + ], + "DependsOn": [], + "RelatedTo": [ + "security_managed_rulesets_enabled", + "security_custom_rules_configured" + ], + "Notes": "" +} diff --git a/prowler/providers/vercel/services/security/security_waf_enabled/security_waf_enabled.py b/prowler/providers/vercel/services/security/security_waf_enabled/security_waf_enabled.py new file mode 100644 index 0000000000..82859a4f5c --- /dev/null +++ b/prowler/providers/vercel/services/security/security_waf_enabled/security_waf_enabled.py @@ -0,0 +1,50 @@ +from typing import List + +from prowler.lib.check.models import Check, CheckReportVercel +from prowler.providers.vercel.services.security.security_client import security_client + + +class security_waf_enabled(Check): + """Check if the Vercel Web Application Firewall (WAF) is enabled. + + This class verifies whether each Vercel project has the Web Application + Firewall enabled to protect against common web attacks. + """ + + def execute(self) -> List[CheckReportVercel]: + """Execute the Vercel WAF Enabled check. + + Iterates over all firewall configurations and checks if the WAF + is enabled for each project. + + Returns: + List[CheckReportVercel]: A list of reports for each project. + """ + findings = [] + for config in security_client.firewall_configs.values(): + report = CheckReportVercel(metadata=self.metadata(), resource=config) + + if config.managed_rulesets is None: + # 403 — plan limitation, cannot determine WAF status + report.status = "MANUAL" + report.status_extended = ( + f"Project {config.project_name} ({config.project_id}) " + f"could not be checked for WAF status due to plan limitations. " + f"Manual verification is required." + ) + elif config.firewall_enabled: + report.status = "PASS" + report.status_extended = ( + f"Project {config.project_name} ({config.project_id}) " + f"has the Web Application Firewall enabled." + ) + else: + report.status = "FAIL" + report.status_extended = ( + f"Project {config.project_name} ({config.project_id}) " + f"does not have the Web Application Firewall enabled." + ) + + findings.append(report) + + return findings diff --git a/prowler/providers/vercel/services/team/__init__.py b/prowler/providers/vercel/services/team/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/team/team_client.py b/prowler/providers/vercel/services/team/team_client.py new file mode 100644 index 0000000000..0930aa074b --- /dev/null +++ b/prowler/providers/vercel/services/team/team_client.py @@ -0,0 +1,4 @@ +from prowler.providers.common.provider import Provider +from prowler.providers.vercel.services.team.team_service import Team + +team_client = Team(Provider.get_global_provider()) diff --git a/prowler/providers/vercel/services/team/team_directory_sync_enabled/__init__.py b/prowler/providers/vercel/services/team/team_directory_sync_enabled/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/team/team_directory_sync_enabled/team_directory_sync_enabled.metadata.json b/prowler/providers/vercel/services/team/team_directory_sync_enabled/team_directory_sync_enabled.metadata.json new file mode 100644 index 0000000000..37019b79da --- /dev/null +++ b/prowler/providers/vercel/services/team/team_directory_sync_enabled/team_directory_sync_enabled.metadata.json @@ -0,0 +1,39 @@ +{ + "Provider": "vercel", + "CheckID": "team_directory_sync_enabled", + "CheckTitle": "Vercel team has directory sync (SCIM) enabled for automated provisioning", + "CheckType": [], + "ServiceName": "team", + "SubServiceName": "", + "ResourceIdTemplate": "", + "Severity": "medium", + "ResourceType": "NotDefined", + "ResourceGroup": "IAM", + "Description": "**Vercel team** is assessed for **directory sync (SCIM)** enablement. Directory sync automates user provisioning and deprovisioning by synchronizing team membership with an external identity provider, ensuring timely access revocation when employees leave.", + "Risk": "Without **directory sync**, user provisioning and deprovisioning must be managed manually, increasing the risk of **orphaned accounts** remaining active after employees leave or change roles. Manual processes are error-prone and may lead to unauthorized access persisting longer than intended.", + "RelatedUrl": "", + "AdditionalURLs": [ + "https://vercel.com/docs/accounts/team-members-and-roles", + "https://vercel.com/docs/security/directory-sync" + ], + "Remediation": { + "Code": { + "CLI": "", + "NativeIaC": "", + "Other": "1. Navigate to your Vercel team settings\n2. Go to the Security section\n3. Configure directory sync (SCIM) with your identity provider\n4. Map identity provider groups to Vercel team roles\n5. Enable automated provisioning and deprovisioning", + "Terraform": "" + }, + "Recommendation": { + "Text": "Enable directory sync (SCIM) to automate user lifecycle management. This ensures that team membership stays synchronized with your identity provider, automatically provisioning new members and revoking access when employees leave or change roles.", + "Url": "https://hub.prowler.com/checks/vercel/team_directory_sync_enabled" + } + }, + "Categories": [ + "trust-boundaries" + ], + "DependsOn": [], + "RelatedTo": [ + "team_saml_sso_enabled" + ], + "Notes": "" +} diff --git a/prowler/providers/vercel/services/team/team_directory_sync_enabled/team_directory_sync_enabled.py b/prowler/providers/vercel/services/team/team_directory_sync_enabled/team_directory_sync_enabled.py new file mode 100644 index 0000000000..101922b6ed --- /dev/null +++ b/prowler/providers/vercel/services/team/team_directory_sync_enabled/team_directory_sync_enabled.py @@ -0,0 +1,47 @@ +from typing import List + +from prowler.lib.check.models import Check, CheckReportVercel +from prowler.providers.vercel.services.team.team_client import team_client + + +class team_directory_sync_enabled(Check): + """Check if directory sync (SCIM) is enabled for the Vercel team. + + This class verifies whether the Vercel team has directory sync enabled, + allowing automated user provisioning and deprovisioning through an + identity provider. + """ + + def execute(self) -> List[CheckReportVercel]: + """Execute the Vercel Team Directory Sync Enabled check. + + Iterates over all teams and checks if directory sync is enabled. + + Returns: + List[CheckReportVercel]: A list of reports for each team. + """ + findings = [] + for team in team_client.teams.values(): + report = CheckReportVercel( + metadata=self.metadata(), + resource=team, + resource_name=team.name, + resource_id=team.id, + ) + + if team.directory_sync_enabled: + report.status = "PASS" + report.status_extended = ( + f"Team {team.name} has directory sync (SCIM) enabled " + f"for automated user provisioning." + ) + else: + report.status = "FAIL" + report.status_extended = ( + f"Team {team.name} does not have directory sync (SCIM) enabled. " + f"User provisioning and deprovisioning must be managed manually." + ) + + findings.append(report) + + return findings diff --git a/prowler/providers/vercel/services/team/team_member_role_least_privilege/__init__.py b/prowler/providers/vercel/services/team/team_member_role_least_privilege/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/team/team_member_role_least_privilege/team_member_role_least_privilege.metadata.json b/prowler/providers/vercel/services/team/team_member_role_least_privilege/team_member_role_least_privilege.metadata.json new file mode 100644 index 0000000000..0e4750d703 --- /dev/null +++ b/prowler/providers/vercel/services/team/team_member_role_least_privilege/team_member_role_least_privilege.metadata.json @@ -0,0 +1,36 @@ +{ + "Provider": "vercel", + "CheckID": "team_member_role_least_privilege", + "CheckTitle": "Vercel team follows least privilege with a limited number of owner roles", + "CheckType": [], + "ServiceName": "team", + "SubServiceName": "", + "ResourceIdTemplate": "", + "Severity": "medium", + "ResourceType": "NotDefined", + "ResourceGroup": "IAM", + "Description": "**Vercel team members** are assessed for **least privilege** by checking whether the proportion of members with the `OWNER` role exceeds a configurable percentage threshold (default: 20%) or a maximum owner count (default: 3). Both thresholds are configurable via audit_config. An excessive number of owners increases the attack surface and risk of accidental or malicious configuration changes.", + "Risk": "Having too many **team owners** increases the **blast radius** of compromised accounts and the risk of unauthorized changes to billing, security settings, and team membership. Each owner has full administrative privileges over the team.", + "RelatedUrl": "", + "AdditionalURLs": [ + "https://vercel.com/docs/accounts/team-members-and-roles" + ], + "Remediation": { + "Code": { + "CLI": "", + "NativeIaC": "", + "Other": "1. Navigate to your Vercel team settings\n2. Go to the Members section\n3. Review all members with the OWNER role\n4. Downgrade unnecessary owners to MEMBER, DEVELOPER, or VIEWER roles\n5. Ensure only essential personnel retain the OWNER role", + "Terraform": "" + }, + "Recommendation": { + "Text": "Limit the number of team owners to the minimum required for administration. Assign the least privileged role necessary for each member's responsibilities. Use MEMBER, DEVELOPER, or VIEWER roles for non-administrative team members.", + "Url": "https://hub.prowler.com/checks/vercel/team_member_role_least_privilege" + } + }, + "Categories": [ + "trust-boundaries" + ], + "DependsOn": [], + "RelatedTo": [], + "Notes": "Thresholds are configurable via audit_config: max_owner_percentage (default: 20) and max_owners (default: 3). Small teams (<5 members) with at most 1 owner are always considered compliant." +} diff --git a/prowler/providers/vercel/services/team/team_member_role_least_privilege/team_member_role_least_privilege.py b/prowler/providers/vercel/services/team/team_member_role_least_privilege/team_member_role_least_privilege.py new file mode 100644 index 0000000000..a2f122ffe8 --- /dev/null +++ b/prowler/providers/vercel/services/team/team_member_role_least_privilege/team_member_role_least_privilege.py @@ -0,0 +1,88 @@ +from typing import List + +from prowler.lib.check.models import Check, CheckReportVercel +from prowler.providers.vercel.services.team.team_client import team_client + + +class team_member_role_least_privilege(Check): + """Check if the Vercel team follows least privilege for owner roles. + + This class verifies that the number of team members with the OWNER + role does not exceed configurable thresholds, following the principle + of least privilege. Both the percentage threshold and a maximum owner + count are configurable via audit_config. + """ + + def execute(self) -> List[CheckReportVercel]: + """Execute the Vercel Team Member Role Least Privilege check. + + Iterates over all teams and checks if the proportion of OWNER + members is within acceptable bounds. Thresholds are configurable + via ``max_owner_percentage`` (default: 20) and ``max_owners`` + (default: 3) in audit_config. + + Returns: + List[CheckReportVercel]: A list of reports for each team. + """ + findings = [] + max_owner_percentage = team_client.audit_config.get("max_owner_percentage", 20) + max_owners = team_client.audit_config.get("max_owners", 3) + for team in team_client.teams.values(): + report = CheckReportVercel( + metadata=self.metadata(), + resource=team, + resource_name=team.name, + resource_id=team.id, + ) + + active_members = [m for m in team.members if m.status == "active"] + total_active = len(active_members) + + if total_active == 0: + report.status = "PASS" + report.status_extended = ( + f"Team {team.name} has no active members to evaluate." + ) + findings.append(report) + continue + + owners = [m for m in active_members if m.role == "OWNER"] + owner_count = len(owners) + owner_percentage = (owner_count / total_active) * 100 + + if total_active < 5 and owner_count <= 1: + report.status = "PASS" + report.status_extended = ( + f"Team {team.name} has {owner_count} owner(s) out of " + f"{total_active} active members. Small team with minimum " + f"required owner — least privilege threshold not applicable." + ) + elif owner_percentage <= max_owner_percentage and owner_count <= max_owners: + report.status = "PASS" + report.status_extended = ( + f"Team {team.name} has {owner_count} owner(s) out of " + f"{total_active} active members ({owner_percentage:.0f}%), " + f"which is within the configured thresholds " + f"({max_owner_percentage}% / max {max_owners} owners)." + ) + else: + reasons = [] + if owner_percentage > max_owner_percentage: + reasons.append( + f"{owner_percentage:.0f}% exceeds the " + f"{max_owner_percentage}% threshold" + ) + if owner_count > max_owners: + reasons.append( + f"{owner_count} owners exceeds the " f"maximum of {max_owners}" + ) + report.status = "FAIL" + report.status_extended = ( + f"Team {team.name} has {owner_count} owner(s) out of " + f"{total_active} active members — " + f"{'; '.join(reasons)}." + ) + + findings.append(report) + + return findings diff --git a/prowler/providers/vercel/services/team/team_no_stale_invitations/__init__.py b/prowler/providers/vercel/services/team/team_no_stale_invitations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/team/team_no_stale_invitations/team_no_stale_invitations.metadata.json b/prowler/providers/vercel/services/team/team_no_stale_invitations/team_no_stale_invitations.metadata.json new file mode 100644 index 0000000000..d05461c5c1 --- /dev/null +++ b/prowler/providers/vercel/services/team/team_no_stale_invitations/team_no_stale_invitations.metadata.json @@ -0,0 +1,36 @@ +{ + "Provider": "vercel", + "CheckID": "team_no_stale_invitations", + "CheckTitle": "Vercel team has no stale pending invitations older than 30 days", + "CheckType": [], + "ServiceName": "team", + "SubServiceName": "", + "ResourceIdTemplate": "", + "Severity": "low", + "ResourceType": "NotDefined", + "ResourceGroup": "governance", + "Description": "**Vercel team** is assessed for **stale invitations** by checking whether pending invitations have been outstanding for more than 30 days. Stale invitations may indicate abandoned onboarding processes or forgotten invitation links that could be exploited.", + "Risk": "**Stale pending invitations** represent unresolved access grants. If invitation links are intercepted or forwarded to unintended recipients, they could be used to gain **unauthorized access** to the team. Old invitations also indicate poor access lifecycle management.", + "RelatedUrl": "", + "AdditionalURLs": [ + "https://vercel.com/docs/accounts/team-members-and-roles" + ], + "Remediation": { + "Code": { + "CLI": "", + "NativeIaC": "", + "Other": "1. Navigate to your Vercel team settings\n2. Go to the Members section\n3. Review all pending invitations\n4. Revoke any invitations that have been pending for more than 30 days\n5. Re-invite members if still needed", + "Terraform": "" + }, + "Recommendation": { + "Text": "Regularly review and revoke stale team invitations. Establish a process to follow up on pending invitations within a reasonable timeframe and revoke those that are no longer needed to reduce the risk of unauthorized access.", + "Url": "https://hub.prowler.com/checks/vercel/team_no_stale_invitations" + } + }, + "Categories": [ + "trust-boundaries" + ], + "DependsOn": [], + "RelatedTo": [], + "Notes": "" +} diff --git a/prowler/providers/vercel/services/team/team_no_stale_invitations/team_no_stale_invitations.py b/prowler/providers/vercel/services/team/team_no_stale_invitations/team_no_stale_invitations.py new file mode 100644 index 0000000000..b57c0e37ab --- /dev/null +++ b/prowler/providers/vercel/services/team/team_no_stale_invitations/team_no_stale_invitations.py @@ -0,0 +1,70 @@ +from datetime import datetime, timezone +from typing import List + +from prowler.lib.check.models import Check, CheckReportVercel +from prowler.providers.vercel.services.team.team_client import team_client + + +class team_no_stale_invitations(Check): + """Check if the Vercel team has stale pending invitations. + + This class verifies that no team invitations have been pending for + more than 30 days, which may indicate abandoned or forgotten invitations + that should be revoked. + """ + + def execute(self) -> List[CheckReportVercel]: + """Execute the Vercel Team No Stale Invitations check. + + Iterates over all teams and checks for pending invitations older + than 30 days. + + Returns: + List[CheckReportVercel]: A list of reports for each team. + """ + findings = [] + for team in team_client.teams.values(): + report = CheckReportVercel( + metadata=self.metadata(), + resource=team, + resource_name=team.name, + resource_id=team.id, + ) + + now = datetime.now(timezone.utc) + stale_threshold_days = team_client.audit_config.get( + "stale_invitation_threshold_days", 30 + ) + stale_invitations = [] + + for member in team.members: + if member.status != "invited": + continue + if member.created_at is None: + continue + + # Ensure created_at is timezone-aware for comparison + created_at = member.created_at + if created_at.tzinfo is None: + created_at = created_at.replace(tzinfo=timezone.utc) + + age_days = (now - created_at).days + if age_days > stale_threshold_days: + stale_invitations.append(member) + + if not stale_invitations: + report.status = "PASS" + report.status_extended = ( + f"Team {team.name} has no stale pending invitations " + f"older than {stale_threshold_days} days." + ) + else: + report.status = "FAIL" + report.status_extended = ( + f"Team {team.name} has {len(stale_invitations)} stale " + f"pending invitation(s) older than {stale_threshold_days} days." + ) + + findings.append(report) + + return findings diff --git a/prowler/providers/vercel/services/team/team_saml_sso_enabled/__init__.py b/prowler/providers/vercel/services/team/team_saml_sso_enabled/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/team/team_saml_sso_enabled/team_saml_sso_enabled.metadata.json b/prowler/providers/vercel/services/team/team_saml_sso_enabled/team_saml_sso_enabled.metadata.json new file mode 100644 index 0000000000..ebbe85ebc9 --- /dev/null +++ b/prowler/providers/vercel/services/team/team_saml_sso_enabled/team_saml_sso_enabled.metadata.json @@ -0,0 +1,39 @@ +{ + "Provider": "vercel", + "CheckID": "team_saml_sso_enabled", + "CheckTitle": "Vercel team has SAML SSO enabled for centralized identity management", + "CheckType": [], + "ServiceName": "team", + "SubServiceName": "", + "ResourceIdTemplate": "", + "Severity": "high", + "ResourceType": "NotDefined", + "ResourceGroup": "IAM", + "Description": "**Vercel team** is assessed for **SAML single sign-on (SSO)** enablement. SAML SSO enables centralized identity management through an external identity provider, ensuring consistent authentication policies across the organization.", + "Risk": "Without **SAML SSO**, team members authenticate using individual Vercel credentials that are not centrally managed. This increases the risk of **credential sprawl**, inconsistent password policies, and inability to enforce organization-wide authentication controls such as **MFA**.", + "RelatedUrl": "", + "AdditionalURLs": [ + "https://vercel.com/docs/accounts/team-members-and-roles", + "https://vercel.com/docs/security/saml" + ], + "Remediation": { + "Code": { + "CLI": "", + "NativeIaC": "", + "Other": "1. Navigate to your Vercel team settings\n2. Go to the Security section\n3. Configure SAML SSO with your identity provider (Okta, Azure AD, etc.)\n4. Complete the SAML connection setup and verify it is linked", + "Terraform": "" + }, + "Recommendation": { + "Text": "Enable SAML SSO for the Vercel team to centralize authentication through your organization's identity provider. This ensures consistent security policies, simplifies user lifecycle management, and enables enforcement of MFA and other access controls.", + "Url": "https://hub.prowler.com/checks/vercel/team_saml_sso_enabled" + } + }, + "Categories": [ + "trust-boundaries" + ], + "DependsOn": [], + "RelatedTo": [ + "team_saml_sso_enforced" + ], + "Notes": "" +} diff --git a/prowler/providers/vercel/services/team/team_saml_sso_enabled/team_saml_sso_enabled.py b/prowler/providers/vercel/services/team/team_saml_sso_enabled/team_saml_sso_enabled.py new file mode 100644 index 0000000000..8a979ec66d --- /dev/null +++ b/prowler/providers/vercel/services/team/team_saml_sso_enabled/team_saml_sso_enabled.py @@ -0,0 +1,45 @@ +from typing import List + +from prowler.lib.check.models import Check, CheckReportVercel +from prowler.providers.vercel.services.team.team_client import team_client + + +class team_saml_sso_enabled(Check): + """Check if SAML SSO is enabled for the Vercel team. + + This class verifies whether the Vercel team has SAML single sign-on + configured and enabled for centralized identity management. + """ + + def execute(self) -> List[CheckReportVercel]: + """Execute the Vercel Team SAML SSO Enabled check. + + Iterates over all teams and checks if SAML SSO is enabled. + + Returns: + List[CheckReportVercel]: A list of reports for each team. + """ + findings = [] + for team in team_client.teams.values(): + report = CheckReportVercel( + metadata=self.metadata(), + resource=team, + resource_name=team.name, + resource_id=team.id, + ) + + if team.saml and team.saml.status == "enabled": + report.status = "PASS" + report.status_extended = ( + f"Team {team.name} has SAML SSO enabled" + f"{f' via {team.saml.provider}' if team.saml.provider else ''}." + ) + else: + report.status = "FAIL" + report.status_extended = ( + f"Team {team.name} does not have SAML SSO enabled." + ) + + findings.append(report) + + return findings diff --git a/prowler/providers/vercel/services/team/team_saml_sso_enforced/__init__.py b/prowler/providers/vercel/services/team/team_saml_sso_enforced/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/providers/vercel/services/team/team_saml_sso_enforced/team_saml_sso_enforced.metadata.json b/prowler/providers/vercel/services/team/team_saml_sso_enforced/team_saml_sso_enforced.metadata.json new file mode 100644 index 0000000000..f4de8e7ebe --- /dev/null +++ b/prowler/providers/vercel/services/team/team_saml_sso_enforced/team_saml_sso_enforced.metadata.json @@ -0,0 +1,39 @@ +{ + "Provider": "vercel", + "CheckID": "team_saml_sso_enforced", + "CheckTitle": "Vercel team enforces SAML SSO for all members", + "CheckType": [], + "ServiceName": "team", + "SubServiceName": "", + "ResourceIdTemplate": "", + "Severity": "critical", + "ResourceType": "NotDefined", + "ResourceGroup": "IAM", + "Description": "**Vercel team** is assessed for **SAML SSO enforcement** across all members. When enforced, all team members must authenticate through the configured identity provider, preventing the use of individual Vercel credentials.", + "Risk": "Without **SAML SSO enforcement**, team members can bypass centralized authentication and log in with individual credentials even when SAML is configured. This undermines **identity governance**, allows circumvention of MFA policies, and creates gaps in access auditing.", + "RelatedUrl": "", + "AdditionalURLs": [ + "https://vercel.com/docs/accounts/team-members-and-roles", + "https://vercel.com/docs/security/saml" + ], + "Remediation": { + "Code": { + "CLI": "", + "NativeIaC": "", + "Other": "1. Navigate to your Vercel team settings\n2. Go to the Security section\n3. Ensure SAML SSO is configured and linked\n4. Enable SSO enforcement to require all members to authenticate via the identity provider", + "Terraform": "" + }, + "Recommendation": { + "Text": "Enforce SAML SSO for all team members to ensure authentication is managed exclusively through your identity provider. This prevents credential bypass, enforces MFA policies, and provides centralized access control and audit capabilities.", + "Url": "https://hub.prowler.com/checks/vercel/team_saml_sso_enforced" + } + }, + "Categories": [ + "trust-boundaries" + ], + "DependsOn": [], + "RelatedTo": [ + "team_saml_sso_enabled" + ], + "Notes": "" +} diff --git a/prowler/providers/vercel/services/team/team_saml_sso_enforced/team_saml_sso_enforced.py b/prowler/providers/vercel/services/team/team_saml_sso_enforced/team_saml_sso_enforced.py new file mode 100644 index 0000000000..746ebba387 --- /dev/null +++ b/prowler/providers/vercel/services/team/team_saml_sso_enforced/team_saml_sso_enforced.py @@ -0,0 +1,50 @@ +from typing import List + +from prowler.lib.check.models import Check, CheckReportVercel +from prowler.providers.vercel.services.team.team_client import team_client + + +class team_saml_sso_enforced(Check): + """Check if SAML SSO enforcement is enabled for the Vercel team. + + This class verifies whether the Vercel team enforces SAML SSO, + requiring all members to authenticate through the identity provider. + """ + + def execute(self) -> List[CheckReportVercel]: + """Execute the Vercel Team SAML SSO Enforced check. + + Iterates over all teams and checks if SAML SSO is enforced. + + Returns: + List[CheckReportVercel]: A list of reports for each team. + """ + findings = [] + for team in team_client.teams.values(): + report = CheckReportVercel( + metadata=self.metadata(), + resource=team, + resource_name=team.name, + resource_id=team.id, + ) + + if team.saml and team.saml.enforced: + report.status = "PASS" + report.status_extended = ( + f"Team {team.name} enforces SAML SSO for all members." + ) + else: + report.status = "FAIL" + if team.saml and team.saml.status == "enabled": + report.status_extended = ( + f"Team {team.name} has SAML SSO enabled but does not enforce it. " + f"Members can still authenticate without SSO." + ) + else: + report.status_extended = ( + f"Team {team.name} does not have SAML SSO enforced." + ) + + findings.append(report) + + return findings diff --git a/prowler/providers/vercel/services/team/team_service.py b/prowler/providers/vercel/services/team/team_service.py new file mode 100644 index 0000000000..916374ea87 --- /dev/null +++ b/prowler/providers/vercel/services/team/team_service.py @@ -0,0 +1,157 @@ +from datetime import datetime, timezone +from typing import Optional + +from pydantic import BaseModel, Field + +from prowler.lib.logger import logger +from prowler.providers.vercel.lib.service.service import VercelService + + +class Team(VercelService): + """Retrieve Vercel team configuration and membership.""" + + def __init__(self, provider): + super().__init__("Team", provider) + self.teams: dict[str, VercelTeam] = {} + self._fetch_team() + + def _fetch_team(self): + """Fetch team details and members for all teams in scope.""" + team_ids = self._all_team_ids + if not team_ids: + logger.info("Team - No teams found, skipping team checks") + return + + for team_id in team_ids: + self._fetch_single_team(team_id) + + def _fetch_single_team(self, team_id: str): + """Fetch details and members for a single team.""" + try: + # Fetch team details (pass teamId explicitly for auto-discovered teams) + team_data = self._get(f"/v2/teams/{team_id}", params={"teamId": team_id}) + if not team_data: + return + + # Parse SAML config + saml_config = None + saml_raw = team_data.get("saml", {}) or {} + if saml_raw: + # Vercel returns saml.connection object when SAML is configured + connection = saml_raw.get("connection", {}) or {} + saml_config = SAMLConfig( + status=( + "enabled" + if connection.get("status") == "linked" + or saml_raw.get("status") == "enabled" + else "disabled" + ), + enforced=team_data.get("saml", {}).get("enforced", False) + or team_data.get("enabledSSOEnforcement", False), + provider=connection.get("type"), + ) + + # Parse directory sync + dir_sync = False + # Check for SCIM configuration + if team_data.get("enabledScim") or team_data.get("scim"): + dir_sync = True + + created_at = None + if team_data.get("createdAt"): + created_at = datetime.fromtimestamp( + team_data["createdAt"] / 1000, tz=timezone.utc + ) + + team = VercelTeam( + id=team_data.get("id", team_id), + name=team_data.get("name", ""), + slug=team_data.get("slug", ""), + saml=saml_config, + directory_sync_enabled=dir_sync, + created_at=created_at, + ) + + # Fetch members + self._fetch_members(team) + + self.teams[team.id] = team + logger.info( + f"Team - Loaded team {team.name} with {len(team.members)} members" + ) + + except Exception as error: + logger.error( + f"Team - Error fetching team {team_id}: " + f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" + ) + + def _fetch_members(self, team: "VercelTeam"): + """Fetch all members for a team.""" + try: + raw_members = self._paginate( + f"/v2/teams/{team.id}/members", + "members", + params={"teamId": team.id}, + ) + + for member in raw_members: + joined_at = None + if member.get("joinedFrom", {}).get("commitAt"): + joined_at = datetime.fromtimestamp( + member["joinedFrom"]["commitAt"] / 1000, tz=timezone.utc + ) + elif member.get("createdAt"): + joined_at = datetime.fromtimestamp( + member["createdAt"] / 1000, tz=timezone.utc + ) + + created_at = None + if member.get("createdAt"): + created_at = datetime.fromtimestamp( + member["createdAt"] / 1000, tz=timezone.utc + ) + + team.members.append( + VercelTeamMember( + id=member.get("uid", member.get("id", "")), + email=member.get("email", ""), + role=member.get("role", "MEMBER"), + status=( + "invited" if member.get("confirmed") is False else "active" + ), + joined_at=joined_at, + created_at=created_at, + ) + ) + + except Exception as error: + logger.error( + f"Team - Error fetching members for {team.name}: " + f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" + ) + + +class SAMLConfig(BaseModel): + status: str = "disabled" # "enabled" | "disabled" + enforced: bool = False + provider: Optional[str] = None + + +class VercelTeamMember(BaseModel): + id: str + email: str + role: str # "OWNER" | "MEMBER" | "DEVELOPER" | "VIEWER" | "BILLING" + status: str = "active" # "active" | "invited" + joined_at: Optional[datetime] = None + created_at: Optional[datetime] = None + + +class VercelTeam(BaseModel): + id: str + name: str + slug: str + saml: Optional[SAMLConfig] = None + directory_sync_enabled: bool = False + members: list[VercelTeamMember] = Field(default_factory=list) + created_at: Optional[datetime] = None diff --git a/prowler/providers/vercel/vercel_provider.py b/prowler/providers/vercel/vercel_provider.py new file mode 100644 index 0000000000..731adef6ed --- /dev/null +++ b/prowler/providers/vercel/vercel_provider.py @@ -0,0 +1,405 @@ +import os + +import requests +from colorama import Fore, Style + +from prowler.config.config import ( + default_config_file_path, + get_default_mute_file_path, + load_and_validate_config_file, +) +from prowler.lib.logger import logger +from prowler.lib.utils.utils import print_boxes +from prowler.providers.common.models import Audit_Metadata, Connection +from prowler.providers.common.provider import Provider +from prowler.providers.vercel.exceptions.exceptions import ( + VercelAuthenticationError, + VercelCredentialsError, + VercelIdentityError, + VercelInvalidTeamError, + VercelRateLimitError, + VercelSessionError, +) +from prowler.providers.vercel.lib.mutelist.mutelist import VercelMutelist +from prowler.providers.vercel.models import ( + VercelIdentityInfo, + VercelSession, + VercelTeamInfo, +) + + +class VercelProvider(Provider): + """Vercel provider.""" + + _type: str = "vercel" + _session: VercelSession + _identity: VercelIdentityInfo + _audit_config: dict + _fixer_config: dict + _mutelist: VercelMutelist + _filter_projects: set[str] | None + audit_metadata: Audit_Metadata + + def __init__( + self, + # Authentication credentials + api_token: str = None, + team_id: str = None, + # Scope + projects: list[str] | None = None, + # Provider configuration + config_path: str = None, + config_content: dict | None = None, + fixer_config: dict = {}, + mutelist_path: str = None, + mutelist_content: dict = None, + ): + logger.info("Instantiating Vercel provider...") + + if config_content: + self._audit_config = config_content + else: + if not config_path: + config_path = default_config_file_path + self._audit_config = load_and_validate_config_file(self._type, config_path) + + self._session = VercelProvider.setup_session( + api_token=api_token, + team_id=team_id, + ) + + self._identity = VercelProvider.setup_identity(self._session) + + self._fixer_config = fixer_config + + if mutelist_content: + self._mutelist = VercelMutelist(mutelist_content=mutelist_content) + else: + if not mutelist_path: + mutelist_path = get_default_mute_file_path(self.type) + self._mutelist = VercelMutelist(mutelist_path=mutelist_path) + + # Store project filter for filtering resources across services + self._filter_projects = set(projects) if projects else None + + Provider.set_global_provider(self) + + @property + def type(self): + return self._type + + @property + def session(self): + return self._session + + @property + def identity(self): + return self._identity + + @property + def audit_config(self): + return self._audit_config + + @property + def fixer_config(self): + return self._fixer_config + + @property + def mutelist(self) -> VercelMutelist: + return self._mutelist + + @property + def filter_projects(self) -> set[str] | None: + """Project filter from --project argument to filter scanned projects.""" + return self._filter_projects + + @staticmethod + def setup_session( + api_token: str = None, + team_id: str = None, + ) -> VercelSession: + """Initialize Vercel API session. + + Credentials can be provided as arguments (for API use) or read from + environment variables: + - VERCEL_TOKEN (API Bearer Token) + - VERCEL_TEAM (Team ID or slug, optional) + + Args: + api_token: Vercel API token (optional, falls back to VERCEL_TOKEN env var). + team_id: Vercel team ID or slug (optional, falls back to VERCEL_TEAM env var). + + Returns: + VercelSession: The initialized Vercel session. + + Raises: + VercelCredentialsError: If no credentials are provided. + VercelSessionError: If session setup fails. + """ + token = api_token or os.environ.get("VERCEL_TOKEN", "") + team = team_id or os.environ.get("VERCEL_TEAM", "") or None + + if not token: + raise VercelCredentialsError( + file=os.path.basename(__file__), + message="Vercel credentials not found. Provide an api_token or set the VERCEL_TOKEN environment variable.", + ) + + try: + http_session = requests.Session() + http_session.headers.update( + { + "Authorization": f"Bearer {token}", + "Content-Type": "application/json", + } + ) + + return VercelSession( + token=token, + team_id=team, + http_session=http_session, + ) + except Exception as error: + logger.critical( + f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}] -- {error}" + ) + raise VercelSessionError( + file=os.path.basename(__file__), + original_exception=error, + ) + + @staticmethod + def setup_identity(session: VercelSession) -> VercelIdentityInfo: + """Fetch user and team metadata for Vercel. + + Args: + session: The Vercel session. + + Returns: + VercelIdentityInfo: The identity information. + + Raises: + VercelIdentityError: If identity setup fails. + """ + try: + http = session.http_session + params = {"teamId": session.team_id} if session.team_id else {} + + # Get user info + response = http.get( + f"{session.base_url}/v2/user", params=params, timeout=30 + ) + response.raise_for_status() + user_data = response.json().get("user", {}) + + user_id = user_data.get("id") + username = user_data.get("username") + email = user_data.get("email") + + # Get team info + team_info = None + all_teams = [] + + if session.team_id: + # Specific team requested — fetch just that one + params = {"teamId": session.team_id} + team_response = http.get( + f"{session.base_url}/v2/teams/{session.team_id}", + params=params, + timeout=30, + ) + if team_response.status_code == 200: + team_data = team_response.json() + team_info = VercelTeamInfo( + id=team_data.get("id", session.team_id), + name=team_data.get("name", ""), + slug=team_data.get("slug", ""), + ) + all_teams = [team_info] + elif team_response.status_code in (404, 403): + raise VercelInvalidTeamError( + file=os.path.basename(__file__), + message=f"Team '{session.team_id}' not found or not accessible.", + ) + else: + team_response.raise_for_status() + else: + # No team specified — auto-discover all teams the user belongs to + try: + teams_response = http.get( + f"{session.base_url}/v2/teams", + params={"limit": 100}, + timeout=30, + ) + if teams_response.status_code == 200: + teams_data = teams_response.json().get("teams", []) + for t in teams_data: + all_teams.append( + VercelTeamInfo( + id=t.get("id", ""), + name=t.get("name", ""), + slug=t.get("slug", ""), + ) + ) + if all_teams: + logger.info( + f"Auto-discovered {len(all_teams)} team(s): " + f"{', '.join(t.name for t in all_teams)}" + ) + except Exception as teams_error: + logger.warning(f"Could not auto-discover teams: {teams_error}") + + return VercelIdentityInfo( + user_id=user_id, + username=username, + email=email, + team=team_info, + teams=all_teams, + ) + except VercelInvalidTeamError: + raise + except Exception as error: + logger.critical( + f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}] -- {error}" + ) + raise VercelIdentityError( + file=os.path.basename(__file__), + original_exception=error, + ) + + @staticmethod + def validate_credentials(session: VercelSession) -> None: + """Validate Vercel credentials by calling GET /v2/user. + + Args: + session: The Vercel session to validate. + + Raises: + VercelAuthenticationError: If authentication fails. + VercelRateLimitError: If rate limited. + """ + try: + params = {} + if session.team_id: + params["teamId"] = session.team_id + response = session.http_session.get( + f"{session.base_url}/v2/user", params=params, timeout=30 + ) + + if response.status_code == 401: + raise VercelAuthenticationError( + file=os.path.basename(__file__), + message="Invalid or expired Vercel API token.", + ) + + if response.status_code == 403: + raise VercelAuthenticationError( + file=os.path.basename(__file__), + message="Insufficient permissions for the Vercel API token.", + ) + + if response.status_code == 429: + raise VercelRateLimitError( + file=os.path.basename(__file__), + ) + + response.raise_for_status() + + except (VercelAuthenticationError, VercelRateLimitError): + raise + except requests.exceptions.RequestException as error: + raise VercelAuthenticationError( + file=os.path.basename(__file__), + original_exception=error, + ) + + def print_credentials(self) -> None: + report_title = ( + f"{Style.BRIGHT}Using the Vercel credentials below:{Style.RESET_ALL}" + ) + report_lines = [] + + report_lines.append(f"Authentication: {Fore.YELLOW}API Token{Style.RESET_ALL}") + + if self.identity.email: + report_lines.append( + f"Email: {Fore.YELLOW}{self.identity.email}{Style.RESET_ALL}" + ) + + if self.identity.username: + report_lines.append( + f"Username: {Fore.YELLOW}{self.identity.username}{Style.RESET_ALL}" + ) + + if self.identity.team: + report_lines.append( + f"Team: {Fore.YELLOW}{self.identity.team.name} ({self.identity.team.slug}){Style.RESET_ALL}" + ) + elif self.identity.teams: + team_names = ", ".join(f"{t.name} ({t.slug})" for t in self.identity.teams) + report_lines.append( + f"Scope: {Fore.YELLOW}Personal Account + {len(self.identity.teams)} team(s): {team_names}{Style.RESET_ALL}" + ) + else: + report_lines.append( + f"Scope: {Fore.YELLOW}Personal Account{Style.RESET_ALL}" + ) + + print_boxes(report_lines, report_title) + + @staticmethod + def test_connection( + api_token: str = None, + team_id: str = None, + raise_on_exception: bool = True, + provider_id: str = None, + ) -> Connection: + """Test connection to Vercel. + + Credentials can be provided as arguments (for API use) or read from + environment variables (VERCEL_TOKEN, VERCEL_TEAM). + + Args: + api_token: Vercel API token (optional, falls back to env var). + team_id: Vercel team ID or slug (optional, falls back to env var). + raise_on_exception: Whether to raise or return errors. + provider_id: The provider ID. + + Returns: + Connection: Connection object with is_connected status. + """ + try: + session = VercelProvider.setup_session( + api_token=api_token, + team_id=team_id, + ) + VercelProvider.validate_credentials(session) + return Connection(is_connected=True) + + except ( + VercelCredentialsError, + VercelSessionError, + VercelAuthenticationError, + VercelRateLimitError, + ) as error: + logger.error( + f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" + ) + if raise_on_exception: + raise error + return Connection(is_connected=False, error=error) + + except Exception as error: + logger.error( + f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" + ) + formatted_error = VercelAuthenticationError( + file=os.path.basename(__file__), + original_exception=error, + ) + if raise_on_exception: + raise formatted_error + return Connection(is_connected=False, error=formatted_error) + + def validate_arguments(self) -> None: + return None diff --git a/tests/lib/cli/parser_test.py b/tests/lib/cli/parser_test.py index b9d8a32dc9..e22ffac69b 100644 --- a/tests/lib/cli/parser_test.py +++ b/tests/lib/cli/parser_test.py @@ -17,7 +17,7 @@ prowler_command = "prowler" # capsys # https://docs.pytest.org/en/7.1.x/how-to/capture-stdout-stderr.html -prowler_default_usage_error = "usage: prowler [-h] [--version] {aws,azure,gcp,kubernetes,m365,github,googleworkspace,nhn,mongodbatlas,oraclecloud,alibabacloud,cloudflare,openstack,dashboard,iac,image} ..." +prowler_default_usage_error = "usage: prowler [-h] [--version] {aws,azure,gcp,kubernetes,m365,github,googleworkspace,nhn,mongodbatlas,oraclecloud,alibabacloud,cloudflare,openstack,vercel,dashboard,iac,image} ..." def mock_get_available_providers(): diff --git a/tests/providers/vercel/lib/mutelist/fixtures/vercel_mutelist.yaml b/tests/providers/vercel/lib/mutelist/fixtures/vercel_mutelist.yaml new file mode 100644 index 0000000000..4cacaca5c4 --- /dev/null +++ b/tests/providers/vercel/lib/mutelist/fixtures/vercel_mutelist.yaml @@ -0,0 +1,9 @@ +Mutelist: + Accounts: + "team_test123": + Checks: + "project_deployment_protection_enabled": + Regions: + - "*" + Resources: + - "prj_test789" diff --git a/tests/providers/vercel/lib/mutelist/vercel_mutelist_test.py b/tests/providers/vercel/lib/mutelist/vercel_mutelist_test.py new file mode 100644 index 0000000000..c5cae1ba47 --- /dev/null +++ b/tests/providers/vercel/lib/mutelist/vercel_mutelist_test.py @@ -0,0 +1,93 @@ +from unittest.mock import MagicMock + +import yaml + +from prowler.providers.vercel.lib.mutelist.mutelist import VercelMutelist + +MUTELIST_FIXTURE_PATH = ( + "tests/providers/vercel/lib/mutelist/fixtures/vercel_mutelist.yaml" +) + + +class TestVercelMutelist: + def test_get_mutelist_file_from_local_file(self): + mutelist = VercelMutelist(mutelist_path=MUTELIST_FIXTURE_PATH) + + with open(MUTELIST_FIXTURE_PATH) as f: + mutelist_fixture = yaml.safe_load(f)["Mutelist"] + + assert mutelist.mutelist == mutelist_fixture + assert mutelist.mutelist_file_path == MUTELIST_FIXTURE_PATH + + def test_get_mutelist_file_from_local_file_non_existent(self): + mutelist_path = "tests/providers/vercel/lib/mutelist/fixtures/not_present" + mutelist = VercelMutelist(mutelist_path=mutelist_path) + + assert mutelist.mutelist == {} + assert mutelist.mutelist_file_path == mutelist_path + + def test_validate_mutelist_not_valid_key(self): + mutelist_path = MUTELIST_FIXTURE_PATH + with open(mutelist_path) as f: + mutelist_fixture = yaml.safe_load(f)["Mutelist"] + + mutelist_fixture["Accounts1"] = mutelist_fixture["Accounts"] + del mutelist_fixture["Accounts"] + + mutelist = VercelMutelist(mutelist_content=mutelist_fixture) + + assert len(mutelist.validate_mutelist(mutelist_fixture)) == 0 + assert mutelist.mutelist == {} + assert mutelist.mutelist_file_path is None + + def test_is_finding_muted(self): + mutelist_content = { + "Accounts": { + "team_test123": { + "Checks": { + "project_deployment_protection_enabled": { + "Regions": ["*"], + "Resources": ["prj_test789"], + } + } + } + } + } + + mutelist = VercelMutelist(mutelist_content=mutelist_content) + + finding = MagicMock() + finding.check_metadata = MagicMock() + finding.check_metadata.CheckID = "project_deployment_protection_enabled" + finding.status = "FAIL" + finding.resource_id = "prj_test789" + finding.resource_name = "my-test-project" + finding.resource_tags = [] + + assert mutelist.is_finding_muted(finding, "team_test123") + + def test_is_finding_not_muted(self): + mutelist_content = { + "Accounts": { + "team_test123": { + "Checks": { + "project_deployment_protection_enabled": { + "Regions": ["*"], + "Resources": ["other-project-id"], + } + } + } + } + } + + mutelist = VercelMutelist(mutelist_content=mutelist_content) + + finding = MagicMock() + finding.check_metadata = MagicMock() + finding.check_metadata.CheckID = "project_deployment_protection_enabled" + finding.status = "FAIL" + finding.resource_id = "prj_test789" + finding.resource_name = "my-test-project" + finding.resource_tags = [] + + assert not mutelist.is_finding_muted(finding, "team_test123") diff --git a/tests/providers/vercel/services/authentication/authentication_no_stale_tokens/authentication_no_stale_tokens_test.py b/tests/providers/vercel/services/authentication/authentication_no_stale_tokens/authentication_no_stale_tokens_test.py new file mode 100644 index 0000000000..873cf99a41 --- /dev/null +++ b/tests/providers/vercel/services/authentication/authentication_no_stale_tokens/authentication_no_stale_tokens_test.py @@ -0,0 +1,152 @@ +from datetime import datetime, timedelta, timezone +from unittest import mock + +from prowler.providers.vercel.services.authentication.authentication_service import ( + VercelAuthToken, +) +from tests.providers.vercel.vercel_fixtures import set_mocked_vercel_provider + + +class Test_authentication_no_stale_tokens: + def test_no_tokens(self): + authentication_client = mock.MagicMock + authentication_client.audit_config = {"stale_token_threshold_days": 90} + authentication_client.tokens = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.authentication.authentication_no_stale_tokens.authentication_no_stale_tokens.authentication_client", + new=authentication_client, + ), + ): + from prowler.providers.vercel.services.authentication.authentication_no_stale_tokens.authentication_no_stale_tokens import ( + authentication_no_stale_tokens, + ) + + check = authentication_no_stale_tokens() + result = check.execute() + assert len(result) == 0 + + def test_token_active_recently(self): + token_id = "tok_1" + token_name = "Recent Token" + active_at = datetime.now(timezone.utc) - timedelta(days=10) + authentication_client = mock.MagicMock + authentication_client.audit_config = {"stale_token_threshold_days": 90} + authentication_client.tokens = { + token_id: VercelAuthToken( + id=token_id, + name=token_name, + active_at=active_at, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.authentication.authentication_no_stale_tokens.authentication_no_stale_tokens.authentication_client", + new=authentication_client, + ), + ): + from prowler.providers.vercel.services.authentication.authentication_no_stale_tokens.authentication_no_stale_tokens import ( + authentication_no_stale_tokens, + ) + + check = authentication_no_stale_tokens() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == token_id + assert result[0].resource_name == token_name + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Token '{token_name}' ({token_id}) was last active on {active_at.strftime('%Y-%m-%d %H:%M UTC')} (within the last 90 days)." + ) + assert result[0].team_id is None + + def test_token_stale_90_days(self): + token_id = "tok_2" + token_name = "Stale Token" + active_at = datetime.now(timezone.utc) - timedelta(days=120) + days_inactive = (datetime.now(timezone.utc) - active_at).days + authentication_client = mock.MagicMock + authentication_client.audit_config = {"stale_token_threshold_days": 90} + authentication_client.tokens = { + token_id: VercelAuthToken( + id=token_id, + name=token_name, + active_at=active_at, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.authentication.authentication_no_stale_tokens.authentication_no_stale_tokens.authentication_client", + new=authentication_client, + ), + ): + from prowler.providers.vercel.services.authentication.authentication_no_stale_tokens.authentication_no_stale_tokens import ( + authentication_no_stale_tokens, + ) + + check = authentication_no_stale_tokens() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == token_id + assert result[0].resource_name == token_name + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Token '{token_name}' ({token_id}) has not been used for {days_inactive} days (last active: {active_at.strftime('%Y-%m-%d %H:%M UTC')}). Threshold is 90 days." + ) + assert result[0].team_id is None + + def test_token_no_activity(self): + token_id = "tok_3" + token_name = "Never Used Token" + authentication_client = mock.MagicMock + authentication_client.audit_config = {"stale_token_threshold_days": 90} + authentication_client.tokens = { + token_id: VercelAuthToken( + id=token_id, + name=token_name, + active_at=None, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.authentication.authentication_no_stale_tokens.authentication_no_stale_tokens.authentication_client", + new=authentication_client, + ), + ): + from prowler.providers.vercel.services.authentication.authentication_no_stale_tokens.authentication_no_stale_tokens import ( + authentication_no_stale_tokens, + ) + + check = authentication_no_stale_tokens() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == token_id + assert result[0].resource_name == token_name + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Token '{token_name}' ({token_id}) has no recorded activity and is considered stale." + ) + assert result[0].team_id is None diff --git a/tests/providers/vercel/services/authentication/authentication_token_not_expired/authentication_token_not_expired_test.py b/tests/providers/vercel/services/authentication/authentication_token_not_expired/authentication_token_not_expired_test.py new file mode 100644 index 0000000000..47f19ad79e --- /dev/null +++ b/tests/providers/vercel/services/authentication/authentication_token_not_expired/authentication_token_not_expired_test.py @@ -0,0 +1,228 @@ +from datetime import datetime, timedelta, timezone +from unittest import mock + +from prowler.lib.check.models import Severity +from prowler.providers.vercel.services.authentication.authentication_service import ( + VercelAuthToken, +) +from tests.providers.vercel.vercel_fixtures import set_mocked_vercel_provider + + +class Test_authentication_token_not_expired: + def test_no_tokens(self): + authentication_client = mock.MagicMock + authentication_client.tokens = {} + authentication_client.audit_config = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.authentication.authentication_token_not_expired.authentication_token_not_expired.authentication_client", + new=authentication_client, + ), + ): + from prowler.providers.vercel.services.authentication.authentication_token_not_expired.authentication_token_not_expired import ( + authentication_token_not_expired, + ) + + check = authentication_token_not_expired() + result = check.execute() + assert len(result) == 0 + + def test_token_not_expired(self): + token_id = "tok_1" + token_name = "My Token" + expires_at = datetime.now(timezone.utc) + timedelta(days=30) + authentication_client = mock.MagicMock + authentication_client.tokens = { + token_id: VercelAuthToken( + id=token_id, + name=token_name, + expires_at=expires_at, + ) + } + authentication_client.audit_config = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.authentication.authentication_token_not_expired.authentication_token_not_expired.authentication_client", + new=authentication_client, + ), + ): + from prowler.providers.vercel.services.authentication.authentication_token_not_expired.authentication_token_not_expired import ( + authentication_token_not_expired, + ) + + check = authentication_token_not_expired() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == token_id + assert result[0].resource_name == token_name + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Token '{token_name}' ({token_id}) is valid and expires on {expires_at.strftime('%Y-%m-%d %H:%M UTC')}." + ) + assert result[0].team_id is None + + def test_token_expired(self): + token_id = "tok_2" + token_name = "Old Token" + expires_at = datetime.now(timezone.utc) - timedelta(days=1) + authentication_client = mock.MagicMock + authentication_client.tokens = { + token_id: VercelAuthToken( + id=token_id, + name=token_name, + expires_at=expires_at, + ) + } + authentication_client.audit_config = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.authentication.authentication_token_not_expired.authentication_token_not_expired.authentication_client", + new=authentication_client, + ), + ): + from prowler.providers.vercel.services.authentication.authentication_token_not_expired.authentication_token_not_expired import ( + authentication_token_not_expired, + ) + + check = authentication_token_not_expired() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == token_id + assert result[0].resource_name == token_name + assert result[0].status == "FAIL" + assert result[0].check_metadata.Severity == Severity.high + assert ( + result[0].status_extended + == f"Token '{token_name}' ({token_id}) has expired on {expires_at.strftime('%Y-%m-%d %H:%M UTC')}." + ) + assert result[0].team_id is None + + def test_token_no_expiration(self): + token_id = "tok_3" + token_name = "Permanent Token" + authentication_client = mock.MagicMock + authentication_client.tokens = { + token_id: VercelAuthToken( + id=token_id, + name=token_name, + expires_at=None, + ) + } + authentication_client.audit_config = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.authentication.authentication_token_not_expired.authentication_token_not_expired.authentication_client", + new=authentication_client, + ), + ): + from prowler.providers.vercel.services.authentication.authentication_token_not_expired.authentication_token_not_expired import ( + authentication_token_not_expired, + ) + + check = authentication_token_not_expired() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == token_id + assert result[0].resource_name == token_name + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Token '{token_name}' ({token_id}) does not have an expiration date set and is currently valid." + ) + assert result[0].team_id is None + + def test_token_about_to_expire(self): + """Token expiring within the default 7-day threshold gets FAIL with medium severity.""" + token_id = "tok_4" + token_name = "Expiring Soon Token" + expires_at = datetime.now(timezone.utc) + timedelta(days=3, hours=12) + authentication_client = mock.MagicMock + authentication_client.tokens = { + token_id: VercelAuthToken( + id=token_id, + name=token_name, + expires_at=expires_at, + ) + } + authentication_client.audit_config = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.authentication.authentication_token_not_expired.authentication_token_not_expired.authentication_client", + new=authentication_client, + ), + ): + from prowler.providers.vercel.services.authentication.authentication_token_not_expired.authentication_token_not_expired import ( + authentication_token_not_expired, + ) + + check = authentication_token_not_expired() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == token_id + assert result[0].resource_name == token_name + assert result[0].status == "FAIL" + assert result[0].check_metadata.Severity == Severity.medium + assert "is about to expire in 3 days" in result[0].status_extended + assert result[0].team_id is None + + def test_token_about_to_expire_custom_threshold(self): + """Token expiring within a custom threshold (14 days) gets FAIL with medium severity.""" + token_id = "tok_5" + token_name = "Custom Threshold Token" + expires_at = datetime.now(timezone.utc) + timedelta(days=10, hours=12) + authentication_client = mock.MagicMock + authentication_client.tokens = { + token_id: VercelAuthToken( + id=token_id, + name=token_name, + expires_at=expires_at, + ) + } + authentication_client.audit_config = {"days_to_expire_threshold": 14} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.authentication.authentication_token_not_expired.authentication_token_not_expired.authentication_client", + new=authentication_client, + ), + ): + from prowler.providers.vercel.services.authentication.authentication_token_not_expired.authentication_token_not_expired import ( + authentication_token_not_expired, + ) + + check = authentication_token_not_expired() + result = check.execute() + assert len(result) == 1 + assert result[0].status == "FAIL" + assert result[0].check_metadata.Severity == Severity.medium + assert "is about to expire in 10 days" in result[0].status_extended diff --git a/tests/providers/vercel/services/deployment/deployment_production_uses_stable_target/deployment_production_uses_stable_target_test.py b/tests/providers/vercel/services/deployment/deployment_production_uses_stable_target/deployment_production_uses_stable_target_test.py new file mode 100644 index 0000000000..3a92202ddd --- /dev/null +++ b/tests/providers/vercel/services/deployment/deployment_production_uses_stable_target/deployment_production_uses_stable_target_test.py @@ -0,0 +1,151 @@ +from unittest import mock + +from prowler.providers.vercel.services.deployment.deployment_service import ( + VercelDeployment, +) +from tests.providers.vercel.vercel_fixtures import ( + DEPLOYMENT_ID, + PROJECT_ID, + PROJECT_NAME, + TEAM_ID, + set_mocked_vercel_provider, +) + + +class Test_deployment_production_uses_stable_target: + def test_no_deployments(self): + deployment_client = mock.MagicMock + deployment_client.deployments = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.deployment.deployment_production_uses_stable_target.deployment_production_uses_stable_target.deployment_client", + new=deployment_client, + ), + ): + from prowler.providers.vercel.services.deployment.deployment_production_uses_stable_target.deployment_production_uses_stable_target import ( + deployment_production_uses_stable_target, + ) + + check = deployment_production_uses_stable_target() + result = check.execute() + assert len(result) == 0 + + def test_stable_branch(self): + deployment_client = mock.MagicMock + deployment_client.deployments = { + DEPLOYMENT_ID: VercelDeployment( + id=DEPLOYMENT_ID, + name="my-app-abc123", + target="production", + git_source={"branch": "main"}, + project_id=PROJECT_ID, + project_name=PROJECT_NAME, + team_id=TEAM_ID, + ) + } + deployment_client.audit_config = {"stable_branches": ["main", "master"]} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.deployment.deployment_production_uses_stable_target.deployment_production_uses_stable_target.deployment_client", + new=deployment_client, + ), + ): + from prowler.providers.vercel.services.deployment.deployment_production_uses_stable_target.deployment_production_uses_stable_target import ( + deployment_production_uses_stable_target, + ) + + check = deployment_production_uses_stable_target() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == DEPLOYMENT_ID + assert result[0].resource_name == "my-app-abc123" + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Production deployment my-app-abc123 ({DEPLOYMENT_ID}) is sourced from stable branch 'main'." + ) + assert result[0].team_id == TEAM_ID + + def test_non_stable_branch(self): + deployment_client = mock.MagicMock + deployment_client.deployments = { + DEPLOYMENT_ID: VercelDeployment( + id=DEPLOYMENT_ID, + name="my-app-abc123", + target="production", + git_source={"branch": "feature-xyz"}, + project_id=PROJECT_ID, + project_name=PROJECT_NAME, + team_id=TEAM_ID, + ) + } + deployment_client.audit_config = {"stable_branches": ["main", "master"]} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.deployment.deployment_production_uses_stable_target.deployment_production_uses_stable_target.deployment_client", + new=deployment_client, + ), + ): + from prowler.providers.vercel.services.deployment.deployment_production_uses_stable_target.deployment_production_uses_stable_target import ( + deployment_production_uses_stable_target, + ) + + check = deployment_production_uses_stable_target() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == DEPLOYMENT_ID + assert result[0].resource_name == "my-app-abc123" + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Production deployment my-app-abc123 ({DEPLOYMENT_ID}) is sourced from branch 'feature-xyz' instead of a configured stable branch (main, master)." + ) + assert result[0].team_id == TEAM_ID + + def test_non_production_skipped(self): + deployment_client = mock.MagicMock + deployment_client.deployments = { + DEPLOYMENT_ID: VercelDeployment( + id=DEPLOYMENT_ID, + name="my-app-abc123", + target="preview", + git_source={"branch": "feature-xyz"}, + project_id=PROJECT_ID, + project_name=PROJECT_NAME, + team_id=TEAM_ID, + ) + } + deployment_client.audit_config = {"stable_branches": ["main", "master"]} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.deployment.deployment_production_uses_stable_target.deployment_production_uses_stable_target.deployment_client", + new=deployment_client, + ), + ): + from prowler.providers.vercel.services.deployment.deployment_production_uses_stable_target.deployment_production_uses_stable_target import ( + deployment_production_uses_stable_target, + ) + + check = deployment_production_uses_stable_target() + result = check.execute() + assert len(result) == 0 diff --git a/tests/providers/vercel/services/domain/domain_dns_properly_configured/domain_dns_properly_configured_test.py b/tests/providers/vercel/services/domain/domain_dns_properly_configured/domain_dns_properly_configured_test.py new file mode 100644 index 0000000000..2562a27a14 --- /dev/null +++ b/tests/providers/vercel/services/domain/domain_dns_properly_configured/domain_dns_properly_configured_test.py @@ -0,0 +1,108 @@ +from unittest import mock + +from prowler.providers.vercel.services.domain.domain_service import VercelDomain +from tests.providers.vercel.vercel_fixtures import ( + DOMAIN_NAME, + TEAM_ID, + set_mocked_vercel_provider, +) + +DOMAIN_ID = "dom_test001" + + +class Test_domain_dns_properly_configured: + def test_no_domains(self): + domain_client = mock.MagicMock + domain_client.domains = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.domain.domain_dns_properly_configured.domain_dns_properly_configured.domain_client", + new=domain_client, + ), + ): + from prowler.providers.vercel.services.domain.domain_dns_properly_configured.domain_dns_properly_configured import ( + domain_dns_properly_configured, + ) + + check = domain_dns_properly_configured() + result = check.execute() + assert len(result) == 0 + + def test_configured(self): + domain_client = mock.MagicMock + domain_client.domains = { + DOMAIN_NAME: VercelDomain( + name=DOMAIN_NAME, + id=DOMAIN_ID, + configured=True, + team_id=TEAM_ID, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.domain.domain_dns_properly_configured.domain_dns_properly_configured.domain_client", + new=domain_client, + ), + ): + from prowler.providers.vercel.services.domain.domain_dns_properly_configured.domain_dns_properly_configured import ( + domain_dns_properly_configured, + ) + + check = domain_dns_properly_configured() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == DOMAIN_ID + assert result[0].resource_name == DOMAIN_NAME + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Domain {DOMAIN_NAME} has DNS properly configured." + ) + assert result[0].team_id == TEAM_ID + + def test_not_configured(self): + domain_client = mock.MagicMock + domain_client.domains = { + DOMAIN_NAME: VercelDomain( + name=DOMAIN_NAME, + id=DOMAIN_ID, + configured=False, + team_id=TEAM_ID, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.domain.domain_dns_properly_configured.domain_dns_properly_configured.domain_client", + new=domain_client, + ), + ): + from prowler.providers.vercel.services.domain.domain_dns_properly_configured.domain_dns_properly_configured import ( + domain_dns_properly_configured, + ) + + check = domain_dns_properly_configured() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == DOMAIN_ID + assert result[0].resource_name == DOMAIN_NAME + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Domain {DOMAIN_NAME} does not have DNS properly configured. The domain may not be resolving to Vercel's infrastructure." + ) + assert result[0].team_id == TEAM_ID diff --git a/tests/providers/vercel/services/domain/domain_ssl_certificate_valid/domain_ssl_certificate_valid_test.py b/tests/providers/vercel/services/domain/domain_ssl_certificate_valid/domain_ssl_certificate_valid_test.py new file mode 100644 index 0000000000..4b906731ab --- /dev/null +++ b/tests/providers/vercel/services/domain/domain_ssl_certificate_valid/domain_ssl_certificate_valid_test.py @@ -0,0 +1,236 @@ +from datetime import datetime, timedelta, timezone +from unittest import mock + +from prowler.providers.vercel.services.domain.domain_service import ( + VercelDomain, + VercelSSLCertificate, +) +from tests.providers.vercel.vercel_fixtures import ( + DOMAIN_NAME, + TEAM_ID, + set_mocked_vercel_provider, +) + + +class Test_domain_ssl_certificate_valid: + def test_no_domains(self): + domain_client = mock.MagicMock + domain_client.audit_config = {"days_to_expire_threshold": 7} + domain_client.domains = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.domain.domain_ssl_certificate_valid.domain_ssl_certificate_valid.domain_client", + new=domain_client, + ), + ): + from prowler.providers.vercel.services.domain.domain_ssl_certificate_valid.domain_ssl_certificate_valid import ( + domain_ssl_certificate_valid, + ) + + check = domain_ssl_certificate_valid() + result = check.execute() + assert len(result) == 0 + + def test_ssl_valid_not_expiring_soon(self): + domain_client = mock.MagicMock + domain_client.audit_config = {"days_to_expire_threshold": 7} + domain_client.domains = { + DOMAIN_NAME: VercelDomain( + name=DOMAIN_NAME, + id="dom_test", + verified=True, + ssl_certificate=VercelSSLCertificate( + id="cert_1", + expires_at=datetime.now(timezone.utc) + timedelta(days=90), + auto_renew=True, + ), + team_id=TEAM_ID, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.domain.domain_ssl_certificate_valid.domain_ssl_certificate_valid.domain_client", + new=domain_client, + ), + ): + from prowler.providers.vercel.services.domain.domain_ssl_certificate_valid.domain_ssl_certificate_valid import ( + domain_ssl_certificate_valid, + ) + + check = domain_ssl_certificate_valid() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == "dom_test" + assert result[0].resource_name == DOMAIN_NAME + assert result[0].status == "PASS" + assert "valid SSL certificate" in result[0].status_extended + assert result[0].team_id == TEAM_ID + + def test_ssl_missing(self): + domain_client = mock.MagicMock + domain_client.audit_config = {"days_to_expire_threshold": 7} + domain_client.domains = { + DOMAIN_NAME: VercelDomain( + name=DOMAIN_NAME, + id="dom_test", + verified=True, + ssl_certificate=None, + team_id=TEAM_ID, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.domain.domain_ssl_certificate_valid.domain_ssl_certificate_valid.domain_client", + new=domain_client, + ), + ): + from prowler.providers.vercel.services.domain.domain_ssl_certificate_valid.domain_ssl_certificate_valid import ( + domain_ssl_certificate_valid, + ) + + check = domain_ssl_certificate_valid() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == "dom_test" + assert result[0].resource_name == DOMAIN_NAME + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Domain {DOMAIN_NAME} does not have an SSL certificate provisioned." + ) + assert result[0].team_id == TEAM_ID + + def test_ssl_expired(self): + domain_client = mock.MagicMock + domain_client.audit_config = {"days_to_expire_threshold": 7} + domain_client.domains = { + DOMAIN_NAME: VercelDomain( + name=DOMAIN_NAME, + id="dom_test", + verified=True, + ssl_certificate=VercelSSLCertificate( + id="cert_1", + expires_at=datetime.now(timezone.utc) - timedelta(days=10), + auto_renew=False, + ), + team_id=TEAM_ID, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.domain.domain_ssl_certificate_valid.domain_ssl_certificate_valid.domain_client", + new=domain_client, + ), + ): + from prowler.providers.vercel.services.domain.domain_ssl_certificate_valid.domain_ssl_certificate_valid import ( + domain_ssl_certificate_valid, + ) + + check = domain_ssl_certificate_valid() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == "dom_test" + assert result[0].resource_name == DOMAIN_NAME + assert result[0].status == "FAIL" + assert "expired" in result[0].status_extended + assert result[0].team_id == TEAM_ID + + def test_ssl_expiring_soon(self): + domain_client = mock.MagicMock + domain_client.audit_config = {"days_to_expire_threshold": 7} + domain_client.domains = { + DOMAIN_NAME: VercelDomain( + name=DOMAIN_NAME, + id="dom_test", + verified=True, + ssl_certificate=VercelSSLCertificate( + id="cert_1", + expires_at=datetime.now(timezone.utc) + timedelta(days=3), + auto_renew=False, + ), + team_id=TEAM_ID, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.domain.domain_ssl_certificate_valid.domain_ssl_certificate_valid.domain_client", + new=domain_client, + ), + ): + from prowler.providers.vercel.services.domain.domain_ssl_certificate_valid.domain_ssl_certificate_valid import ( + domain_ssl_certificate_valid, + ) + + check = domain_ssl_certificate_valid() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == "dom_test" + assert result[0].resource_name == DOMAIN_NAME + assert result[0].status == "FAIL" + assert "expiring" in result[0].status_extended + assert result[0].team_id == TEAM_ID + + def test_ssl_no_expiry_date(self): + domain_client = mock.MagicMock + domain_client.audit_config = {"days_to_expire_threshold": 7} + domain_client.domains = { + DOMAIN_NAME: VercelDomain( + name=DOMAIN_NAME, + id="dom_test", + verified=True, + ssl_certificate=VercelSSLCertificate( + id="cert_1", + expires_at=None, + auto_renew=True, + ), + team_id=TEAM_ID, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.domain.domain_ssl_certificate_valid.domain_ssl_certificate_valid.domain_client", + new=domain_client, + ), + ): + from prowler.providers.vercel.services.domain.domain_ssl_certificate_valid.domain_ssl_certificate_valid import ( + domain_ssl_certificate_valid, + ) + + check = domain_ssl_certificate_valid() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == "dom_test" + assert result[0].resource_name == DOMAIN_NAME + assert result[0].status == "PASS" + assert "provisioned" in result[0].status_extended + assert result[0].team_id == TEAM_ID diff --git a/tests/providers/vercel/services/domain/domain_verified/domain_verified_test.py b/tests/providers/vercel/services/domain/domain_verified/domain_verified_test.py new file mode 100644 index 0000000000..3634b69a07 --- /dev/null +++ b/tests/providers/vercel/services/domain/domain_verified/domain_verified_test.py @@ -0,0 +1,105 @@ +from unittest import mock + +from prowler.providers.vercel.services.domain.domain_service import VercelDomain +from tests.providers.vercel.vercel_fixtures import ( + DOMAIN_NAME, + TEAM_ID, + set_mocked_vercel_provider, +) + +DOMAIN_ID = "dom_test001" + + +class Test_domain_verified: + def test_no_domains(self): + domain_client = mock.MagicMock + domain_client.domains = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.domain.domain_verified.domain_verified.domain_client", + new=domain_client, + ), + ): + from prowler.providers.vercel.services.domain.domain_verified.domain_verified import ( + domain_verified, + ) + + check = domain_verified() + result = check.execute() + assert len(result) == 0 + + def test_verified(self): + domain_client = mock.MagicMock + domain_client.domains = { + DOMAIN_NAME: VercelDomain( + name=DOMAIN_NAME, + id=DOMAIN_ID, + verified=True, + team_id=TEAM_ID, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.domain.domain_verified.domain_verified.domain_client", + new=domain_client, + ), + ): + from prowler.providers.vercel.services.domain.domain_verified.domain_verified import ( + domain_verified, + ) + + check = domain_verified() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == DOMAIN_ID + assert result[0].resource_name == DOMAIN_NAME + assert result[0].status == "PASS" + assert result[0].status_extended == f"Domain {DOMAIN_NAME} is verified." + assert result[0].team_id == TEAM_ID + + def test_not_verified(self): + domain_client = mock.MagicMock + domain_client.domains = { + DOMAIN_NAME: VercelDomain( + name=DOMAIN_NAME, + id=DOMAIN_ID, + verified=False, + team_id=TEAM_ID, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.domain.domain_verified.domain_verified.domain_client", + new=domain_client, + ), + ): + from prowler.providers.vercel.services.domain.domain_verified.domain_verified import ( + domain_verified, + ) + + check = domain_verified() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == DOMAIN_ID + assert result[0].resource_name == DOMAIN_NAME + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Domain {DOMAIN_NAME} is not verified. The domain may not be serving traffic correctly." + ) + assert result[0].team_id == TEAM_ID diff --git a/tests/providers/vercel/services/project/project_auto_expose_system_env_disabled/project_auto_expose_system_env_disabled_test.py b/tests/providers/vercel/services/project/project_auto_expose_system_env_disabled/project_auto_expose_system_env_disabled_test.py new file mode 100644 index 0000000000..8738107467 --- /dev/null +++ b/tests/providers/vercel/services/project/project_auto_expose_system_env_disabled/project_auto_expose_system_env_disabled_test.py @@ -0,0 +1,107 @@ +from unittest import mock + +from prowler.providers.vercel.services.project.project_service import VercelProject +from tests.providers.vercel.vercel_fixtures import ( + PROJECT_ID, + PROJECT_NAME, + TEAM_ID, + set_mocked_vercel_provider, +) + + +class Test_project_auto_expose_system_env_disabled: + def test_no_projects(self): + project_client = mock.MagicMock + project_client.projects = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_auto_expose_system_env_disabled.project_auto_expose_system_env_disabled.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_auto_expose_system_env_disabled.project_auto_expose_system_env_disabled import ( + project_auto_expose_system_env_disabled, + ) + + check = project_auto_expose_system_env_disabled() + result = check.execute() + assert len(result) == 0 + + def test_auto_expose_disabled(self): + project_client = mock.MagicMock + project_client.projects = { + PROJECT_ID: VercelProject( + id=PROJECT_ID, + name=PROJECT_NAME, + team_id=TEAM_ID, + auto_expose_system_envs=False, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_auto_expose_system_env_disabled.project_auto_expose_system_env_disabled.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_auto_expose_system_env_disabled.project_auto_expose_system_env_disabled import ( + project_auto_expose_system_env_disabled, + ) + + check = project_auto_expose_system_env_disabled() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} does not automatically expose system environment variables to the build process." + ) + assert result[0].team_id == TEAM_ID + + def test_auto_expose_enabled(self): + project_client = mock.MagicMock + project_client.projects = { + PROJECT_ID: VercelProject( + id=PROJECT_ID, + name=PROJECT_NAME, + team_id=TEAM_ID, + auto_expose_system_envs=True, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_auto_expose_system_env_disabled.project_auto_expose_system_env_disabled.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_auto_expose_system_env_disabled.project_auto_expose_system_env_disabled import ( + project_auto_expose_system_env_disabled, + ) + + check = project_auto_expose_system_env_disabled() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} automatically exposes system environment variables to the build process." + ) + assert result[0].team_id == TEAM_ID diff --git a/tests/providers/vercel/services/project/project_deployment_protection_enabled/project_deployment_protection_enabled_test.py b/tests/providers/vercel/services/project/project_deployment_protection_enabled/project_deployment_protection_enabled_test.py new file mode 100644 index 0000000000..a37ce91048 --- /dev/null +++ b/tests/providers/vercel/services/project/project_deployment_protection_enabled/project_deployment_protection_enabled_test.py @@ -0,0 +1,151 @@ +from unittest import mock + +from prowler.providers.vercel.services.project.project_service import ( + DeploymentProtectionConfig, + VercelProject, +) +from tests.providers.vercel.vercel_fixtures import ( + PROJECT_ID, + PROJECT_NAME, + TEAM_ID, + set_mocked_vercel_provider, +) + + +class Test_project_deployment_protection_enabled: + def test_no_projects(self): + project_client = mock.MagicMock + project_client.projects = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_deployment_protection_enabled.project_deployment_protection_enabled.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_deployment_protection_enabled.project_deployment_protection_enabled import ( + project_deployment_protection_enabled, + ) + + check = project_deployment_protection_enabled() + result = check.execute() + assert len(result) == 0 + + def test_deployment_protection_enabled(self): + project_client = mock.MagicMock + project_client.projects = { + PROJECT_ID: VercelProject( + id=PROJECT_ID, + name=PROJECT_NAME, + team_id=TEAM_ID, + deployment_protection=DeploymentProtectionConfig( + level="standard", + ), + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_deployment_protection_enabled.project_deployment_protection_enabled.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_deployment_protection_enabled.project_deployment_protection_enabled import ( + project_deployment_protection_enabled, + ) + + check = project_deployment_protection_enabled() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} has deployment protection enabled with level 'standard' on preview deployments." + ) + assert result[0].team_id == TEAM_ID + + def test_deployment_protection_disabled(self): + project_client = mock.MagicMock + project_client.projects = { + PROJECT_ID: VercelProject( + id=PROJECT_ID, + name=PROJECT_NAME, + team_id=TEAM_ID, + deployment_protection=DeploymentProtectionConfig( + level="none", + ), + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_deployment_protection_enabled.project_deployment_protection_enabled.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_deployment_protection_enabled.project_deployment_protection_enabled import ( + project_deployment_protection_enabled, + ) + + check = project_deployment_protection_enabled() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} does not have deployment protection enabled on preview deployments." + ) + assert result[0].team_id == TEAM_ID + + def test_deployment_protection_none(self): + project_client = mock.MagicMock + project_client.projects = { + PROJECT_ID: VercelProject( + id=PROJECT_ID, + name=PROJECT_NAME, + team_id=TEAM_ID, + deployment_protection=None, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_deployment_protection_enabled.project_deployment_protection_enabled.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_deployment_protection_enabled.project_deployment_protection_enabled import ( + project_deployment_protection_enabled, + ) + + check = project_deployment_protection_enabled() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} does not have deployment protection enabled on preview deployments." + ) + assert result[0].team_id == TEAM_ID diff --git a/tests/providers/vercel/services/project/project_directory_listing_disabled/project_directory_listing_disabled_test.py b/tests/providers/vercel/services/project/project_directory_listing_disabled/project_directory_listing_disabled_test.py new file mode 100644 index 0000000000..63bf279e06 --- /dev/null +++ b/tests/providers/vercel/services/project/project_directory_listing_disabled/project_directory_listing_disabled_test.py @@ -0,0 +1,107 @@ +from unittest import mock + +from prowler.providers.vercel.services.project.project_service import VercelProject +from tests.providers.vercel.vercel_fixtures import ( + PROJECT_ID, + PROJECT_NAME, + TEAM_ID, + set_mocked_vercel_provider, +) + + +class Test_project_directory_listing_disabled: + def test_no_projects(self): + project_client = mock.MagicMock + project_client.projects = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_directory_listing_disabled.project_directory_listing_disabled.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_directory_listing_disabled.project_directory_listing_disabled import ( + project_directory_listing_disabled, + ) + + check = project_directory_listing_disabled() + result = check.execute() + assert len(result) == 0 + + def test_listing_disabled(self): + project_client = mock.MagicMock + project_client.projects = { + PROJECT_ID: VercelProject( + id=PROJECT_ID, + name=PROJECT_NAME, + team_id=TEAM_ID, + directory_listing=False, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_directory_listing_disabled.project_directory_listing_disabled.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_directory_listing_disabled.project_directory_listing_disabled import ( + project_directory_listing_disabled, + ) + + check = project_directory_listing_disabled() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} has directory listing disabled." + ) + assert result[0].team_id == TEAM_ID + + def test_listing_enabled(self): + project_client = mock.MagicMock + project_client.projects = { + PROJECT_ID: VercelProject( + id=PROJECT_ID, + name=PROJECT_NAME, + team_id=TEAM_ID, + directory_listing=True, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_directory_listing_disabled.project_directory_listing_disabled.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_directory_listing_disabled.project_directory_listing_disabled import ( + project_directory_listing_disabled, + ) + + check = project_directory_listing_disabled() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} has directory listing enabled, which may expose the project's file structure to visitors." + ) + assert result[0].team_id == TEAM_ID diff --git a/tests/providers/vercel/services/project/project_environment_no_overly_broad_target/project_environment_no_overly_broad_target_test.py b/tests/providers/vercel/services/project/project_environment_no_overly_broad_target/project_environment_no_overly_broad_target_test.py new file mode 100644 index 0000000000..633d28a8e3 --- /dev/null +++ b/tests/providers/vercel/services/project/project_environment_no_overly_broad_target/project_environment_no_overly_broad_target_test.py @@ -0,0 +1,126 @@ +from unittest import mock + +from prowler.providers.vercel.services.project.project_service import ( + VercelEnvironmentVariable, + VercelProject, +) +from tests.providers.vercel.vercel_fixtures import ( + PROJECT_ID, + PROJECT_NAME, + TEAM_ID, + set_mocked_vercel_provider, +) + + +class Test_project_environment_no_overly_broad_target: + def test_no_projects(self): + project_client = mock.MagicMock + project_client.projects = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_environment_no_overly_broad_target.project_environment_no_overly_broad_target.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_environment_no_overly_broad_target.project_environment_no_overly_broad_target import ( + project_environment_no_overly_broad_target, + ) + + check = project_environment_no_overly_broad_target() + result = check.execute() + assert len(result) == 0 + + def test_no_broad_vars(self): + project_client = mock.MagicMock + project_client.projects = { + PROJECT_ID: VercelProject( + id=PROJECT_ID, + name=PROJECT_NAME, + team_id=TEAM_ID, + environment_variables=[ + VercelEnvironmentVariable( + id="env_001", + key="DATABASE_URL", + type="encrypted", + target=["production"], + project_id=PROJECT_ID, + ), + ], + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_environment_no_overly_broad_target.project_environment_no_overly_broad_target.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_environment_no_overly_broad_target.project_environment_no_overly_broad_target import ( + project_environment_no_overly_broad_target, + ) + + check = project_environment_no_overly_broad_target() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} has no environment variables targeting all three environments simultaneously." + ) + assert result[0].team_id == TEAM_ID + + def test_var_targets_all_envs(self): + project_client = mock.MagicMock + project_client.projects = { + PROJECT_ID: VercelProject( + id=PROJECT_ID, + name=PROJECT_NAME, + team_id=TEAM_ID, + environment_variables=[ + VercelEnvironmentVariable( + id="env_002", + key="SHARED_VAR", + type="plain", + target=["production", "preview", "development"], + project_id=PROJECT_ID, + ), + ], + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_environment_no_overly_broad_target.project_environment_no_overly_broad_target.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_environment_no_overly_broad_target.project_environment_no_overly_broad_target import ( + project_environment_no_overly_broad_target, + ) + + check = project_environment_no_overly_broad_target() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} has 1 environment variable(s) targeting all three environments: SHARED_VAR." + ) + assert result[0].team_id == TEAM_ID diff --git a/tests/providers/vercel/services/project/project_environment_no_secrets_in_plain_type/project_environment_no_secrets_in_plain_type_test.py b/tests/providers/vercel/services/project/project_environment_no_secrets_in_plain_type/project_environment_no_secrets_in_plain_type_test.py new file mode 100644 index 0000000000..62de735634 --- /dev/null +++ b/tests/providers/vercel/services/project/project_environment_no_secrets_in_plain_type/project_environment_no_secrets_in_plain_type_test.py @@ -0,0 +1,172 @@ +from unittest import mock + +from prowler.providers.vercel.services.project.project_service import ( + VercelEnvironmentVariable, + VercelProject, +) +from tests.providers.vercel.vercel_fixtures import ( + PROJECT_ID, + PROJECT_NAME, + TEAM_ID, + set_mocked_vercel_provider, +) + + +class Test_project_environment_no_secrets_in_plain_type: + def test_no_projects(self): + project_client = mock.MagicMock + project_client.audit_config = {} + project_client.projects = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_environment_no_secrets_in_plain_type.project_environment_no_secrets_in_plain_type.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_environment_no_secrets_in_plain_type.project_environment_no_secrets_in_plain_type import ( + project_environment_no_secrets_in_plain_type, + ) + + check = project_environment_no_secrets_in_plain_type() + result = check.execute() + assert len(result) == 0 + + def test_no_secret_keys_plain(self): + project_client = mock.MagicMock + project_client.audit_config = {} + project_client.projects = { + PROJECT_ID: VercelProject( + id=PROJECT_ID, + name=PROJECT_NAME, + team_id=TEAM_ID, + environment_variables=[ + VercelEnvironmentVariable( + id="env_001", + key="DATABASE_PASSWORD", + type="encrypted", + project_id=PROJECT_ID, + ), + ], + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_environment_no_secrets_in_plain_type.project_environment_no_secrets_in_plain_type.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_environment_no_secrets_in_plain_type.project_environment_no_secrets_in_plain_type import ( + project_environment_no_secrets_in_plain_type, + ) + + check = project_environment_no_secrets_in_plain_type() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} has no secret-like environment variables stored as plain text." + ) + assert result[0].team_id == TEAM_ID + + def test_secret_key_plain(self): + project_client = mock.MagicMock + project_client.audit_config = {} + project_client.projects = { + PROJECT_ID: VercelProject( + id=PROJECT_ID, + name=PROJECT_NAME, + team_id=TEAM_ID, + environment_variables=[ + VercelEnvironmentVariable( + id="env_002", + key="MY_API_KEY", + type="plain", + project_id=PROJECT_ID, + ), + ], + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_environment_no_secrets_in_plain_type.project_environment_no_secrets_in_plain_type.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_environment_no_secrets_in_plain_type.project_environment_no_secrets_in_plain_type import ( + project_environment_no_secrets_in_plain_type, + ) + + check = project_environment_no_secrets_in_plain_type() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} has 1 secret-like environment variable(s) stored as plain text: MY_API_KEY." + ) + assert result[0].team_id == TEAM_ID + + def test_non_secret_key_plain(self): + project_client = mock.MagicMock + project_client.audit_config = {} + project_client.projects = { + PROJECT_ID: VercelProject( + id=PROJECT_ID, + name=PROJECT_NAME, + team_id=TEAM_ID, + environment_variables=[ + VercelEnvironmentVariable( + id="env_003", + key="APP_NAME", + type="plain", + project_id=PROJECT_ID, + ), + ], + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_environment_no_secrets_in_plain_type.project_environment_no_secrets_in_plain_type.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_environment_no_secrets_in_plain_type.project_environment_no_secrets_in_plain_type import ( + project_environment_no_secrets_in_plain_type, + ) + + check = project_environment_no_secrets_in_plain_type() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} has no secret-like environment variables stored as plain text." + ) + assert result[0].team_id == TEAM_ID diff --git a/tests/providers/vercel/services/project/project_environment_production_vars_not_in_preview/project_environment_production_vars_not_in_preview_test.py b/tests/providers/vercel/services/project/project_environment_production_vars_not_in_preview/project_environment_production_vars_not_in_preview_test.py new file mode 100644 index 0000000000..b8796ef19e --- /dev/null +++ b/tests/providers/vercel/services/project/project_environment_production_vars_not_in_preview/project_environment_production_vars_not_in_preview_test.py @@ -0,0 +1,171 @@ +from unittest import mock + +from prowler.providers.vercel.services.project.project_service import ( + VercelEnvironmentVariable, + VercelProject, +) +from tests.providers.vercel.vercel_fixtures import ( + PROJECT_ID, + PROJECT_NAME, + TEAM_ID, + set_mocked_vercel_provider, +) + + +class Test_project_environment_production_vars_not_in_preview: + def test_no_projects(self): + project_client = mock.MagicMock + project_client.projects = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_environment_production_vars_not_in_preview.project_environment_production_vars_not_in_preview.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_environment_production_vars_not_in_preview.project_environment_production_vars_not_in_preview import ( + project_environment_production_vars_not_in_preview, + ) + + check = project_environment_production_vars_not_in_preview() + result = check.execute() + assert len(result) == 0 + + def test_prod_only_secret(self): + project_client = mock.MagicMock + project_client.projects = { + PROJECT_ID: VercelProject( + id=PROJECT_ID, + name=PROJECT_NAME, + team_id=TEAM_ID, + environment_variables=[ + VercelEnvironmentVariable( + id="env_001", + key="DB_PASSWORD", + type="secret", + target=["production"], + project_id=PROJECT_ID, + ), + ], + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_environment_production_vars_not_in_preview.project_environment_production_vars_not_in_preview.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_environment_production_vars_not_in_preview.project_environment_production_vars_not_in_preview import ( + project_environment_production_vars_not_in_preview, + ) + + check = project_environment_production_vars_not_in_preview() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} has no sensitive production environment variables leaking to preview deployments." + ) + assert result[0].team_id == TEAM_ID + + def test_prod_and_preview_secret(self): + project_client = mock.MagicMock + project_client.projects = { + PROJECT_ID: VercelProject( + id=PROJECT_ID, + name=PROJECT_NAME, + team_id=TEAM_ID, + environment_variables=[ + VercelEnvironmentVariable( + id="env_002", + key="DB_PASSWORD", + type="secret", + target=["production", "preview"], + project_id=PROJECT_ID, + ), + ], + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_environment_production_vars_not_in_preview.project_environment_production_vars_not_in_preview.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_environment_production_vars_not_in_preview.project_environment_production_vars_not_in_preview import ( + project_environment_production_vars_not_in_preview, + ) + + check = project_environment_production_vars_not_in_preview() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} has 1 sensitive production environment variable(s) also targeting preview: DB_PASSWORD." + ) + assert result[0].team_id == TEAM_ID + + def test_prod_and_preview_plain(self): + project_client = mock.MagicMock + project_client.projects = { + PROJECT_ID: VercelProject( + id=PROJECT_ID, + name=PROJECT_NAME, + team_id=TEAM_ID, + environment_variables=[ + VercelEnvironmentVariable( + id="env_003", + key="APP_URL", + type="plain", + target=["production", "preview"], + project_id=PROJECT_ID, + ), + ], + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_environment_production_vars_not_in_preview.project_environment_production_vars_not_in_preview.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_environment_production_vars_not_in_preview.project_environment_production_vars_not_in_preview import ( + project_environment_production_vars_not_in_preview, + ) + + check = project_environment_production_vars_not_in_preview() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} has no sensitive production environment variables leaking to preview deployments." + ) + assert result[0].team_id == TEAM_ID diff --git a/tests/providers/vercel/services/project/project_git_fork_protection_enabled/project_git_fork_protection_enabled_test.py b/tests/providers/vercel/services/project/project_git_fork_protection_enabled/project_git_fork_protection_enabled_test.py new file mode 100644 index 0000000000..bd3dad4138 --- /dev/null +++ b/tests/providers/vercel/services/project/project_git_fork_protection_enabled/project_git_fork_protection_enabled_test.py @@ -0,0 +1,107 @@ +from unittest import mock + +from prowler.providers.vercel.services.project.project_service import VercelProject +from tests.providers.vercel.vercel_fixtures import ( + PROJECT_ID, + PROJECT_NAME, + TEAM_ID, + set_mocked_vercel_provider, +) + + +class Test_project_git_fork_protection_enabled: + def test_no_projects(self): + project_client = mock.MagicMock + project_client.projects = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_git_fork_protection_enabled.project_git_fork_protection_enabled.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_git_fork_protection_enabled.project_git_fork_protection_enabled import ( + project_git_fork_protection_enabled, + ) + + check = project_git_fork_protection_enabled() + result = check.execute() + assert len(result) == 0 + + def test_fork_protection_enabled(self): + project_client = mock.MagicMock + project_client.projects = { + PROJECT_ID: VercelProject( + id=PROJECT_ID, + name=PROJECT_NAME, + team_id=TEAM_ID, + git_fork_protection=True, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_git_fork_protection_enabled.project_git_fork_protection_enabled.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_git_fork_protection_enabled.project_git_fork_protection_enabled import ( + project_git_fork_protection_enabled, + ) + + check = project_git_fork_protection_enabled() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} has Git fork protection enabled, preventing untrusted forks from accessing secrets." + ) + assert result[0].team_id == TEAM_ID + + def test_fork_protection_disabled(self): + project_client = mock.MagicMock + project_client.projects = { + PROJECT_ID: VercelProject( + id=PROJECT_ID, + name=PROJECT_NAME, + team_id=TEAM_ID, + git_fork_protection=False, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_git_fork_protection_enabled.project_git_fork_protection_enabled.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_git_fork_protection_enabled.project_git_fork_protection_enabled import ( + project_git_fork_protection_enabled, + ) + + check = project_git_fork_protection_enabled() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} does not have Git fork protection enabled, allowing forks to access environment variables and trigger deployments." + ) + assert result[0].team_id == TEAM_ID diff --git a/tests/providers/vercel/services/project/project_password_protection_enabled/project_password_protection_enabled_test.py b/tests/providers/vercel/services/project/project_password_protection_enabled/project_password_protection_enabled_test.py new file mode 100644 index 0000000000..9de3eb874a --- /dev/null +++ b/tests/providers/vercel/services/project/project_password_protection_enabled/project_password_protection_enabled_test.py @@ -0,0 +1,144 @@ +from unittest import mock + +from prowler.providers.vercel.services.project.project_service import VercelProject +from tests.providers.vercel.vercel_fixtures import ( + PROJECT_ID, + PROJECT_NAME, + TEAM_ID, + set_mocked_vercel_provider, +) + + +class Test_project_password_protection_enabled: + def test_no_projects(self): + project_client = mock.MagicMock + project_client.projects = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_password_protection_enabled.project_password_protection_enabled.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_password_protection_enabled.project_password_protection_enabled import ( + project_password_protection_enabled, + ) + + check = project_password_protection_enabled() + result = check.execute() + assert len(result) == 0 + + def test_password_protection_configured(self): + project_client = mock.MagicMock + project_client.projects = { + PROJECT_ID: VercelProject( + id=PROJECT_ID, + name=PROJECT_NAME, + team_id=TEAM_ID, + password_protection={"deploymentType": "all"}, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_password_protection_enabled.project_password_protection_enabled.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_password_protection_enabled.project_password_protection_enabled import ( + project_password_protection_enabled, + ) + + check = project_password_protection_enabled() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} has password protection configured to restrict access to deployments." + ) + assert result[0].team_id == TEAM_ID + + def test_empty_dict_password_protection(self): + project_client = mock.MagicMock + project_client.projects = { + PROJECT_ID: VercelProject( + id=PROJECT_ID, + name=PROJECT_NAME, + team_id=TEAM_ID, + password_protection={}, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_password_protection_enabled.project_password_protection_enabled.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_password_protection_enabled.project_password_protection_enabled import ( + project_password_protection_enabled, + ) + + check = project_password_protection_enabled() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} does not have password protection configured for deployments." + ) + assert result[0].team_id == TEAM_ID + + def test_no_password_protection(self): + project_client = mock.MagicMock + project_client.projects = { + PROJECT_ID: VercelProject( + id=PROJECT_ID, + name=PROJECT_NAME, + team_id=TEAM_ID, + password_protection=None, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_password_protection_enabled.project_password_protection_enabled.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_password_protection_enabled.project_password_protection_enabled import ( + project_password_protection_enabled, + ) + + check = project_password_protection_enabled() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} does not have password protection configured for deployments." + ) + assert result[0].team_id == TEAM_ID diff --git a/tests/providers/vercel/services/project/project_production_deployment_protection_enabled/project_production_deployment_protection_enabled_test.py b/tests/providers/vercel/services/project/project_production_deployment_protection_enabled/project_production_deployment_protection_enabled_test.py new file mode 100644 index 0000000000..ff2517fbd3 --- /dev/null +++ b/tests/providers/vercel/services/project/project_production_deployment_protection_enabled/project_production_deployment_protection_enabled_test.py @@ -0,0 +1,151 @@ +from unittest import mock + +from prowler.providers.vercel.services.project.project_service import ( + DeploymentProtectionConfig, + VercelProject, +) +from tests.providers.vercel.vercel_fixtures import ( + PROJECT_ID, + PROJECT_NAME, + TEAM_ID, + set_mocked_vercel_provider, +) + + +class Test_project_production_deployment_protection_enabled: + def test_no_projects(self): + project_client = mock.MagicMock + project_client.projects = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_production_deployment_protection_enabled.project_production_deployment_protection_enabled.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_production_deployment_protection_enabled.project_production_deployment_protection_enabled import ( + project_production_deployment_protection_enabled, + ) + + check = project_production_deployment_protection_enabled() + result = check.execute() + assert len(result) == 0 + + def test_protection_enabled(self): + project_client = mock.MagicMock + project_client.projects = { + PROJECT_ID: VercelProject( + id=PROJECT_ID, + name=PROJECT_NAME, + team_id=TEAM_ID, + production_deployment_protection=DeploymentProtectionConfig( + level="standard", + ), + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_production_deployment_protection_enabled.project_production_deployment_protection_enabled.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_production_deployment_protection_enabled.project_production_deployment_protection_enabled import ( + project_production_deployment_protection_enabled, + ) + + check = project_production_deployment_protection_enabled() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} has production deployment protection enabled with level 'standard'." + ) + assert result[0].team_id == TEAM_ID + + def test_protection_none_level(self): + project_client = mock.MagicMock + project_client.projects = { + PROJECT_ID: VercelProject( + id=PROJECT_ID, + name=PROJECT_NAME, + team_id=TEAM_ID, + production_deployment_protection=DeploymentProtectionConfig( + level="none", + ), + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_production_deployment_protection_enabled.project_production_deployment_protection_enabled.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_production_deployment_protection_enabled.project_production_deployment_protection_enabled import ( + project_production_deployment_protection_enabled, + ) + + check = project_production_deployment_protection_enabled() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} does not have deployment protection enabled on production deployments." + ) + assert result[0].team_id == TEAM_ID + + def test_protection_null(self): + project_client = mock.MagicMock + project_client.projects = { + PROJECT_ID: VercelProject( + id=PROJECT_ID, + name=PROJECT_NAME, + team_id=TEAM_ID, + production_deployment_protection=None, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_production_deployment_protection_enabled.project_production_deployment_protection_enabled.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_production_deployment_protection_enabled.project_production_deployment_protection_enabled import ( + project_production_deployment_protection_enabled, + ) + + check = project_production_deployment_protection_enabled() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} does not have deployment protection enabled on production deployments." + ) + assert result[0].team_id == TEAM_ID diff --git a/tests/providers/vercel/services/project/project_skew_protection_enabled/project_skew_protection_enabled_test.py b/tests/providers/vercel/services/project/project_skew_protection_enabled/project_skew_protection_enabled_test.py new file mode 100644 index 0000000000..19d1ce8885 --- /dev/null +++ b/tests/providers/vercel/services/project/project_skew_protection_enabled/project_skew_protection_enabled_test.py @@ -0,0 +1,107 @@ +from unittest import mock + +from prowler.providers.vercel.services.project.project_service import VercelProject +from tests.providers.vercel.vercel_fixtures import ( + PROJECT_ID, + PROJECT_NAME, + TEAM_ID, + set_mocked_vercel_provider, +) + + +class Test_project_skew_protection_enabled: + def test_no_projects(self): + project_client = mock.MagicMock + project_client.projects = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_skew_protection_enabled.project_skew_protection_enabled.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_skew_protection_enabled.project_skew_protection_enabled import ( + project_skew_protection_enabled, + ) + + check = project_skew_protection_enabled() + result = check.execute() + assert len(result) == 0 + + def test_skew_protection_enabled(self): + project_client = mock.MagicMock + project_client.projects = { + PROJECT_ID: VercelProject( + id=PROJECT_ID, + name=PROJECT_NAME, + team_id=TEAM_ID, + skew_protection=True, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_skew_protection_enabled.project_skew_protection_enabled.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_skew_protection_enabled.project_skew_protection_enabled import ( + project_skew_protection_enabled, + ) + + check = project_skew_protection_enabled() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} has skew protection enabled, ensuring consistent deployment versions during rollouts." + ) + assert result[0].team_id == TEAM_ID + + def test_skew_protection_disabled(self): + project_client = mock.MagicMock + project_client.projects = { + PROJECT_ID: VercelProject( + id=PROJECT_ID, + name=PROJECT_NAME, + team_id=TEAM_ID, + skew_protection=False, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.project.project_skew_protection_enabled.project_skew_protection_enabled.project_client", + new=project_client, + ), + ): + from prowler.providers.vercel.services.project.project_skew_protection_enabled.project_skew_protection_enabled import ( + project_skew_protection_enabled, + ) + + check = project_skew_protection_enabled() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} does not have skew protection enabled, which may cause version mismatches during deployments." + ) + assert result[0].team_id == TEAM_ID diff --git a/tests/providers/vercel/services/security/security_custom_rules_configured/security_custom_rules_configured_test.py b/tests/providers/vercel/services/security/security_custom_rules_configured/security_custom_rules_configured_test.py new file mode 100644 index 0000000000..72fc44f61e --- /dev/null +++ b/tests/providers/vercel/services/security/security_custom_rules_configured/security_custom_rules_configured_test.py @@ -0,0 +1,113 @@ +from unittest import mock + +from prowler.providers.vercel.services.security.security_service import ( + VercelFirewallConfig, +) +from tests.providers.vercel.vercel_fixtures import ( + PROJECT_ID, + PROJECT_NAME, + TEAM_ID, + set_mocked_vercel_provider, +) + + +class Test_security_custom_rules_configured: + def test_no_configs(self): + security_client = mock.MagicMock + security_client.firewall_configs = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.security.security_custom_rules_configured.security_custom_rules_configured.security_client", + new=security_client, + ), + ): + from prowler.providers.vercel.services.security.security_custom_rules_configured.security_custom_rules_configured import ( + security_custom_rules_configured, + ) + + check = security_custom_rules_configured() + result = check.execute() + assert len(result) == 0 + + def test_custom_rules_configured(self): + security_client = mock.MagicMock + security_client.firewall_configs = { + PROJECT_ID: VercelFirewallConfig( + project_id=PROJECT_ID, + project_name=PROJECT_NAME, + team_id=TEAM_ID, + custom_rules=[{"id": "rule1", "name": "Block bots"}], + id=PROJECT_ID, + name=PROJECT_NAME, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.security.security_custom_rules_configured.security_custom_rules_configured.security_client", + new=security_client, + ), + ): + from prowler.providers.vercel.services.security.security_custom_rules_configured.security_custom_rules_configured import ( + security_custom_rules_configured, + ) + + check = security_custom_rules_configured() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} ({PROJECT_ID}) has 1 custom firewall rule(s) configured." + ) + assert result[0].team_id == TEAM_ID + + def test_no_custom_rules(self): + security_client = mock.MagicMock + security_client.firewall_configs = { + PROJECT_ID: VercelFirewallConfig( + project_id=PROJECT_ID, + project_name=PROJECT_NAME, + team_id=TEAM_ID, + custom_rules=[], + id=PROJECT_ID, + name=PROJECT_NAME, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.security.security_custom_rules_configured.security_custom_rules_configured.security_client", + new=security_client, + ), + ): + from prowler.providers.vercel.services.security.security_custom_rules_configured.security_custom_rules_configured import ( + security_custom_rules_configured, + ) + + check = security_custom_rules_configured() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} ({PROJECT_ID}) does not have any custom firewall rules configured." + ) + assert result[0].team_id == TEAM_ID diff --git a/tests/providers/vercel/services/security/security_ip_blocking_rules_configured/security_ip_blocking_rules_configured_test.py b/tests/providers/vercel/services/security/security_ip_blocking_rules_configured/security_ip_blocking_rules_configured_test.py new file mode 100644 index 0000000000..20e6224a24 --- /dev/null +++ b/tests/providers/vercel/services/security/security_ip_blocking_rules_configured/security_ip_blocking_rules_configured_test.py @@ -0,0 +1,113 @@ +from unittest import mock + +from prowler.providers.vercel.services.security.security_service import ( + VercelFirewallConfig, +) +from tests.providers.vercel.vercel_fixtures import ( + PROJECT_ID, + PROJECT_NAME, + TEAM_ID, + set_mocked_vercel_provider, +) + + +class Test_security_ip_blocking_rules_configured: + def test_no_configs(self): + security_client = mock.MagicMock + security_client.firewall_configs = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.security.security_ip_blocking_rules_configured.security_ip_blocking_rules_configured.security_client", + new=security_client, + ), + ): + from prowler.providers.vercel.services.security.security_ip_blocking_rules_configured.security_ip_blocking_rules_configured import ( + security_ip_blocking_rules_configured, + ) + + check = security_ip_blocking_rules_configured() + result = check.execute() + assert len(result) == 0 + + def test_ip_rules_configured(self): + security_client = mock.MagicMock + security_client.firewall_configs = { + PROJECT_ID: VercelFirewallConfig( + project_id=PROJECT_ID, + project_name=PROJECT_NAME, + team_id=TEAM_ID, + ip_blocking_rules=[{"id": "rule1", "ip": "192.168.1.0/24"}], + id=PROJECT_ID, + name=PROJECT_NAME, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.security.security_ip_blocking_rules_configured.security_ip_blocking_rules_configured.security_client", + new=security_client, + ), + ): + from prowler.providers.vercel.services.security.security_ip_blocking_rules_configured.security_ip_blocking_rules_configured import ( + security_ip_blocking_rules_configured, + ) + + check = security_ip_blocking_rules_configured() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} ({PROJECT_ID}) has 1 IP blocking rule(s) configured." + ) + assert result[0].team_id == TEAM_ID + + def test_no_ip_rules(self): + security_client = mock.MagicMock + security_client.firewall_configs = { + PROJECT_ID: VercelFirewallConfig( + project_id=PROJECT_ID, + project_name=PROJECT_NAME, + team_id=TEAM_ID, + ip_blocking_rules=[], + id=PROJECT_ID, + name=PROJECT_NAME, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.security.security_ip_blocking_rules_configured.security_ip_blocking_rules_configured.security_client", + new=security_client, + ), + ): + from prowler.providers.vercel.services.security.security_ip_blocking_rules_configured.security_ip_blocking_rules_configured import ( + security_ip_blocking_rules_configured, + ) + + check = security_ip_blocking_rules_configured() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} ({PROJECT_ID}) does not have any IP blocking rules configured." + ) + assert result[0].team_id == TEAM_ID diff --git a/tests/providers/vercel/services/security/security_managed_rulesets_enabled/security_managed_rulesets_enabled_test.py b/tests/providers/vercel/services/security/security_managed_rulesets_enabled/security_managed_rulesets_enabled_test.py new file mode 100644 index 0000000000..2cc32c4e91 --- /dev/null +++ b/tests/providers/vercel/services/security/security_managed_rulesets_enabled/security_managed_rulesets_enabled_test.py @@ -0,0 +1,155 @@ +from unittest import mock + +from prowler.providers.vercel.services.security.security_service import ( + VercelFirewallConfig, +) +from tests.providers.vercel.vercel_fixtures import ( + PROJECT_ID, + PROJECT_NAME, + TEAM_ID, + set_mocked_vercel_provider, +) + + +class Test_security_managed_rulesets_enabled: + def test_no_configs(self): + security_client = mock.MagicMock + security_client.firewall_configs = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.security.security_managed_rulesets_enabled.security_managed_rulesets_enabled.security_client", + new=security_client, + ), + ): + from prowler.providers.vercel.services.security.security_managed_rulesets_enabled.security_managed_rulesets_enabled import ( + security_managed_rulesets_enabled, + ) + + check = security_managed_rulesets_enabled() + result = check.execute() + assert len(result) == 0 + + def test_managed_rulesets_enabled(self): + security_client = mock.MagicMock + security_client.firewall_configs = { + PROJECT_ID: VercelFirewallConfig( + project_id=PROJECT_ID, + project_name=PROJECT_NAME, + team_id=TEAM_ID, + firewall_enabled=True, + managed_rulesets={"owasp": True}, + id=PROJECT_ID, + name=PROJECT_NAME, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.security.security_managed_rulesets_enabled.security_managed_rulesets_enabled.security_client", + new=security_client, + ), + ): + from prowler.providers.vercel.services.security.security_managed_rulesets_enabled.security_managed_rulesets_enabled import ( + security_managed_rulesets_enabled, + ) + + check = security_managed_rulesets_enabled() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} ({PROJECT_ID}) has managed WAF rulesets enabled." + ) + assert result[0].team_id == TEAM_ID + + def test_managed_rulesets_disabled(self): + security_client = mock.MagicMock + security_client.firewall_configs = { + PROJECT_ID: VercelFirewallConfig( + project_id=PROJECT_ID, + project_name=PROJECT_NAME, + team_id=TEAM_ID, + firewall_enabled=False, + managed_rulesets={}, + id=PROJECT_ID, + name=PROJECT_NAME, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.security.security_managed_rulesets_enabled.security_managed_rulesets_enabled.security_client", + new=security_client, + ), + ): + from prowler.providers.vercel.services.security.security_managed_rulesets_enabled.security_managed_rulesets_enabled import ( + security_managed_rulesets_enabled, + ) + + check = security_managed_rulesets_enabled() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} ({PROJECT_ID}) does not have managed WAF rulesets enabled." + ) + assert result[0].team_id == TEAM_ID + + def test_managed_rulesets_plan_gated(self): + security_client = mock.MagicMock + security_client.firewall_configs = { + PROJECT_ID: VercelFirewallConfig( + project_id=PROJECT_ID, + project_name=PROJECT_NAME, + team_id=TEAM_ID, + firewall_enabled=False, + managed_rulesets=None, + id=PROJECT_ID, + name=PROJECT_NAME, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.security.security_managed_rulesets_enabled.security_managed_rulesets_enabled.security_client", + new=security_client, + ), + ): + from prowler.providers.vercel.services.security.security_managed_rulesets_enabled.security_managed_rulesets_enabled import ( + security_managed_rulesets_enabled, + ) + + check = security_managed_rulesets_enabled() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "MANUAL" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} ({PROJECT_ID}) could not be assessed for managed rulesets. Enterprise plan required to access this feature." + ) + assert result[0].team_id == TEAM_ID diff --git a/tests/providers/vercel/services/security/security_rate_limiting_configured/security_rate_limiting_configured_test.py b/tests/providers/vercel/services/security/security_rate_limiting_configured/security_rate_limiting_configured_test.py new file mode 100644 index 0000000000..1c00a3c358 --- /dev/null +++ b/tests/providers/vercel/services/security/security_rate_limiting_configured/security_rate_limiting_configured_test.py @@ -0,0 +1,113 @@ +from unittest import mock + +from prowler.providers.vercel.services.security.security_service import ( + VercelFirewallConfig, +) +from tests.providers.vercel.vercel_fixtures import ( + PROJECT_ID, + PROJECT_NAME, + TEAM_ID, + set_mocked_vercel_provider, +) + + +class Test_security_rate_limiting_configured: + def test_no_configs(self): + security_client = mock.MagicMock + security_client.firewall_configs = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.security.security_rate_limiting_configured.security_rate_limiting_configured.security_client", + new=security_client, + ), + ): + from prowler.providers.vercel.services.security.security_rate_limiting_configured.security_rate_limiting_configured import ( + security_rate_limiting_configured, + ) + + check = security_rate_limiting_configured() + result = check.execute() + assert len(result) == 0 + + def test_rate_limiting_configured(self): + security_client = mock.MagicMock + security_client.firewall_configs = { + PROJECT_ID: VercelFirewallConfig( + project_id=PROJECT_ID, + project_name=PROJECT_NAME, + team_id=TEAM_ID, + rate_limiting_rules=[{"id": "rule1", "max_requests": 100}], + id=PROJECT_ID, + name=PROJECT_NAME, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.security.security_rate_limiting_configured.security_rate_limiting_configured.security_client", + new=security_client, + ), + ): + from prowler.providers.vercel.services.security.security_rate_limiting_configured.security_rate_limiting_configured import ( + security_rate_limiting_configured, + ) + + check = security_rate_limiting_configured() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} ({PROJECT_ID}) has 1 rate limiting rule(s) configured." + ) + assert result[0].team_id == TEAM_ID + + def test_no_rate_limiting(self): + security_client = mock.MagicMock + security_client.firewall_configs = { + PROJECT_ID: VercelFirewallConfig( + project_id=PROJECT_ID, + project_name=PROJECT_NAME, + team_id=TEAM_ID, + rate_limiting_rules=[], + id=PROJECT_ID, + name=PROJECT_NAME, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.security.security_rate_limiting_configured.security_rate_limiting_configured.security_client", + new=security_client, + ), + ): + from prowler.providers.vercel.services.security.security_rate_limiting_configured.security_rate_limiting_configured import ( + security_rate_limiting_configured, + ) + + check = security_rate_limiting_configured() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} ({PROJECT_ID}) does not have any rate limiting rules configured." + ) + assert result[0].team_id == TEAM_ID diff --git a/tests/providers/vercel/services/security/security_waf_enabled/security_waf_enabled_test.py b/tests/providers/vercel/services/security/security_waf_enabled/security_waf_enabled_test.py new file mode 100644 index 0000000000..1641868175 --- /dev/null +++ b/tests/providers/vercel/services/security/security_waf_enabled/security_waf_enabled_test.py @@ -0,0 +1,115 @@ +from unittest import mock + +from prowler.providers.vercel.services.security.security_service import ( + VercelFirewallConfig, +) +from tests.providers.vercel.vercel_fixtures import ( + PROJECT_ID, + PROJECT_NAME, + TEAM_ID, + set_mocked_vercel_provider, +) + + +class Test_security_waf_enabled: + def test_no_configs(self): + security_client = mock.MagicMock + security_client.firewall_configs = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.security.security_waf_enabled.security_waf_enabled.security_client", + new=security_client, + ), + ): + from prowler.providers.vercel.services.security.security_waf_enabled.security_waf_enabled import ( + security_waf_enabled, + ) + + check = security_waf_enabled() + result = check.execute() + assert len(result) == 0 + + def test_waf_enabled(self): + security_client = mock.MagicMock + security_client.firewall_configs = { + PROJECT_ID: VercelFirewallConfig( + project_id=PROJECT_ID, + project_name=PROJECT_NAME, + team_id=TEAM_ID, + firewall_enabled=True, + managed_rulesets={}, + id=PROJECT_ID, + name=PROJECT_NAME, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.security.security_waf_enabled.security_waf_enabled.security_client", + new=security_client, + ), + ): + from prowler.providers.vercel.services.security.security_waf_enabled.security_waf_enabled import ( + security_waf_enabled, + ) + + check = security_waf_enabled() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} ({PROJECT_ID}) has the Web Application Firewall enabled." + ) + assert result[0].team_id == TEAM_ID + + def test_waf_disabled(self): + security_client = mock.MagicMock + security_client.firewall_configs = { + PROJECT_ID: VercelFirewallConfig( + project_id=PROJECT_ID, + project_name=PROJECT_NAME, + team_id=TEAM_ID, + firewall_enabled=False, + managed_rulesets={}, + id=PROJECT_ID, + name=PROJECT_NAME, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.security.security_waf_enabled.security_waf_enabled.security_client", + new=security_client, + ), + ): + from prowler.providers.vercel.services.security.security_waf_enabled.security_waf_enabled import ( + security_waf_enabled, + ) + + check = security_waf_enabled() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == PROJECT_ID + assert result[0].resource_name == PROJECT_NAME + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Project {PROJECT_NAME} ({PROJECT_ID}) does not have the Web Application Firewall enabled." + ) + assert result[0].team_id == TEAM_ID diff --git a/tests/providers/vercel/services/team/team_directory_sync_enabled/team_directory_sync_enabled_test.py b/tests/providers/vercel/services/team/team_directory_sync_enabled/team_directory_sync_enabled_test.py new file mode 100644 index 0000000000..7f08db7fa1 --- /dev/null +++ b/tests/providers/vercel/services/team/team_directory_sync_enabled/team_directory_sync_enabled_test.py @@ -0,0 +1,107 @@ +from unittest import mock + +from prowler.providers.vercel.services.team.team_service import VercelTeam +from tests.providers.vercel.vercel_fixtures import ( + TEAM_ID, + TEAM_NAME, + TEAM_SLUG, + set_mocked_vercel_provider, +) + + +class Test_team_directory_sync_enabled: + def test_no_teams(self): + team_client = mock.MagicMock + team_client.teams = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.team.team_directory_sync_enabled.team_directory_sync_enabled.team_client", + new=team_client, + ), + ): + from prowler.providers.vercel.services.team.team_directory_sync_enabled.team_directory_sync_enabled import ( + team_directory_sync_enabled, + ) + + check = team_directory_sync_enabled() + result = check.execute() + assert len(result) == 0 + + def test_directory_sync_enabled(self): + team_client = mock.MagicMock + team_client.teams = { + TEAM_ID: VercelTeam( + id=TEAM_ID, + name=TEAM_NAME, + slug=TEAM_SLUG, + directory_sync_enabled=True, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.team.team_directory_sync_enabled.team_directory_sync_enabled.team_client", + new=team_client, + ), + ): + from prowler.providers.vercel.services.team.team_directory_sync_enabled.team_directory_sync_enabled import ( + team_directory_sync_enabled, + ) + + check = team_directory_sync_enabled() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == TEAM_ID + assert result[0].resource_name == TEAM_NAME + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Team {TEAM_NAME} has directory sync (SCIM) enabled for automated user provisioning." + ) + assert result[0].team_id == "" + + def test_directory_sync_disabled(self): + team_client = mock.MagicMock + team_client.teams = { + TEAM_ID: VercelTeam( + id=TEAM_ID, + name=TEAM_NAME, + slug=TEAM_SLUG, + directory_sync_enabled=False, + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.team.team_directory_sync_enabled.team_directory_sync_enabled.team_client", + new=team_client, + ), + ): + from prowler.providers.vercel.services.team.team_directory_sync_enabled.team_directory_sync_enabled import ( + team_directory_sync_enabled, + ) + + check = team_directory_sync_enabled() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == TEAM_ID + assert result[0].resource_name == TEAM_NAME + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Team {TEAM_NAME} does not have directory sync (SCIM) enabled. User provisioning and deprovisioning must be managed manually." + ) + assert result[0].team_id == "" diff --git a/tests/providers/vercel/services/team/team_member_role_least_privilege/team_member_role_least_privilege_test.py b/tests/providers/vercel/services/team/team_member_role_least_privilege/team_member_role_least_privilege_test.py new file mode 100644 index 0000000000..f125715dbd --- /dev/null +++ b/tests/providers/vercel/services/team/team_member_role_least_privilege/team_member_role_least_privilege_test.py @@ -0,0 +1,266 @@ +from unittest import mock + +from prowler.providers.vercel.services.team.team_service import ( + SAMLConfig, + VercelTeam, + VercelTeamMember, +) +from tests.providers.vercel.vercel_fixtures import ( + TEAM_ID, + TEAM_NAME, + TEAM_SLUG, + set_mocked_vercel_provider, +) + + +class Test_team_member_role_least_privilege: + def test_no_teams(self): + team_client = mock.MagicMock + team_client.teams = {} + team_client.audit_config = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.team.team_member_role_least_privilege.team_member_role_least_privilege.team_client", + new=team_client, + ), + ): + from prowler.providers.vercel.services.team.team_member_role_least_privilege.team_member_role_least_privilege import ( + team_member_role_least_privilege, + ) + + check = team_member_role_least_privilege() + result = check.execute() + assert len(result) == 0 + + def test_member_least_privilege(self): + team_client = mock.MagicMock + team_client.teams = { + TEAM_ID: VercelTeam( + id=TEAM_ID, + name=TEAM_NAME, + slug=TEAM_SLUG, + saml=SAMLConfig(status="disabled", enforced=False), + members=[ + VercelTeamMember( + id="member_1", + email="member@example.com", + role="MEMBER", + status="active", + ), + ], + ) + } + team_client.audit_config = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.team.team_member_role_least_privilege.team_member_role_least_privilege.team_client", + new=team_client, + ), + ): + from prowler.providers.vercel.services.team.team_member_role_least_privilege.team_member_role_least_privilege import ( + team_member_role_least_privilege, + ) + + check = team_member_role_least_privilege() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == TEAM_ID + assert result[0].resource_name == TEAM_NAME + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Team {TEAM_NAME} has 0 owner(s) out of 1 active members. Small team with minimum required owner — least privilege threshold not applicable." + ) + assert result[0].team_id == "" + + def test_small_team_single_owner(self): + """Small team (<5 members) with 1 owner gets a PASS (small team exception).""" + team_client = mock.MagicMock + team_client.teams = { + TEAM_ID: VercelTeam( + id=TEAM_ID, + name=TEAM_NAME, + slug=TEAM_SLUG, + saml=SAMLConfig(status="disabled", enforced=False), + members=[ + VercelTeamMember( + id="member_1", + email="member@example.com", + role="OWNER", + status="active", + ), + ], + ) + } + team_client.audit_config = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.team.team_member_role_least_privilege.team_member_role_least_privilege.team_client", + new=team_client, + ), + ): + from prowler.providers.vercel.services.team.team_member_role_least_privilege.team_member_role_least_privilege import ( + team_member_role_least_privilege, + ) + + check = team_member_role_least_privilege() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == TEAM_ID + assert result[0].resource_name == TEAM_NAME + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Team {TEAM_NAME} has 1 owner(s) out of 1 active members. Small team with minimum required owner — least privilege threshold not applicable." + ) + assert result[0].team_id == "" + + def test_large_team_too_many_owners(self): + """Large team (>=5 members) with >20% owners gets a FAIL.""" + team_client = mock.MagicMock + team_client.teams = { + TEAM_ID: VercelTeam( + id=TEAM_ID, + name=TEAM_NAME, + slug=TEAM_SLUG, + saml=SAMLConfig(status="disabled", enforced=False), + members=[ + VercelTeamMember( + id=f"member_{i}", + email=f"member{i}@example.com", + role="OWNER" if i <= 2 else "MEMBER", + status="active", + ) + for i in range(1, 6) + ], + ) + } + team_client.audit_config = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.team.team_member_role_least_privilege.team_member_role_least_privilege.team_client", + new=team_client, + ), + ): + from prowler.providers.vercel.services.team.team_member_role_least_privilege.team_member_role_least_privilege import ( + team_member_role_least_privilege, + ) + + check = team_member_role_least_privilege() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == TEAM_ID + assert result[0].resource_name == TEAM_NAME + assert result[0].status == "FAIL" + assert "40% exceeds the 20% threshold" in result[0].status_extended + assert result[0].team_id == "" + + def test_large_team_exceeds_max_owners(self): + """Large team within percentage but exceeding max_owners gets a FAIL.""" + team_client = mock.MagicMock + team_client.teams = { + TEAM_ID: VercelTeam( + id=TEAM_ID, + name=TEAM_NAME, + slug=TEAM_SLUG, + saml=SAMLConfig(status="disabled", enforced=False), + members=[ + VercelTeamMember( + id=f"member_{i}", + email=f"member{i}@example.com", + role="OWNER" if i <= 4 else "MEMBER", + status="active", + ) + for i in range(1, 21) + ], + ) + } + team_client.audit_config = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.team.team_member_role_least_privilege.team_member_role_least_privilege.team_client", + new=team_client, + ), + ): + from prowler.providers.vercel.services.team.team_member_role_least_privilege.team_member_role_least_privilege import ( + team_member_role_least_privilege, + ) + + check = team_member_role_least_privilege() + result = check.execute() + assert len(result) == 1 + assert result[0].status == "FAIL" + assert "4 owners exceeds the maximum of 3" in result[0].status_extended + + def test_custom_thresholds(self): + """Custom thresholds via audit_config are respected.""" + team_client = mock.MagicMock + team_client.teams = { + TEAM_ID: VercelTeam( + id=TEAM_ID, + name=TEAM_NAME, + slug=TEAM_SLUG, + saml=SAMLConfig(status="disabled", enforced=False), + members=[ + VercelTeamMember( + id=f"member_{i}", + email=f"member{i}@example.com", + role="OWNER" if i <= 2 else "MEMBER", + status="active", + ) + for i in range(1, 6) + ], + ) + } + team_client.audit_config = { + "max_owner_percentage": 50, + "max_owners": 5, + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.team.team_member_role_least_privilege.team_member_role_least_privilege.team_client", + new=team_client, + ), + ): + from prowler.providers.vercel.services.team.team_member_role_least_privilege.team_member_role_least_privilege import ( + team_member_role_least_privilege, + ) + + check = team_member_role_least_privilege() + result = check.execute() + assert len(result) == 1 + assert result[0].status == "PASS" + assert ( + "within the configured thresholds (50% / max 5 owners)" + in result[0].status_extended + ) diff --git a/tests/providers/vercel/services/team/team_no_stale_invitations/team_no_stale_invitations_test.py b/tests/providers/vercel/services/team/team_no_stale_invitations/team_no_stale_invitations_test.py new file mode 100644 index 0000000000..5ca777a53f --- /dev/null +++ b/tests/providers/vercel/services/team/team_no_stale_invitations/team_no_stale_invitations_test.py @@ -0,0 +1,130 @@ +from datetime import datetime, timedelta, timezone +from unittest import mock + +from prowler.providers.vercel.services.team.team_service import ( + VercelTeam, + VercelTeamMember, +) +from tests.providers.vercel.vercel_fixtures import ( + TEAM_ID, + TEAM_NAME, + TEAM_SLUG, + set_mocked_vercel_provider, +) + + +class Test_team_no_stale_invitations: + def test_no_teams(self): + team_client = mock.MagicMock + team_client.audit_config = {"stale_invitation_threshold_days": 30} + team_client.teams = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.team.team_no_stale_invitations.team_no_stale_invitations.team_client", + new=team_client, + ), + ): + from prowler.providers.vercel.services.team.team_no_stale_invitations.team_no_stale_invitations import ( + team_no_stale_invitations, + ) + + check = team_no_stale_invitations() + result = check.execute() + assert len(result) == 0 + + def test_no_stale_invitations(self): + team_client = mock.MagicMock + team_client.audit_config = {"stale_invitation_threshold_days": 30} + team_client.teams = { + TEAM_ID: VercelTeam( + id=TEAM_ID, + name=TEAM_NAME, + slug=TEAM_SLUG, + members=[ + VercelTeamMember( + id="member_1", + email="invited@example.com", + role="MEMBER", + status="invited", + created_at=datetime.now(timezone.utc) - timedelta(days=5), + ), + ], + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.team.team_no_stale_invitations.team_no_stale_invitations.team_client", + new=team_client, + ), + ): + from prowler.providers.vercel.services.team.team_no_stale_invitations.team_no_stale_invitations import ( + team_no_stale_invitations, + ) + + check = team_no_stale_invitations() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == TEAM_ID + assert result[0].resource_name == TEAM_NAME + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Team {TEAM_NAME} has no stale pending invitations older than 30 days." + ) + assert result[0].team_id == "" + + def test_stale_invitation(self): + team_client = mock.MagicMock + team_client.audit_config = {"stale_invitation_threshold_days": 30} + team_client.teams = { + TEAM_ID: VercelTeam( + id=TEAM_ID, + name=TEAM_NAME, + slug=TEAM_SLUG, + members=[ + VercelTeamMember( + id="member_1", + email="old_invite@example.com", + role="MEMBER", + status="invited", + created_at=datetime.now(timezone.utc) - timedelta(days=60), + ), + ], + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.team.team_no_stale_invitations.team_no_stale_invitations.team_client", + new=team_client, + ), + ): + from prowler.providers.vercel.services.team.team_no_stale_invitations.team_no_stale_invitations import ( + team_no_stale_invitations, + ) + + check = team_no_stale_invitations() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == TEAM_ID + assert result[0].resource_name == TEAM_NAME + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Team {TEAM_NAME} has 1 stale pending invitation(s) older than 30 days." + ) + assert result[0].team_id == "" diff --git a/tests/providers/vercel/services/team/team_saml_sso_enabled/team_saml_sso_enabled_test.py b/tests/providers/vercel/services/team/team_saml_sso_enabled/team_saml_sso_enabled_test.py new file mode 100644 index 0000000000..b7f40dd653 --- /dev/null +++ b/tests/providers/vercel/services/team/team_saml_sso_enabled/team_saml_sso_enabled_test.py @@ -0,0 +1,108 @@ +from unittest import mock + +from prowler.providers.vercel.services.team.team_service import SAMLConfig, VercelTeam +from tests.providers.vercel.vercel_fixtures import ( + TEAM_ID, + TEAM_NAME, + TEAM_SLUG, + set_mocked_vercel_provider, +) + + +class Test_team_saml_sso_enabled: + def test_no_teams(self): + team_client = mock.MagicMock + team_client.teams = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.team.team_saml_sso_enabled.team_saml_sso_enabled.team_client", + new=team_client, + ), + ): + from prowler.providers.vercel.services.team.team_saml_sso_enabled.team_saml_sso_enabled import ( + team_saml_sso_enabled, + ) + + check = team_saml_sso_enabled() + result = check.execute() + assert len(result) == 0 + + def test_saml_enabled(self): + team_client = mock.MagicMock + team_client.teams = { + TEAM_ID: VercelTeam( + id=TEAM_ID, + name=TEAM_NAME, + slug=TEAM_SLUG, + saml=SAMLConfig(status="enabled", enforced=False), + members=[], + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.team.team_saml_sso_enabled.team_saml_sso_enabled.team_client", + new=team_client, + ), + ): + from prowler.providers.vercel.services.team.team_saml_sso_enabled.team_saml_sso_enabled import ( + team_saml_sso_enabled, + ) + + check = team_saml_sso_enabled() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == TEAM_ID + assert result[0].resource_name == TEAM_NAME + assert result[0].status == "PASS" + assert ( + result[0].status_extended == f"Team {TEAM_NAME} has SAML SSO enabled." + ) + assert result[0].team_id == "" + + def test_saml_disabled(self): + team_client = mock.MagicMock + team_client.teams = { + TEAM_ID: VercelTeam( + id=TEAM_ID, + name=TEAM_NAME, + slug=TEAM_SLUG, + saml=SAMLConfig(status="disabled", enforced=False), + members=[], + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.team.team_saml_sso_enabled.team_saml_sso_enabled.team_client", + new=team_client, + ), + ): + from prowler.providers.vercel.services.team.team_saml_sso_enabled.team_saml_sso_enabled import ( + team_saml_sso_enabled, + ) + + check = team_saml_sso_enabled() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == TEAM_ID + assert result[0].resource_name == TEAM_NAME + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Team {TEAM_NAME} does not have SAML SSO enabled." + ) + assert result[0].team_id == "" diff --git a/tests/providers/vercel/services/team/team_saml_sso_enforced/team_saml_sso_enforced_test.py b/tests/providers/vercel/services/team/team_saml_sso_enforced/team_saml_sso_enforced_test.py new file mode 100644 index 0000000000..360d6cdbd8 --- /dev/null +++ b/tests/providers/vercel/services/team/team_saml_sso_enforced/team_saml_sso_enforced_test.py @@ -0,0 +1,144 @@ +from unittest import mock + +from prowler.providers.vercel.services.team.team_service import SAMLConfig, VercelTeam +from tests.providers.vercel.vercel_fixtures import ( + TEAM_ID, + TEAM_NAME, + TEAM_SLUG, + set_mocked_vercel_provider, +) + + +class Test_team_saml_sso_enforced: + def test_no_teams(self): + team_client = mock.MagicMock + team_client.teams = {} + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.team.team_saml_sso_enforced.team_saml_sso_enforced.team_client", + new=team_client, + ), + ): + from prowler.providers.vercel.services.team.team_saml_sso_enforced.team_saml_sso_enforced import ( + team_saml_sso_enforced, + ) + + check = team_saml_sso_enforced() + result = check.execute() + assert len(result) == 0 + + def test_saml_enforced(self): + team_client = mock.MagicMock + team_client.teams = { + TEAM_ID: VercelTeam( + id=TEAM_ID, + name=TEAM_NAME, + slug=TEAM_SLUG, + saml=SAMLConfig(status="enabled", enforced=True), + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.team.team_saml_sso_enforced.team_saml_sso_enforced.team_client", + new=team_client, + ), + ): + from prowler.providers.vercel.services.team.team_saml_sso_enforced.team_saml_sso_enforced import ( + team_saml_sso_enforced, + ) + + check = team_saml_sso_enforced() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == TEAM_ID + assert result[0].resource_name == TEAM_NAME + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"Team {TEAM_NAME} enforces SAML SSO for all members." + ) + assert result[0].team_id == "" + + def test_saml_enabled_not_enforced(self): + team_client = mock.MagicMock + team_client.teams = { + TEAM_ID: VercelTeam( + id=TEAM_ID, + name=TEAM_NAME, + slug=TEAM_SLUG, + saml=SAMLConfig(status="enabled", enforced=False), + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.team.team_saml_sso_enforced.team_saml_sso_enforced.team_client", + new=team_client, + ), + ): + from prowler.providers.vercel.services.team.team_saml_sso_enforced.team_saml_sso_enforced import ( + team_saml_sso_enforced, + ) + + check = team_saml_sso_enforced() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == TEAM_ID + assert result[0].resource_name == TEAM_NAME + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Team {TEAM_NAME} has SAML SSO enabled but does not enforce it. Members can still authenticate without SSO." + ) + assert result[0].team_id == "" + + def test_saml_disabled(self): + team_client = mock.MagicMock + team_client.teams = { + TEAM_ID: VercelTeam( + id=TEAM_ID, + name=TEAM_NAME, + slug=TEAM_SLUG, + saml=SAMLConfig(status="disabled", enforced=False), + ) + } + + with ( + mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=set_mocked_vercel_provider(), + ), + mock.patch( + "prowler.providers.vercel.services.team.team_saml_sso_enforced.team_saml_sso_enforced.team_client", + new=team_client, + ), + ): + from prowler.providers.vercel.services.team.team_saml_sso_enforced.team_saml_sso_enforced import ( + team_saml_sso_enforced, + ) + + check = team_saml_sso_enforced() + result = check.execute() + assert len(result) == 1 + assert result[0].resource_id == TEAM_ID + assert result[0].resource_name == TEAM_NAME + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"Team {TEAM_NAME} does not have SAML SSO enforced." + ) + assert result[0].team_id == "" diff --git a/tests/providers/vercel/vercel_fixtures.py b/tests/providers/vercel/vercel_fixtures.py new file mode 100644 index 0000000000..70775bb377 --- /dev/null +++ b/tests/providers/vercel/vercel_fixtures.py @@ -0,0 +1,59 @@ +from unittest.mock import MagicMock + +from prowler.providers.vercel.models import ( + VercelIdentityInfo, + VercelSession, + VercelTeamInfo, +) + +# Vercel Identity +TEAM_ID = "team_test123" +TEAM_NAME = "Test Team" +TEAM_SLUG = "test-team" +USER_ID = "user_test456" +USERNAME = "testuser" +USER_EMAIL = "test@example.com" + +# Vercel Credentials +API_TOKEN = "test-vercel-api-token" + +# Project Constants +PROJECT_ID = "prj_test789" +PROJECT_NAME = "my-test-project" + +# Domain Constants +DOMAIN_NAME = "example.com" + +# Deployment Constants +DEPLOYMENT_ID = "dpl_test012" + + +def set_mocked_vercel_provider( + api_token: str = API_TOKEN, + team_id: str = TEAM_ID, + identity: VercelIdentityInfo = None, + audit_config: dict = None, +): + """Create a mocked VercelProvider for testing.""" + provider = MagicMock() + provider.type = "vercel" + provider.session = VercelSession( + token=api_token, + team_id=team_id, + http_session=MagicMock(), + ) + provider.identity = identity or VercelIdentityInfo( + user_id=USER_ID, + username=USERNAME, + email=USER_EMAIL, + team=VercelTeamInfo( + id=TEAM_ID, + name=TEAM_NAME, + slug=TEAM_SLUG, + ), + ) + provider.audit_config = audit_config or {"max_retries": 3} + provider.fixer_config = {} + provider.filter_projects = None + + return provider diff --git a/tests/providers/vercel/vercel_provider_test.py b/tests/providers/vercel/vercel_provider_test.py new file mode 100644 index 0000000000..56117ae6c4 --- /dev/null +++ b/tests/providers/vercel/vercel_provider_test.py @@ -0,0 +1,224 @@ +import os +from unittest import mock +from unittest.mock import MagicMock, patch + +import pytest + +from prowler.providers.common.models import Connection +from prowler.providers.vercel.exceptions.exceptions import ( + VercelAuthenticationError, + VercelCredentialsError, +) +from prowler.providers.vercel.models import VercelIdentityInfo, VercelSession +from prowler.providers.vercel.vercel_provider import VercelProvider +from tests.providers.vercel.vercel_fixtures import ( + API_TOKEN, + TEAM_ID, + TEAM_NAME, + TEAM_SLUG, + USER_EMAIL, + USER_ID, + USERNAME, +) + + +class TestVercelProviderSetupSession: + def test_setup_session_with_env_var(self): + with mock.patch.dict(os.environ, {"VERCEL_TOKEN": API_TOKEN}, clear=False): + session = VercelProvider.setup_session() + + assert isinstance(session, VercelSession) + assert session.token == API_TOKEN + assert session.http_session is not None + + def test_setup_session_with_api_token_param(self): + with mock.patch.dict(os.environ, {}, clear=True): + session = VercelProvider.setup_session(api_token=API_TOKEN) + + assert isinstance(session, VercelSession) + assert session.token == API_TOKEN + assert session.http_session is not None + + def test_setup_session_with_team_id_param(self): + with mock.patch.dict(os.environ, {}, clear=True): + session = VercelProvider.setup_session(api_token=API_TOKEN, team_id=TEAM_ID) + + assert session.token == API_TOKEN + assert session.team_id == TEAM_ID + + def test_setup_session_no_credentials_raises(self): + with mock.patch.dict(os.environ, {}, clear=True): + os.environ.pop("VERCEL_TOKEN", None) + with pytest.raises(VercelCredentialsError): + VercelProvider.setup_session() + + def test_setup_session_team_from_env(self): + with mock.patch.dict( + os.environ, {"VERCEL_TOKEN": API_TOKEN, "VERCEL_TEAM": TEAM_ID} + ): + session = VercelProvider.setup_session() + + assert session.team_id == TEAM_ID + + +class TestVercelProviderSetupIdentity: + def test_setup_identity_with_team(self): + mock_session = VercelSession( + token=API_TOKEN, team_id=TEAM_ID, http_session=MagicMock() + ) + + # Mock user response + user_response = MagicMock() + user_response.status_code = 200 + user_response.json.return_value = { + "user": { + "id": USER_ID, + "username": USERNAME, + "email": USER_EMAIL, + } + } + user_response.raise_for_status = MagicMock() + + # Mock team response + team_response = MagicMock() + team_response.status_code = 200 + team_response.json.return_value = { + "id": TEAM_ID, + "name": TEAM_NAME, + "slug": TEAM_SLUG, + } + team_response.raise_for_status = MagicMock() + + def mock_get(url, **kwargs): + if "/v2/user" in url: + return user_response + if f"/v2/teams/{TEAM_ID}" in url: + return team_response + return MagicMock() + + mock_session.http_session.get = mock_get + + identity = VercelProvider.setup_identity(mock_session) + + assert isinstance(identity, VercelIdentityInfo) + assert identity.user_id == USER_ID + assert identity.username == USERNAME + assert identity.email == USER_EMAIL + assert identity.team is not None + assert identity.team.id == TEAM_ID + assert identity.team.name == TEAM_NAME + assert identity.team.slug == TEAM_SLUG + + def test_setup_identity_personal_account(self): + mock_session = VercelSession( + token=API_TOKEN, team_id=None, http_session=MagicMock() + ) + + user_response = MagicMock() + user_response.status_code = 200 + user_response.json.return_value = { + "user": { + "id": USER_ID, + "username": USERNAME, + "email": USER_EMAIL, + } + } + user_response.raise_for_status = MagicMock() + + mock_session.http_session.get = MagicMock(return_value=user_response) + + identity = VercelProvider.setup_identity(mock_session) + + assert identity.team is None + assert identity.user_id == USER_ID + + +class TestVercelProviderValidateCredentials: + def test_valid_credentials(self): + mock_session = VercelSession( + token=API_TOKEN, team_id=None, http_session=MagicMock() + ) + + response = MagicMock() + response.status_code = 200 + response.raise_for_status = MagicMock() + mock_session.http_session.get = MagicMock(return_value=response) + + # Should not raise + VercelProvider.validate_credentials(mock_session) + + def test_invalid_token_raises(self): + mock_session = VercelSession( + token="invalid", team_id=None, http_session=MagicMock() + ) + + response = MagicMock() + response.status_code = 401 + mock_session.http_session.get = MagicMock(return_value=response) + + with pytest.raises(VercelAuthenticationError): + VercelProvider.validate_credentials(mock_session) + + def test_forbidden_raises(self): + mock_session = VercelSession( + token=API_TOKEN, team_id=None, http_session=MagicMock() + ) + + response = MagicMock() + response.status_code = 403 + mock_session.http_session.get = MagicMock(return_value=response) + + with pytest.raises(VercelAuthenticationError): + VercelProvider.validate_credentials(mock_session) + + +class TestVercelProviderTestConnection: + @patch.object(VercelProvider, "validate_credentials") + @patch.object(VercelProvider, "setup_session") + def test_successful_connection(self, mock_setup_session, mock_validate): + mock_setup_session.return_value = VercelSession( + token=API_TOKEN, team_id=None, http_session=MagicMock() + ) + mock_validate.return_value = None + + result = VercelProvider.test_connection(raise_on_exception=False) + + assert isinstance(result, Connection) + assert result.is_connected is True + + @patch.object(VercelProvider, "validate_credentials") + @patch.object(VercelProvider, "setup_session") + def test_successful_connection_with_params(self, mock_setup_session, mock_validate): + mock_setup_session.return_value = VercelSession( + token=API_TOKEN, team_id=TEAM_ID, http_session=MagicMock() + ) + mock_validate.return_value = None + + result = VercelProvider.test_connection( + api_token=API_TOKEN, team_id=TEAM_ID, raise_on_exception=False + ) + + assert isinstance(result, Connection) + assert result.is_connected is True + mock_setup_session.assert_called_once_with(api_token=API_TOKEN, team_id=TEAM_ID) + + @patch.object(VercelProvider, "setup_session") + def test_failed_connection_no_credentials(self, mock_setup_session): + mock_setup_session.side_effect = VercelCredentialsError( + message="No credentials" + ) + + result = VercelProvider.test_connection(raise_on_exception=False) + + assert isinstance(result, Connection) + assert result.is_connected is False + assert result.error is not None + + @patch.object(VercelProvider, "setup_session") + def test_failed_connection_raises(self, mock_setup_session): + mock_setup_session.side_effect = VercelCredentialsError( + message="No credentials" + ) + + with pytest.raises(VercelCredentialsError): + VercelProvider.test_connection(raise_on_exception=True)