Skip to content

Releases: prowler-cloud/prowler

Prowler 5.24.4

24 Apr 11:18
a2422ac

Choose a tag to compare

UI

🐞 Fixed

  • Provider wizard no longer advances to the Launch Scan step when rotating credentials (#10851)
  • Attack Paths scan selector now lists scans from every provider with working pagination, instead of capping the list at the first ten (#10864)

API

🚀 Added

  • DJANGO_SENTRY_TRACES_SAMPLE_RATE env var (default 0.02) enables Sentry performance tracing for the API (#10873)

🔄 Changed

  • Attack Paths: Neo4j driver connection_acquisition_timeout is now configurable via NEO4J_CONN_ACQUISITION_TIMEOUT (default lowered from 120 s to 15 s) (#10873)

Prowler 5.24.3

22 Apr 14:30
fd2ec5e

Choose a tag to compare

API

🚀 Added

  • /overviews/findings, /overviews/findings-severity and /overviews/services now reflect newly-muted findings without waiting for the next scan. The post-mute reaggregate-all-finding-group-summaries task was extended to re-run the same per-scan pipeline that scan completion runs (ScanSummary, DailySeveritySummary, FindingGroupDailySummary) on the latest scan of every (provider, day) pair, keeping the pre-aggregated tables in sync with Finding.muted updates (#10827)

🐞 Fixed

  • Finding groups aggregated status now treats muted findings as resolved: a group is FAIL only while at least one non-muted FAIL remains, otherwise it is PASS (including fully-muted groups). The filter[status] filter and the sort=status ordering share the same semantics, keeping status consistent with fail_count and the orthogonal muted flag (#10825)
  • aggregate_findings is now idempotent: it deletes the scan's existing ScanSummary rows before bulk_create, so re-runs (such as the post-mute reaggregation pipeline) no longer violate the unique_scan_summary constraint and no longer abort the downstream DailySeveritySummary / FindingGroupDailySummary recomputation for the affected scan (#10827)
  • Attack Paths: Findings on AWS were silently dropped during the Neo4j merge for resources whose Cartography node is keyed by a short identifier (e.g. EC2 instances) rather than the full ARN (#10839)

SDK

🐞 Fixed

  • CloudTrail resource timeline uses resource name as fallback in LookupEvents (#10828)
  • Exclude me-south-1 and me-central-1 from default AWS scans to prevent hangs when the host can't reach those regional endpoints (#10837)

Prowler 5.24.2

21 Apr 13:44
322a500

Choose a tag to compare

UI

🐞 Fixed

  • Default muted filter now applied consistently on the findings page and the finding-group resource drill-down, keeping muted findings hidden unless the "include muted findings" checkbox is opted in (#10818)

API

🔄 Changed

  • Finding groups /resources endpoints now materialize the filtered finding IDs into a Python list before filtering ResourceFindingMapping (#10816)

🐞 Fixed

  • /finding-groups/latest/<check_id>/resources now selects the latest completed scan per provider by -completed_at (then -inserted_at) instead of -inserted_at, matching the /finding-groups/latest summary path and the daily-summary upsert so overlapping scans no longer produce diverging delta/new_count between the two endpoints (#10802)

Prowler 5.24.1

20 Apr 12:36
2cb8179

Choose a tag to compare

UI

🐞 Fixed

  • Findings and filter UX fixes: exclude muted findings by default in the resource detail drawer and finding group resource views, show category context label (for example Status: FAIL) on MultiSelect triggers instead of hiding the placeholder, and add a wide width option for filter dropdowns applied to the findings Scan filter to prevent label truncation (#10734)
  • Findings grouped view now handles zero-resource IaC counters, refines drawer loading states, and adds provider indicators to finding groups (#10736)
  • Other Findings for this resource: ordering by severity (#10778)
  • Other Findings for this resource: show delta indicator (#10778)
  • Compliance: requirement findings do not show muted findings (#10778)
  • Latest new findings: link to finding groups order by -severity,-last_seen_at (#10778)

🔒 Security

  • Upgrade React to 19.2.5 and Next.js to 16.2.3 to mitigate CVE-2026-23869 (React2DoS), a high-severity unauthenticated remote DoS vulnerability in the React Flight Protocol's Server Function deserialization (#10754)

API

🔄 Changed

  • Attack Paths: Restore SYNC_BATCH_SIZE and FINDINGS_BATCH_SIZE defaults to 1000, upgrade Cartography to 0.135.0, enable Celery queue priority for cleanup task, rewrite Finding insertion, remove AWS graph cleanup and add timing logs (#10729)

🐞 Fixed

  • Finding group resources endpoints now include findings without associated resources (orphaned IaC findings) as simulated resource rows, and return one row per finding when multiple findings share a resource (#10708)
  • Attack Paths: Missing tenant_id filter while getting related findings after scan completes (#10722)
  • Finding group counters pass_count, fail_count and manual_count now exclude muted findings (#10753)
  • Silent data loss in ResourceFindingMapping bulk insert that left findings orphaned when INSERT ... ON CONFLICT DO NOTHING dropped rows without raising; added explicit unique_fields (#10724)

SDK

🔄 Changed

  • msgraph-sdk from 1.23.0 to 1.55.0 and azure-mgmt-resource from 23.3.0 to 24.0.0, removing marshmallow as is a transitively dev dependency (#10733)

🐞 Fixed

  • Cloudflare account-scoped API tokens failing connection test in the App with CloudflareUserTokenRequiredError (#10723)
  • Google Workspace Calendar checks false FAIL on unconfigured settings with secure Google defaults (#10726)
  • prowler image --registry-list crashes with AttributeError because ImageProvider.__init__ returns early before registering the global provider (#10691)
  • Google Workspace Drive checks false FAIL on unconfigured settings with secure Google defaults (#10727)
  • Cloudflare validate_credentials can hang in an infinite pagination loop when the SDK repeats accounts, blocking connection tests (#10771)

Prowler 5.24.0

15 Apr 17:31
1b45724

Choose a tag to compare

✨ New features to highlight in this version

Enjoy them all now for free at https://cloud.prowler.com/

🖥️ Redesigned Resources

resources-1

The resources detail panel has been rebuilt from the ground up. The new side drawer consolidates resource metadata, associated findings, and events timeline into a cleaner, denser layout — designed to keep you inside the drawer while investigating a resource instead of bouncing back to the list.

resources-2

🧹 UX and Data Consistency

A large sweep of fixes landed this release targeting the rough edges users actually hit day to day: filter behavior, headers, counters drifting from the underlying data, drawer layouts, and scan/compliance/finding views surfacing stale or mislabeled context.

🆕 AWS Checks

Bedrock Security Hardening

Four new AWS checks tightening the blast radius around Amazon Bedrock and the identities that can reach it:

  • bedrock_full_access_policy_attached — flags IAM principals with AmazonBedrockFullAccess or equivalent wildcard Bedrock permissions attached
  • iam_role_access_not_stale_to_bedrock and iam_user_access_not_stale_to_bedrock — catch roles and users with Bedrock privileges that haven't been used recently, so dormant GenAI access stops piling up as a standing risk
  • bedrock_vpc_endpoints_configured — verifies Bedrock traffic stays on private VPC endpoints instead of traversing the public internet

Explore all AWS Bedrock checks at Prowler Hub.

IAM Marketplace Guardrails

Two new IAM checks to stop the silent path from a compromised identity to a paid marketplace subscription:

  • iam_policy_no_wildcard_marketplace_subscribe
  • iam_inline_policy_no_wildcard_marketplace_subscribe

Both detect aws-marketplace:Subscribe granted with wildcards on managed and inline policies — a vector that turns an IAM misconfiguration into a billing incident.

Explore all AWS IAM checks at Prowler Hub.

🆕 Microsoft 365 Checks

Entra Conditional Access

  • entra_conditional_access_policy_all_apps_all_users — ensures at least one CA policy targets every app and every user
  • entra_conditional_access_policy_mfa_enforced_for_guest_users - checks that guest and external users have MFA enforced. Without that compromised external accounts can access tenant resources using only a password
  • entra_conditional_access_policy_block_unknown_device_platforms - block access from unknown device platforms
  • entra_conditional_access_policy_corporate_device_sign_in_frequency_enforced - enforces sign in for non-corporate devices, without that user sessions may persist indefinitely on unmanaged devices
  • entra_conditional_access_policy_directory_sync_account_excluded — validates that the directory sync service account is excluded from restrictive CA policies to prevent sync outages

Explore all M365 Entra checks at Prowler Hub.

Intune

  • intune_device_compliance_policy_unassigned_devices_not_compliant_by_default — unassigned devices should not be marked compliant by default by the built-in device policy

Explore all M365 Intune checks at Prowler Hub.

Exchange Online

  • exchange_organization_delicensing_resiliency_enabled — keeps mailbox data accessible for 30 days after a license is removed, preventing accidental data loss

Explore all M365 Exchange checks at Prowler Hub.

🆕 Exclude Regions in AWS scans

Prowler now lets you exclude specific AWS regions from scans, so you can keep your scan scope focused on the regions that matter to you. You can configure exclusions with

  • --excluded-region
  • PROWLER_AWS_DISALLOWED_REGIONS environment variable
  • aws.disallowed_regions in config.yaml

See the AWS Regions and Partitions documentation for usage examples.


UI

🚀 Added

  • Resources side drawer with redesigned detail panel (#10673)
  • Syntax highlighting for remediation code blocks in finding groups drawer with provider-aware auto-detection (Shell, HCL, YAML, Bicep) (#10698)

🔄 Changed

  • Attack Paths scan selection: contextual button labels based on graph availability, tooltips on disabled actions, green dot indicator for selectable scans, and a warning banner when viewing data from a previous scan cycle (#10685)
  • Remove legacy finding detail sheet, row-details wrapper, and resource detail panel; unify findings and resources around new side drawers (#10692)
  • Attack Paths "View Finding" now opens the finding drawer inline over the graph instead of navigating to /findings in a new tab, preserving graph zoom, selection, and filter state
  • Attack Paths scan table: replace action buttons with radio buttons, add dedicated Graph column, use info-colored In Progress badge, remove redundant Progress column, and fix info banner variant (#10704)

🐞 Fixed

  • Findings group resource filters now strip unsupported scan parameters, display scan name instead of provider alias in filter badges, migrate mute modal from HeroUI to shadcn, and add searchable accounts/provider type selectors (#10662)
  • Compliance detail page header now reflects the actual provider, alias and UID of the selected scan instead of always defaulting to AWS (#10674)
  • Provider wizard modal moved to a stable page-level host so the providers table refreshes after link, authenticate, and connection check without closing the modal (#10675)

API

🔄 Changed

  • Bump Poetry to 2.3.4 in Dockerfile and pre-commit hooks. Regenerate api/poetry.lock (#10681)
  • Attack Paths: Remove dead cleanup_findings no-op and its supporting prowler_finding_lastupdated index (#10684)

🐞 Fixed

  • Worker-beat race condition on cold start: replaced sleep 15 with API service healthcheck dependency (Docker Compose) and init containers (Helm), aligned Gunicorn default port to 8080 (#10603)
  • API container startup crash on Linux due to root-owned bind-mount preventing JWT key generation (#10646)

🔐 Security

SDK

🚀 Added

  • entra_conditional_access_policy_directory_sync_account_excluded check for M365 provider (#10620)
  • intune_device_compliance_policy_unassigned_devices_not_compliant_by_default check for M365 provider (#10599)
  • entra_conditional_access_policy_all_apps_all_users check for M365 provider (#10619)
  • bedrock_full_access_policy_attached check for AWS provider (#10577)
  • iam_role_access_not_stale_to_bedrock and iam_user_access_not_stale_to_bedrock checks for AWS provider (#10536)
  • iam_policy_no_wildcard_marketplace_subscribe and iam_inline_policy_no_wildcard_marketplace_subscribe checks for AWS provider (#10525)
  • bedrock_vpc_endpoints_configured check for AWS provider (#10591)
  • exchange_organization_delicensing_resiliency_enabled check for M365 provider (#10608)
  • entra_conditional_access_policy_mfa_enforced_for_guest_users check for M365 provider (#10616)
  • entra_conditional_access_policy_corporate_device_sign_in_frequency_enforced check for M365 provider (#10618)
  • entra_conditional_access_policy_block_unknown_device_platforms check for M365 provider (#10615)
  • --excluded-region CLI flag, PROWLER_AWS_DISALLOWED_REGIONS environment variable, and aws.disallowed_regions config entry to skip specific AWS regions during scans (#10688)

🔄 Changed

  • Bump Poetry to 2.3.4 and consolidate SDK workflows onto the setup-python-poetry composite action with opt-in lockfile regeneration (#10681)
  • Normalize Conditional Access platform values in Entra models and simplify platform-based checks (#10635)

🐞 Fixed

Read more

Prowler 5.23.0

13 Apr 15:56
43da3fb

Choose a tag to compare

✨ New features to highlight in this version

Enjoy them all now for free at https://cloud.prowler.com/

🔎 Findings Grouped View

The problem: a real cloud environment produces thousands of findings per scan. A flat list makes it impossible to triage — the same misconfiguration repeated across 200 resources shows up as 200 rows, burying the signal, making prioritization guesswork, and turning "mute this false positive everywhere" into a click marathon. And once you're investigating a single resource, you lose sight of what else is wrong with it, because related findings are scattered across the same flat list.

findings_group_1

The problem this solves: findings are now grouped by check. One row per check title, with severity, impacted providers, and an X of Y impacted resources counter at a glance, so Vercel project has the Web Application Firewall enabled across every affected project collapses to a single row — not one per project. Sort or filter by severity, provider, or status at the group level and triage top-down instead of drowning in per-resource rows.

findings_group_2

Expand any group inline to see the failing resources with their UID, service, region, severity, provider, last seen, and failing for duration, then open the resource detail drawer for the full finding context: Risk, Description, Status Extended, Remediation, a direct "View in Prowler Hub" link, and a one-click Analyze This Finding With Lighthouse AI button. Bulk-mute an entire group in a single action instead of chasing duplicates across the list.

findings_group_3

Inside the drawer, a new Other Findings For This Resource tab lists every finding that hits the same resource (passing, failing, and muted) alongside the one you opened — so when you're looking at "WAF not enabled" on a Vercel project, you immediately see skew protection, rate limiting, IP blocking, custom firewall rules, and password protection findings for that same project, instead of going back to the main list and filtering by resource UID. Pair it with the Scans and Events tabs for full context without leaving the drawer.

findings_group_4

🏢 New Provider — Vercel

Connect Vercel teams via API token and audit deployments, domains, projects, and team settings. Ships with 26 security checks out of the box.

Explore all Vercel checks at Prowler Hub (no login required).

Read more in the Vercel provider documentation.

🏛️ Multi-Organization Management

Create, switch, edit, and delete organizations from the profile page. The active organization is switched automatically before deletion so JWTs are never rejected mid-flow.

Organizations

🔒 RBAC role lookup is now scoped by tenant_id to prevent cross-tenant privilege leaks, and admin tenant listing no longer requires the MANAGE_ACCOUNT permission.

Read more in the Multi-Tenant management documentation.

💡 Thanks to @pfe-nazaries and @Davidm4r for their first contributions as part of the Prowler Team 🚀

🤖 MCP Server — Resource Events Timeline

New resource events tool in the Prowler MCP Server that returns a who/what/when timeline for a given resource. For AWS, this surfaces CloudTrail events directly to your LLM: actor identity, event name, source IP, user agent, request parameters, and response payloads — the same data that powers the Events tab in the UI, now accessible from any MCP client.

Pair it with Lighthouse AI or your own agent to ask natural-language questions like "who modified this S3 bucket policy in the last 24 hours?" or "what actions has this IAM role performed recently?" without leaving your chat interface or jumping to the AWS console.

🕸️ Attack Paths — Custom Queries Editor Improvements

Custom query editor has been improved with syntax highlighting and line numbering to help you write openCypher queries.

openCypher query editor

Read more in the Attack Paths documentation.

📚 New Compliance Frameworks for Google Workspace

More compliance coverage this time for the Google Workspace provider:

  • CISA SCuBA Baselines
  • CIS Foundations Benchmark v1.3.0

💡Check’s coverage will increase in the next versions.

☁️ Oracle Cloud Infrastructure Improvements

  • Multi-region filtering via --region across filestorage, blockstorage, kms, compute, and identity services, including regions outside the tenancy home region
  • Mutelist support now passes tenancy_id to is_finding_muted, and the example Mutelist uses the proper Accounts key
  • False positive fixes in kms_key_rotation_enabled and events_rule_idp_group_mapping_changes

Explore all OCI checks at Prowler Hub.

Read more in the Oracle Cloud Infrastructure documentation.

💡 Thanks to @rchotacode for most of the OCI work this release!

🆕 Checks

AWS

  • cloudfront_distributions_logging_enabled — now detects Standard Logging v2 via CloudWatch Log Delivery — thanks to @mcrolly!
  • ec2_securitygroup_allow_ingress_from_internet_to_any_port_from_ip — uses ipaddress.is_global for accurate public IP detection — thanks to @raajheshkannaa!
  • glue_etl_jobs_no_secrets_in_arguments — detects plaintext secrets in Glue ETL job arguments — thanks to @raajheshkannaa!
  • awslambda_function_no_dead_letter_queue, awslambda_function_using_cross_account_layers, and awslambda_function_env_vars_not_encrypted_with_cmk — thanks to @sandiyochristan!
  • stepfunctions_statemachine_no_secrets_in_definition — thanks to @Jeevan-88

Explore all AWS checks at Prowler Hub.

GCP — Generative Language (Gemini) API Coverage

Two new checks covering the Gemini API surface — thanks to @F30:

  • apikeys_api_restricted_with_gemini_api
  • gemini_api_disabled

Explore all GCP checks at Prowler Hub.

Google Workspace

15 new checks, one to increase coverage in the directory service, three for the new calendar service and eleven for drive and docs services:

  • directory_super_admin_only_admin_roles
  • calendar_external_sharing_primary_calendar
  • calendar_external_sharing_secondary_calendar
  • calendar_external_invitations_warning
  • drive_external_sharing_warn_users
  • drive_publishing_files_disabled
  • drive_sharing_allowlisted_domains
  • drive_warn_sharing_with_allowlisted_domains
  • drive_access_checker_recipients_only
  • drive_internal_users_distribute_content
  • drive_shared_drive_creation_allowed
  • drive_shared_drive_managers_cannot_override
  • drive_shared_drive_members_only_access
  • drive_shared_drive_disable_download_print_copy
  • drive_desktop_access_disabled

Explore all Google Workspace checks at Prowler Hub.

Microsoft 365 — Conditional Access Hardening

Four new Conditional Access Policy checks for Entra ID, all aligned with Microsoft security baselines:

  • entra_conditional_access_policy_mdm_compliant_device_required
  • entra_conditional_access_policy_device_registration_mfa_required (plus entra_intune_enrollment_sign_in_frequency_every_time hardening)
  • entra_conditional_access_policy_block_elevated_insider_risk
  • entra_conditional_access_policy_block_o365_elevated_insider_risk

Explore all M365 checks at Prowler Hub.

🐍 Python 3.9 EndOfLife

Minimum Python version bumped to 3.10 as 3.9 reached end of life in October 2025.

Read more about it in this community announcement.

🛠️ CLI Improvements

  • New --resource-group and --list-resource-groups flags to filter checks by resource group across all providers
  • --list-checks and --list-checks-json now include the threat-detection category — thanks to @kaiisfree!
  • prowler image --registry no longer fails with ImageNoImagesProvidedError — registry arguments are forwarded through init_global_provider — thanks to @eblume!

🔐 Security Updates

  • Harden-Runner enabled across GitHub Actions workflows to monitor and restrict outbound network traffic during CI runs, detect unexpected endpoints, and protect against compromised dependencies exfiltrating secrets from the build environment
  • CVE-2026-28802authlib bumped from 1.6.5 to 1.6.9 (JWT alg: none validation bypass)
  • CVE-2026-26007 and CVE-2026-34073cryptography bumped from 44.0.3 to 46.0.6; oci to 2.169.0; alibabacloud-tea-openapi to 0.4.4
  • Sensitive CLI flag values (tokens, keys, passwords) in HTML output ...
Read more

Prowler 5.22.0

24 Mar 12:18
1a9b760

Choose a tag to compare

✨ New features to highlight in this version

Enjoy them all now for free at https://cloud.prowler.com

Findings page — Batch filter apply

Selecting filters no longer triggers a page re-render on each change. A new "Apply Filters" button lets you configure multiple filters before executing the query, fixing layout shifts and improving responsiveness.

filters

Attack Paths — Custom queries

Run custom openCypher queries against your Attack Paths graph alongside predefined queries. Use Lighthouse AI to help generate them.

custom 1 custom 2

Predefined Attack Paths queries now run faster 🚀

Read more about it in Attack Paths documentation

🙌 Community Contributors

  • @sandiyochristan — Replace stdlib XML parser with defusedxml in SAML metadata parsing to prevent XML bomb (billion laughs) DoS attacks (#10165)

UI

🚀 Added

  • Attack Paths custom openCypher queries with Cartography schema guidance and clearer execution errors (#10397)

🔄 Changed

  • Findings filters now use a batch-apply pattern with an Apply Filters button, filter summary strip, and independent filter options instead of triggering API calls on every selection (#10388)

API

🚀 Added

  • Finding groups support check_title substring filtering (#10377)

🐞 Fixed

  • Finding groups latest endpoint now aggregates the latest snapshot per provider before check-level totals, keeping impacted resources aligned across providers (#10419)
  • Mute rule creation now triggers finding-group summary re-aggregation after historical muting, keeping stats in sync after mute operations (#10419)
  • Attack Paths: Deduplicate nodes before ProwlerFinding lookup in Attack Paths Cypher queries, reducing execution time (#10424)

🔐 Security

SDK

🐞 Fixed

  • Azure MySQL flexible server checks now compare configuration values case-insensitively to avoid false negatives when Azure returns lowercase values (#10396)
  • Azure vm_backup_enabled and vm_sufficient_daily_backup_retention_period checks now compare VM names case-insensitively to avoid false negatives when Azure stores backup item names in a different case (#10395)
  • entra_non_privileged_user_has_mfa skips disabled users to avoid false positives (#10426)

Prowler 5.21.1

20 Mar 08:00
73dde78

Choose a tag to compare

API

🐞 Fixed

  • ThreatScore aggregation query to eliminate unnecessary JOINs and COUNT(DISTINCT) overhead (#10394)

Prowler 5.21.0

19 Mar 11:59
1b3ed72

Choose a tag to compare

✨ New features to highlight in this version

Enjoy them all now for free at https://cloud.prowler.com

🏛️ Google Workspace - Full App Support

Google Workspace provider is now fully integrated with the Prowler App. You can now connect and scan your Google Workspace environment directly from the UI.

Read more in our Google Workspace documentation.

Explore all Google Workspace checks at Prowler Hub.

🤖 Lighthouse AI

We've added a new system to provide AI skills to Lighthouse AI alongside the first one: Attack Path Custom Query. This skill provides the LLM with openCypher syntax guidance and Cartography schema knowledge for writing graph queries against Prowler's data.

This was included alongside a new tool in the Prowler MCP to get the Cartography's scan schema.

📖 Check Metadata

We've completed the check's metadata migration to the new format 🎉 Now all are structured in the same way.

Huge shoutout to the Prowler's Detection&Remediation team for this massive effort!

Read more in our Check Metadata Guidelines

⌛ AWS Resource Timeline

You can now see the last 90 days of AWS CloudTrail events for a given findings!

AWS resource modification history is now visible directly in the App. A new Events tab in Findings and Resource detail cards shows an AWS CloudTrail timeline with expandable event rows, actor details, request/response JSON payloads, and error information. A read-event toggle lets you include or exclude read-only API calls from the timeline.

Events

🐳 Container Image

Container Image provider is now fully integrated with the Prowler App. You can now connect and scan your container registry directly from the UI.

Read more in our Container Image documentation.

🏛️ AWS Organizations Improvements

We've upgraded AWS Organizations management in the Cloud Providers page with greater flexibility and control. You can now edit organization names and credentials, run connection tests across all accounts or scoped to a specific organizational unit, and delete individual organizational units or full organizations.

Orgs Improvement

🕸️ Attack Paths Improvements

We continued improving Attack Paths UX by improving performance and adding more labels to improve filtering when using custom queries.

📄 Compliance

We've improved compliance coverage with the following frameworks:

  • SecNumCloud 3.2 for AWS, Azure, GCP, Alibaba and Oracle Cloud
  • Reserve Bank of India (RBI) for Azure

🔍 New Checks

Microsoft 365

  • entra_conditional_access_policy_device_code_flow_blocked - Conditional Access policy blocks device code flow to prevent phishing attacks
  • entra_conditional_access_policy_require_mfa_for_admin_portals - Conditional Access policy requires MFA for Microsoft Admin Portals

Explore all Microsoft 365 checks at Prowler Hub.

Github

  • organization_repository_deletion_limited - Organization repository deletion and transfer is restricted to owners - Thanks to @shalkoda

Explore all Github checks at Prowler Hub.

🙌 Community Contributors


UI

🚀 Added

  • Skill system to Lighthouse AI (#10322)
  • Skill for creating custom queries on Attack Paths (#10323)

🔄 Changed

  • Google Workspace provider support (#10333)
  • Image (Container Registry) provider support in UI: badge icon, credentials form, and provider-type filtering (#10167)
  • Events tab in Findings and Resource detail cards showing an AWS CloudTrail timeline with expandable event rows, actor info, request/response JSON payloads, and error details (#10320)
  • AWS Organization and organizational unit row actions (Edit Name, Update Credentials, Test Connections, Delete) in providers table dropdown (#10317)

API

🚀 Added

  • CORS_ALLOWED_ORIGINS configurable via environment variable (#10355)
  • Attack Paths: Tenant and provider related labels to the nodes so they can be easily filtered on custom queries (#10308)

🔄 Changed

  • Attack Paths: Complete migration to private graph labels and properties, removing deprecated dual-write support (#10268)
  • Attack Paths: Reduce sync and findings memory usage with smaller batches, cursor iteration, and sequential sessions (#10359)

🐞 Fixed

  • Attack Paths: Recover graph_data_ready flag when scan fails during graph swap, preventing query endpoints from staying blocked until the next successful scan (#10354)

🔐 Security

  • Use psycopg2.sql to safely compose DDL in PostgresEnumMigration, preventing SQL injection via f-string interpolation (#10166)

SDK

🚀 Added

  • misconfig scanner as default for Image provider scans (#10167)
  • entra_conditional_access_policy_device_code_flow_blocked check for M365 provider (#10218)
  • RBI compliance for the Azure provider (#10339)
  • entra_conditional_access_policy_require_mfa_for_admin_portals check for Azure provider and update CIS compliance (#10330)
  • CheckMetadata Pydantic validators (#8583)
  • organization_repository_deletion_limited check for GitHub provider (#10185)
  • SecNumCloud 3.2 for the GCP provider (#10364)
  • SecNumCloud 3.2 for the Azure provider (#10358)
  • SecNumCloud 3.2 for the Alibaba Cloud provider (#10370)
  • SecNumCloud 3.2 for the Oracle Cloud provider (#10371)

🔄 Changed

  • Bump pygithub from 2.5.0 to 2.8.0 to use native Organization properties
  • Update M365 SharePoint service metadata to new format (#9684)
  • Update M365 Exchange service metadata to new format (#9683)
  • Update M365 Teams service metadata to new format (#9685)
  • Update M365 Entra ID service metadata to new format (#9682)
  • Update ResourceType and Categories for Azure Entra ID service metadata (#10334)
  • Update OCI Regions to include US DoD regions (#10375)

🐞 Fixed

  • Route53 dangling IP check false positive when using --region flag (#9952)
  • RBI compliance framework support on Prowler Dashboard for the Azure provider (#10360)
  • CheckMetadata strict validators rejecting valid external tool provider data (image, iac, llm) (#10363)

🔐 Security

MCP

🚀 Added

  • Attack Path tool to get Neo4j DB schema (#10321)

Prowler 5.20.0

12 Mar 16:41
01c16b3

Choose a tag to compare

✨ New features to highlight in this version

Enjoy them all now for free at https://cloud.prowler.com

🏛️ AWS Organizations Improvements

Note

Available exclusively in Prowler Cloud.

  • We've improved the AWS Organizations onboarding wizard making it easier to deploy the required CloudFormation templates.
  • Findings now include Organizational Unit ID and name across all output formats (ASFF, OCSF, CSV), giving you full visibility into which OU each account belongs to — Thanks to @raajheshkannaa!
  • Cloud Providers page shows your AWS Organizations hierarchy tree with organizational units and accounts.
Screenshot 2026-03-12 at 15 32 21

🕸️ Attack Paths Improvements

  • APOC to standard openCypher migration: Network exposure queries now use standard openCypher instead of APOC procedures, making them use better open standards
  • Cartography upgrade: Upgraded from 0.129.0 to 0.132.0, fixing exposed_internet not being set on ELB/ELBv2 nodes
  • Custom query endpoint: Cypher blocklist, input validation, rate limiting, and Helm lockdown for hardening its security
  • Security hardening — Cypher blocklist, input validation, rate limiting, and Helm lockdown for the custom query endpoint
  • Better error handling: Server errors (5xx) and network failures now show user-friendly messages instead of raw internal errors
  • Improved logging: Query execution and scan error handling now log properly
  • Several UX improvements in the Attack Paths page

🏛️ Google Workspace - API Only

Google Workspace is now fully integrated with the Prowler API. After being introduced as a CLI-only provider in v5.19.0, you can now connect and scan your Google Workspace environment directly from the API. Full App support will be included in the next release.

Read more in our Google Workspace documentation.

Explore all Google Workspace checks at Prowler Hub.

☁️ OpenStack — Object Storage Service

OpenStack continues to expand with a brand new Object Storage service adding 7 security checks covering container access control, versioning, encryption, metadata hygiene, and lifecycle management.

Read more in our OpenStack documentation.

Explore all OpenStack checks at Prowler Hub.

🔍 New Checks

AWS

  • guardduty_delegated_admin_enabled_all_regions - Verify that a delegated administrator account is configured for GuardDuty - Thanks to @m-wentz!
  • opensearch_service_domains_not_publicly_accessible - Now supports a trusted_ips configuration option. If your OpenSearch domain has a resource policy restricting access to known IPs, you no longer get a false positive on the public accessibility check — Thanks to @codename470!

Explore all AWS checks at Prowler Hub.

Microsoft 365

  • entra_conditional_access_policy_approved_client_app_required_for_mobile — Requires approved client apps on mobile devices
  • entra_conditional_access_policy_compliant_device_hybrid_joined_device_mfa_required — Requires compliant/hybrid-joined device or MFA

Explore all M365 checks at Prowler Hub.

🐞 Bug Fixes

We've added several bug fixes to improve the user experience across the application.

⛵ Community Helm Chart

Prowler now has an official community-maintained Helm chart for self-hosted deployments on Kubernetes. The chart is published as an OCI artifact to oci://ghcr.io/prowler-cloud/charts/prowler on every release.

Check it on https://ghcr.io/prowler-cloud/charts/prowler

Thanks to @Ca-moes and @Utwo for building and maintaining this chart!

🙌 Community Contributors


UI

🔄 Changed

  • Attack Paths: Improved error handling for server errors (5xx) and network failures with user-friendly messages instead of raw internal errors and layout changes (#10249)
  • Refactor simple providers with new components and styles (#10259)
  • Providers page redesigned with cloud organization hierarchy, HeroUI-to-shadcn migration, organization and account group filters, and row selection for bulk actions (#10292)
  • AWS Organizations onboarding now uses a clearer 3-step flow: deploy the ProwlerScan role in the management account via CloudFormation Stack, deploy to member accounts via StackSet with a copyable template URL, and confirm with the Role ARN (#10274)

🐞 Fixed

  • Provider wizard now closes after updating credentials instead of incorrectly advancing to the Launch Scan step, which caused API errors for providers with existing scheduled scans (#10278)
  • Attack Paths query builder sending stale parameters from previous query selections due to validation schema and default values being recreated on every render (#10306)
  • Finding detail drawer crashing when resource, scan, or provider relationships are missing from the API response (#10314)

🔐 Security

  • npm transitive dependencies patched to resolve 11 Dependabot alerts (6 HIGH, 4 MEDIUM, 1 LOW): hono, @hono/node-server, fast-xml-parser, serialize-javascript, minimatch (#10267)

API

🔄 Changed

  • Attack Paths: Migrate network exposure queries from APOC to standard openCypher for Neo4j and Neptune compatibility (#10266)
  • POST /api/v1/providers returns 409 Conflict if already exists (#10293)

🐞 Fixed

  • Attack Paths: Security hardening for custom query endpoint (Cypher blocklist, input validation, rate limiting, Helm lockdown) (#10238)
  • Attack Paths: Missing logging for query execution and exception details in scan error handling (#10269)
  • Attack Paths: Upgrade Cartography from 0.129.0 to 0.132.0, fixing exposed_internet not set on ELB/ELBv2 nodes (#10272)

SDK

🚀 Added

  • entra_conditional_access_policy_approved_client_app_required_for_mobile check for M365 provider (#10216)
  • entra_conditional_access_policy_compliant_device_hybrid_joined_device_mfa_required check for M365 provider (#10197)
  • trusted_ips configurable option for opensearch_service_domains_not_publicly_accessible check to reduce false positives on IP-restricted policies (#8631)
  • guardduty_delegated_admin_enabled_all_regions check for AWS provider (#9867)
  • OpenStack object storage service with 7 checks (#10258)
  • AWS Organizations OU metadata (OU ID, OU path) in ASFF, OCSF and CSV outputs (#10283)

🔄 Changed

  • Update Kubernetes API server checks metadata to new format (#9674)
  • Update Kubernetes Controller Manager service metadata to new format (#9675)
  • Update Kubernetes Core service metadata to new format (#9676)
  • Update Kubernetes Kubelet service metadata to new format (#9677)
  • Update Kubernetes RBAC service metadata to new format (#9678)
  • Update Kubernetes Scheduler service metadata to new format (#9679)
  • Update MongoDB Atlas Organizations service metadata to new format (#9658)
  • Update MongoDB Atlas clusters service metadata to new format (#9657)
  • Update GitHub Repository service metadata to new format (#9659)
  • Update GitHub Organization service metadata to new format (#10273)
  • Update Oracle Cloud Compute Engine service metadata to new format (#9371)
  • Update Oracle Cloud Database service metadata to new format [(#9372)](https://github.com/prowler-cloud/prowler/p...
Read more