Releases: prowler-cloud/prowler
Prowler 5.24.4
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_RATEenv var (default0.02) enables Sentry performance tracing for the API (#10873)
🔄 Changed
- Attack Paths: Neo4j driver
connection_acquisition_timeoutis now configurable viaNEO4J_CONN_ACQUISITION_TIMEOUT(default lowered from 120 s to 15 s) (#10873)
Prowler 5.24.3
API
🚀 Added
/overviews/findings,/overviews/findings-severityand/overviews/servicesnow reflect newly-muted findings without waiting for the next scan. The post-mutereaggregate-all-finding-group-summariestask 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 withFinding.mutedupdates (#10827)
🐞 Fixed
- Finding groups aggregated
statusnow treats muted findings as resolved: a group isFAILonly while at least one non-muted FAIL remains, otherwise it isPASS(including fully-muted groups). Thefilter[status]filter and thesort=statusordering share the same semantics, keepingstatusconsistent withfail_countand the orthogonalmutedflag (#10825) aggregate_findingsis now idempotent: it deletes the scan's existingScanSummaryrows beforebulk_create, so re-runs (such as the post-mute reaggregation pipeline) no longer violate theunique_scan_summaryconstraint and no longer abort the downstreamDailySeveritySummary/FindingGroupDailySummaryrecomputation 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
Prowler 5.24.2
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
/resourcesendpoints now materialize the filtered finding IDs into a Python list before filteringResourceFindingMapping(#10816)
🐞 Fixed
/finding-groups/latest/<check_id>/resourcesnow selects the latest completed scan per provider by-completed_at(then-inserted_at) instead of-inserted_at, matching the/finding-groups/latestsummary path and the daily-summary upsert so overlapping scans no longer produce divergingdelta/new_countbetween the two endpoints (#10802)
Prowler 5.24.1
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 awidewidth 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
deltaindicator (#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_SIZEandFINDINGS_BATCH_SIZEdefaults 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_idfilter while getting related findings after scan completes (#10722) - Finding group counters
pass_count,fail_countandmanual_countnow exclude muted findings (#10753) - Silent data loss in
ResourceFindingMappingbulk insert that left findings orphaned whenINSERT ... ON CONFLICT DO NOTHINGdropped rows without raising; added explicitunique_fields(#10724)
SDK
🔄 Changed
msgraph-sdkfrom 1.23.0 to 1.55.0 andazure-mgmt-resourcefrom 23.3.0 to 24.0.0, removingmarshmallowas 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-listcrashes withAttributeErrorbecauseImageProvider.__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_credentialscan hang in an infinite pagination loop when the SDK repeats accounts, blocking connection tests (#10771)
Prowler 5.24.0
✨ New features to highlight in this version
Enjoy them all now for free at https://cloud.prowler.com/
🖥️ Redesigned Resources
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.
🧹 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 withAmazonBedrockFullAccessor equivalent wildcard Bedrock permissions attachediam_role_access_not_stale_to_bedrockandiam_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 riskbedrock_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_subscribeiam_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 userentra_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 passwordentra_conditional_access_policy_block_unknown_device_platforms- block access from unknown device platformsentra_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 devicesentra_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-regionPROWLER_AWS_DISALLOWED_REGIONSenvironment variableaws.disallowed_regionsinconfig.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
/findingsin 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.4in Dockerfile and pre-commit hooks. Regenerateapi/poetry.lock(#10681) - Attack Paths: Remove dead
cleanup_findingsno-op and its supportingprowler_finding_lastupdatedindex (#10684)
🐞 Fixed
- Worker-beat race condition on cold start: replaced
sleep 15with API service healthcheck dependency (Docker Compose) and init containers (Helm), aligned Gunicorn default port to8080(#10603) - API container startup crash on Linux due to root-owned bind-mount preventing JWT key generation (#10646)
🔐 Security
pytestfrom 8.2.2 to 9.0.3 to fix CVE-2025-71176 (#10678)
SDK
🚀 Added
entra_conditional_access_policy_directory_sync_account_excludedcheck for M365 provider (#10620)intune_device_compliance_policy_unassigned_devices_not_compliant_by_defaultcheck for M365 provider (#10599)entra_conditional_access_policy_all_apps_all_userscheck for M365 provider (#10619)bedrock_full_access_policy_attachedcheck for AWS provider (#10577)iam_role_access_not_stale_to_bedrockandiam_user_access_not_stale_to_bedrockchecks for AWS provider (#10536)iam_policy_no_wildcard_marketplace_subscribeandiam_inline_policy_no_wildcard_marketplace_subscribechecks for AWS provider (#10525)bedrock_vpc_endpoints_configuredcheck for AWS provider (#10591)exchange_organization_delicensing_resiliency_enabledcheck for M365 provider (#10608)entra_conditional_access_policy_mfa_enforced_for_guest_userscheck for M365 provider (#10616)entra_conditional_access_policy_corporate_device_sign_in_frequency_enforcedcheck for M365 provider (#10618)entra_conditional_access_policy_block_unknown_device_platformscheck for M365 provider (#10615)--excluded-regionCLI flag,PROWLER_AWS_DISALLOWED_REGIONSenvironment variable, andaws.disallowed_regionsconfig entry to skip specific AWS regions during scans (#10688)
🔄 Changed
- Bump Poetry to
2.3.4and consolidate SDK workflows onto thesetup-python-poetrycomposite action with opt-in lockfile regeneration (#10681) - Normalize Conditional Access platform values in Entra models and simplify platform-based checks (#10635)
🐞 Fixed
- Vercel firewall config handling for team-scoped projects and current API response shapes [(#10695)](https://github.com/prowler-cloud/pr...
Prowler 5.23.0
✨ 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.
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.
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.
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.
🏢 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.
🔒 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.
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
--regionacrossfilestorage,blockstorage,kms,compute, andidentityservices, including regions outside the tenancy home region - Mutelist support now passes
tenancy_idtois_finding_muted, and the example Mutelist uses the properAccountskey - False positive fixes in
kms_key_rotation_enabledandevents_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— usesipaddress.is_globalfor 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, andawslambda_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_apigemini_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_rolescalendar_external_sharing_primary_calendarcalendar_external_sharing_secondary_calendarcalendar_external_invitations_warningdrive_external_sharing_warn_usersdrive_publishing_files_disableddrive_sharing_allowlisted_domainsdrive_warn_sharing_with_allowlisted_domainsdrive_access_checker_recipients_onlydrive_internal_users_distribute_contentdrive_shared_drive_creation_alloweddrive_shared_drive_managers_cannot_overridedrive_shared_drive_members_only_accessdrive_shared_drive_disable_download_print_copydrive_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_requiredentra_conditional_access_policy_device_registration_mfa_required(plusentra_intune_enrollment_sign_in_frequency_every_timehardening)entra_conditional_access_policy_block_elevated_insider_riskentra_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-groupand--list-resource-groupsflags to filter checks by resource group across all providers --list-checksand--list-checks-jsonnow include thethreat-detectioncategory — thanks to @kaiisfree!prowler image --registryno longer fails withImageNoImagesProvidedError— registry arguments are forwarded throughinit_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-28802 —
authlibbumped from 1.6.5 to 1.6.9 (JWTalg: nonevalidation bypass) - CVE-2026-26007 and CVE-2026-34073 —
cryptographybumped from 44.0.3 to 46.0.6;ocito 2.169.0;alibabacloud-tea-openapito 0.4.4 - Sensitive CLI flag values (tokens, keys, passwords) in HTML output ...
Prowler 5.22.0
✨ 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.
Attack Paths — Custom queries
Run custom openCypher queries against your Attack Paths graph alongside predefined queries. Use Lighthouse AI to help generate them.
Predefined Attack Paths queries now run faster 🚀
Read more about it in Attack Paths documentation
🙌 Community Contributors
- @sandiyochristan — Replace stdlib XML parser with
defusedxmlin 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_titlesubstring 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
- Replace stdlib XML parser with
defusedxmlin SAML metadata parsing to prevent XML bomb (billion laughs) DoS attacks (#10165) - Bump
flaskto 3.1.3 (CVE-2026-27205) andwerkzeugto 3.1.6 (CVE-2026-27199) (#10430)
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_enabledandvm_sufficient_daily_backup_retention_periodchecks 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_mfaskips disabled users to avoid false positives (#10426)
Prowler 5.21.1
API
🐞 Fixed
- ThreatScore aggregation query to eliminate unnecessary JOINs and
COUNT(DISTINCT)overhead (#10394)
Prowler 5.21.0
✨ 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.
🐳 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.
🕸️ 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 attacksentra_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
- @shalkoda —
organization_repository_deletion_limitedcheck for Github (#10185) - @AlienwareSec - Route53 dangling IP check false positive when using
--regionflag (#9952) - @tejas0077 - RBI compliance for the Azure provider (#10339)
- @JiwaniZakir -
CORS_ALLOWED_ORIGINSconfigurable via environment variable (#10355)
UI
🚀 Added
🔄 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_ORIGINSconfigurable 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_readyflag when scan fails during graph swap, preventing query endpoints from staying blocked until the next successful scan (#10354)
🔐 Security
- Use
psycopg2.sqlto safely compose DDL inPostgresEnumMigration, preventing SQL injection via f-string interpolation (#10166)
SDK
🚀 Added
misconfigscanner as default for Image provider scans (#10167)entra_conditional_access_policy_device_code_flow_blockedcheck for M365 provider (#10218)- RBI compliance for the Azure provider (#10339)
entra_conditional_access_policy_require_mfa_for_admin_portalscheck for Azure provider and update CIS compliance (#10330)- CheckMetadata Pydantic validators (#8583)
organization_repository_deletion_limitedcheck 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
pygithubfrom 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
--regionflag (#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
- Bump
multipartto 1.3.1 to fix GHSA-p2m9-wcp5-6qw3 (#10331)
MCP
🚀 Added
- Attack Path tool to get Neo4j DB schema (#10321)
Prowler 5.20.0
✨ 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.
🕸️ Attack Paths Improvements
APOCto standardopenCyphermigration: 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 atrusted_ipsconfiguration 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 devicesentra_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
- @m-wentz —
guardduty_delegated_admin_enabled_all_regionscheck for AWS (#9867) - @codename470 —
trusted_ipsconfig for OpenSearch check (#8631) - @raajheshkannaa — AWS Organizations OU metadata in outputs (#10283)
- @Ca-moes @Utwo — Helm Continuous Deployment (#10079)
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/providersreturns409 Conflictif 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_internetnot set on ELB/ELBv2 nodes (#10272)
SDK
🚀 Added
entra_conditional_access_policy_approved_client_app_required_for_mobilecheck for M365 provider (#10216)entra_conditional_access_policy_compliant_device_hybrid_joined_device_mfa_requiredcheck for M365 provider (#10197)trusted_ipsconfigurable option foropensearch_service_domains_not_publicly_accessiblecheck to reduce false positives on IP-restricted policies (#8631)guardduty_delegated_admin_enabled_all_regionscheck 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...