Releases: prowler-cloud/prowler
Prowler 5.29.2
UI
🔄 Changed
- Account and provider-type selector triggers now show the provider icon, with a non-deduped icon stack (#11424)
🐞 Fixed
- Add Provider modal now closes without reloading the providers page (#11424)
- Users page now shows the "Delete User" action only on the current user's row, matching the backend rule that a user can only delete their own account (#11447)
🔐 Security
- Vitest toolchain upgraded
4.0.18→4.1.8to clear two criticalpnpm auditadvisories (#11424)
Prowler 5.29.1
API
🐞 Fixed
GET /api/v1/findingsN+1 query loadingresources__tagswhen listing findings (#11420)- Clean up the scan tmp output directory when
scan-reportfails so partial files do not accumulate and fill the worker disk (No space left on device) (#11421)
SDK
🐞 Fixed
- OCSF output writer now re-raises I/O errors (e.g.
ENOSPC) instead of logging them per finding and leaving a truncated file (#11421)
Prowler 5.29.0
✨ New features to highlight in this version
Enjoy them all now for free at https://cloud.prowler.com
🧑💼 Google Workspace — 20 new checks to complete CIS 1.3
20 new checks built on the Cloud Identity Policy API:
- Rules service — 8 checks
- Security service — 12 checks
With these checks, Prowler's automated coverage of the CIS Google Workspace Benchmark 1.3 is now complete.
Read more in our Google Workspace documentation.
Explore all checks at Prowler Hub.
🔑 Okta — Application Service
A new application service for Okta with 6 checks covering admin console and dashboard hardening:
application_admin_console_session_idle_timeout_15minapplication_admin_console_mfa_requiredapplication_admin_console_phishing_resistant_authenticationapplication_dashboard_mfa_requiredapplication_dashboard_phishing_resistant_authenticationapplication_authentication_policy_network_zone_enforced
Read more in our Okta documentation.
Explore all checks at Prowler Hub.
🚀 API - Performance
- Scan ingestion is significantly lighter on the database. The scan hot loop now bulk-resolves
Resource/ResourceTagrows, replaces per-mappingSELECT FOR UPDATEwith deferred conflict-tolerant bulk inserts, wraps each micro-batch in a single transaction, and raises the batch size to 1000. - Faster
finding-groups/latestaggregation on tenants where one recent scan holds most findings.
🏢 New Provider: StackIT
Prowler now supports StackIT, the German sovereign cloud. Authentication uses a service account key, either as a file path (--stackit-service-account-key-path / STACKIT_SERVICE_ACCOUNT_KEY_PATH) or inline JSON (--stackit-service-account-key / STACKIT_SERVICE_ACCOUNT_KEY).
Note
StackIT is not officially supported. For more information, contact us.
Read more in our StackIT documentation.
Explore all checks at Prowler Hub.
Thanks to @johannes-engler-mw for their 1st provider in Prowler!
📋 Scan Jobs — Redesigned View
The Scan Jobs view in the UI is fully restyled around dedicated tabs, each with columns tailored to its context:
- In Progress — running and queued scans, auto-refreshing while jobs execute.
- Completed — finished scans with quick access to their findings.
- Scheduled — upcoming scans with their schedule.
Launching a scan now happens through a dedicated modal where you pick connected cloud accounts and add optional scan notes.
🌑 Dark Mode — Redesigned
Dark mode has been reworked for clarity and contrast:
- Pure-black canvas and pure-white primary text for maximum legibility.
- Brighter border and input tokens so cards, tables, and inputs separate cleanly instead of blending into the background.
📚 Compliance - AWS AI Security Framework
A new AWS AI Security Framework mapping Prowler checks to AI/ML security guidance.
Read more in our compliance documentation.
🔍 New Checks
Azure
storage_account_public_network_access_disabled— flags storage accounts that allow public network access
Explore all Azure checks at Prowler Hub.
🔐 Security Updates
UI
pnpmupgraded to 11 with supply-chain defaults consolidated inpnpm-workspace.yamlandtrustPolicyExcludeentries pinned to exact versions.uuidpinned to11.1.1viapnpm-workspace.yaml#overridesto clearGHSA-w5hq-g745-h8pq(missing bounds check inv3/v5/v6name-based generators withbuf) in the transitive tree.
🙌 External Contributors
Thank you to our community contributors for this release!
- @johannes-engler-mw — Add the StackIT provider with service-account-key authentication in #9237
- @Br1an67 — Add Azure authentication for sovereign clouds (China / US Government) in #10284
- @OokaToru — Deprecate the
s3_bucket_default_encryptioncheck for AWS in #11230 - @juampa — Fix the ENS RD 311/2022 VPC compliance mapping for AWS in #11372
UI
🚀 Added
- Restyle
Scan Jobsview with specific In Progress, Completed, Scheduled tabs (#11258)
🔄 Changed
- Dark mode: pure-black canvas, pure-white primary text, and brighter border / input tokens for clearer separation between cards, tables, and inputs (#11073)
- CI workflows (
ui-tests.yml,ui-e2e-tests-v2.yml) now read the Node version fromui/.nvmrcand the pnpm version frompackage.json#packageManagerinstead of hardcoded values (#11225)
🐞 Fixed
- Compliance page now loads the most recent scan when opened from the sidebar instead of showing the "no compliance data available" alert (#11374)
- Invitation links now show specific expired, no-longer-valid, and invalid-token messages based on API error responses (#11376)
🔐 Security
pnpmupgraded to 11 with supply-chain defaults consolidated inpnpm-workspace.yamlandtrustPolicyExcludeentries pinned to exact versions (#11225)uuidpinned to11.1.1viapnpm-workspace.yaml#overridesto clearGHSA-w5hq-g745-h8pq(missing bounds check inv3/v5/v6name-based generators withbuf) in the transitive tree (#11225)
API
🔄 Changed
- Scan finding ingestion: bulk-resolve
Resource/ResourceTagrows, replace per-mappingSELECT FOR UPDATEwith deferredResourceTagMapping.bulk_create(ignore_conflicts=True), wrap each micro-batch in a singlerls_transaction, and raiseSCAN_DB_BATCH_SIZEto 1000 (#11249) - Faster
GET /api/v1/finding-groups/latestaggregation on tenants where one recent scan holds most findings (#11380)
SDK
🚀 Added
applicationservice for Okta provider withapplication_admin_console_session_idle_timeout_15min,application_admin_console_mfa_required,application_admin_console_phishing_resistant_authentication,application_dashboard_mfa_required,application_dashboard_phishing_resistant_authentication, andapplication_authentication_policy_network_zone_enforcedchecks (#11358)- AWS AI Security Framework compliance for AWS provider (#11353)
storage_account_public_network_access_disabledcheck for Azure provider and remapped the Azure CIS "Public Network Access is Disabled" requirements to it (#11334)- StackIT provider now authenticates with a service account key, either as a file path (
--stackit-service-account-key-path/STACKIT_SERVICE_ACCOUNT_KEY_PATH) or as inline JSON content (--stackit-service-account-key/STACKIT_SERVICE_ACCOUNT_KEY, intended for CI/CD with a secret manager); the StackIT SDK refreshes access tokens internally, replacing the short-livedSTACKIT_API_TOKENflow (#9237) - 8 Rules service checks for Google Workspace provider using the Cloud Identity Policy API (#11379)
- 12 Security service checks for Google Workspace provider using the Cloud Identity Policy API (#11356)
⚠️ Deprecated
s3_bucket_default_encryptioncheck for AWS provider since SSE-S3 is automatically applied to all S3 buckets by AWS as of January 5, 2023 and can no longer be disabled (#11230)
🐞 Fixed
- ENS RD 311/2022 (AWS) compliance mapping:
vpc_different_regionswas uncorrectly mapped under themp.com.4family (Network segregation). That check is now mapped to a newop.cont.2.aws.vpc.1requirement under the Continuity of Service control (#11372) - Compliance CSV row count now matches the UI per requirement by sourcing rows from the framework JSON's
requirement.Checksinstead of the stalefinding.compliancesnapshot (#11370) - OpenStack provider exception codes m...
Prowler 5.28.1
UI
🐞 Fixed
- Large scan report ZIP downloads now stream through a Next.js Route Handler instead of buffering the full file in a Server Action (#11330)
- Compliance requirement findings table now respects the page size selector (#11365)
API
🐞 Fixed
finding-groupsslow response with finding-level filters such asregion; check title and description are now read from the daily summaries, which drops sorting bycheck_title(#11326)
SDK
🐞 Fixed
compute_project_os_login_enabledandcompute_project_os_login_2fa_enabledchecks for GCP provider no longer false-FAIL on projects where theenable-oslogin/enable-oslogin-2fametadata is not set explicitly but is inherited automatically from theconstraints/compute.requireOsLoginorg policy. The policy controller writes the inherited value in lowercase ("true"), but the service-layer parser compared it to the uppercase string literal"TRUE". Comparison is now case-insensitive (#11341)storage_smb_channel_encryption_with_secure_algorithmcheck for Azure provider no longer passes when a storage account allows a weak SMB channel encryption algorithm (e.g.AES-128-CCM/AES-128-GCM) alongsideAES-256-GCM; it now requires every enabled algorithm to be in the recommended list, configurable viaazure.recommended_smb_channel_encryption_algorithms(defaults toAES-256-GCMonly, as required by CIS) (#11327)- Azure and M365 providers crashing with
RuntimeError: There is no current event loopon Python 3.12 when called from threads without an active event loop (e.g. Celery workers) (#11360)
MCP
🐞 Fixed
- Preserve authorization header in HTTP mode (#11366)
Prowler 5.28.0
✨ New features to highlight in this version
Enjoy them all now for free at https://cloud.prowler.com
🆔 Okta - Prowler App
Okta lands in Prowler App.
Authenticate with read-only OAuth credentials and scan your Okta tenant from the App in minutes.
The signon service also grows from 1 to 5 checks. Four new medium-severity checks cover the rest of the DISA STIG Okta IDaaS V1R2 Global Session Policy and sign-in banner controls:
signon_global_session_lifetime_18h— V-273203 / OKTA-APP-001665. Global session maximum lifetime must be 18 hours or less.signon_global_session_cookies_not_persistent— V-273206 / OKTA-APP-001710. Global session cookies must not be persistent across browser restarts.signon_global_session_policy_network_zone_enforced— V-279691 / OKTA-APP-003242. Global Session Policy rules must enforce a network zone constraint.signon_dod_warning_banner_configured— V-273192 / OKTA-APP-000200. The customized sign-in page must display the DoD-mandated warning banner.
Note
The banner check requires reading Okta brands and customized sign-in pages, so okta.brands.read is now part of DEFAULT_SCOPES. Existing Okta service apps must grant it before upgrading.
Read more in our Okta provider documentation.
Explore all Okta checks at Prowler Hub.
🧾 Finding Evidence
The finding detail drawer in the Prowler App now exposes a dedicated "Resource Metadata / Evidence" tab, backed by a new resource.metadata attribute on /api/v1/findings?include=resources.
The tab surfaces the raw resource attributes Prowler captured at scan time, the evidence behind every PASS / FAIL, in one click from the finding. No more jumping out to the source-of-truth console just to confirm what the scanner saw.
🤖 Prowler for Claude Code
Prowler ships a Claude Code plugin and marketplace so Claude can drive end-to-end cloud security and compliance assessments through the Prowler MCP server, against a Prowler Cloud-connected account.
Install it from inside Claude Code:
/plugin marketplace add prowler-cloud/prowler
/plugin install prowler@prowler-plugins
From there, Claude can walk an provider through a chosen security or industry framework and remediate findings until the framework is compliant.
Note
The plugin is in preview and under active development. Please report issues on GitHub or join the Slack community for feedback.
Read more in our Prowler for Claude Code documentation.
📧 Google Workspace — Sites, Marketplace, Additional services, Groups
The Google Workspace provider gains four new services and six new checks through the Cloud Identity Policy API:
- Sites —
sites_service_disabled: verifies legacy Google Sites is disabled for the organization so users cannot publish unmanaged Sites pages. - Additional services —
additionalservices_external_groups_disabled: verifies the Additional Google services > Google Groups toggle is disabled, blocking users from accessing external groups from their corporate account. - Marketplace —
marketplace_apps_access_restricted: verifies third-party Marketplace apps are restricted (admin-approved only or fully blocked) instead of letting any user install arbitrary apps. - Groups — 3 new checks for Google Groups for Business:
-groups_creation_restricted— verifies group creation is restricted to admins, preventing user-created groups that bypass access reviews.
-groups_external_access_restricted— verifies groups cannot be made accessible to users outside the organization.
-groups_view_conversations_restricted— verifies non-members cannot view group conversations.
Read more in our Google Workspace provider documentation.
Explore all Google Workspace checks at Prowler Hub.
🆕 New Checks
AWS
ses_identity_dkim_enabled— verifies DKIM signing is enabled on every SES identity (domain or email) so outbound email is cryptographically signed and resistant to spoofing. Thanks to @mohamedsolaiman!sagemaker_models_registry_in_use— verifies at least one SageMaker Model Package Group has an approved model package, enforcing ML governance workflows through the SageMaker Model Registry. Thanks to @cascioli!
M365
entra_app_registration_client_secret_unused— flags Entra ID app registration client secrets that have never been used or have not been used for a configurable amount of days, so dormant credentials can be revoked before they leak. Thanks to @AlexanderSanin and @PrettyFox0!
GCP
cloudsql_instance_cmek_encryption_enabled— verifies Cloud SQL instances are encrypted with a customer-managed encryption key (CMEK) instead of Google-managed defaults. Thanks to @s1ns3nz0!
🔐 Security Updates
- MCP Server —
fastmcp2.14.0 → 3.2.4 for GHSA-5h2m-4q8j-pqpj, GHSA-rww4-4w9c-7733 and GHSA-vv7q-7jx5-f767. The bump also pulls fixedjaraco.context,python-multipartandstarlette, and drops the vulnerablelupaandurllib3transitive dependencies.
🙌 External Contributors
Thank you to our community contributors for this release!
- @mohamedsolaiman — Add
ses_identity_dkim_enabledcheck for AWS provider in #10923 - @cascioli — Add
sagemaker_models_registry_in_usecheck for AWS provider in #11196 - @s1ns3nz0 — Add
cloudsql_instance_cmek_encryption_enabledcheck for GCP provider in #11023 - @Ker102 — Fix OCI Audit service configuration lookup to use the tenancy home region in #10347
- @sandiyochristan — Use PowerShell best practices for quoting credential variables in the M365 provider in #9997
- @AlexanderSanin and @PrettyFox0 — Add
entra_app_registration_client_secret_unusedcheck for M365 provider in #11232
UI
🚀 Added
oktaprovider support with OAuth 2.0 private-key JWT credentials form (client ID + PEM private key) (#11213)- "Resource Metadata / Evidence" tab in the finding detail drawer (#11187)
🐞 Fixed
- Resource detail panels: metadata editor now scrolls internally with the minimal scrollbar across the finding drawer and
/resources/:id, tab labels truncate with tooltips on narrow widths, and "View in AWS Console" moved from the resource UID row to the resource actions menu (#11325)
API
🚀 Added
oktaprovider support (#11184)resource.metadataattribute included in/api/v1/findings?include=resources(#11187)
SDK
🚀 Added
- Sites, Additional Google services, and Marketplace checks for Google Workspace provider using the Cloud Identity Policy API (#11281)
entra_app_registration_client_secret_unusedcheck for M365 provider (#11232)cloudsql_instance_cmek_encryption_enabledcheck for GCP provider (#11023)- Google Workspace Groups service with 3 new checks (#11186)
ses_identity_dkim_enabledcheck for AWS provider (#10923)sagemaker_models_registry_in_usecheck for AWS provider, verifying that at least one SageMaker Model Package Group has an approved model package to enforce ML governance workflows (#11196)signon_dod_warning_banner_configured,signon_global_session_lifetime_18h,signon_global_session_cookies_not_persistentandsignon_global_session_policy_network_zone_enforcedchecks for Okta provider (#11224)
🔄 Changed
OktaProvider.test_connectionaccepts an optionalprovider_id(org domain) and raisesOktaInvalidProviderIdError(14007) when it doesn't match the authenticated org — guards against stored UID drifting from the credentials' org (#11184)- Use single-quoted strings for credential variables in the M365 provider PowerShell session, following PowerShell best practices for literal values (#9997)
🐞 Fixed
- OCI Audit service configuration lookup when the configured region differs from the tenancy home region (#10347)
- Container image now uses an absolute
ENTRYPOINT(/home/prowler/.venv/bin/prowler) so it works under any runtime--workdir. The relative entrypoint was breaking the official GitHub Action (prowler-cloud/prowler@v5.27.0) and anydocker runwith a custom-w[(#11313)](ht...
Prowler 5.27.1
SDK
🐞 Fixed
s3_bucket_shadow_resource_vulnerabilityno longer emits a tautologicalPASSfinding for every bucket; a finding is now produced only when the bucket name matches one of the predictable service patterns (Glue, SageMaker, EMR, CodeStar) (#11220)sqlserver_tde_encrypted_with_cmkcheck for Azure provider no longer reports a falseFAILfor SQL Servers whose user databases are correctly encrypted with a customer-managed key, by excluding the systemmasterdatabase (always reports TDEDisabledand is not customer-controllable) from the TDE evaluation (#11233)
Prowler 5.27.0
✨ New features to highlight in this version
Enjoy them all now for free at https://cloud.prowler.com
🆔 New Provider: Okta (CLI-Only)
Prowler now scans Okta as a first-class provider. Authenticate with OAuth read-only credentials using an application and start auditing your Okta tenant in minutes.
export OKTA_ORG_DOMAIN="your-tenant.okta.com"
export OKTA_CLIENT_ID="0oa1234567890abcdef"
export OKTA_PRIVATE_KEY_FILE="/path/to/prowler-okta.pem"
prowler oktaThe release ships with the signon service and one DISA STIG-mapped check:
signon_global_session_idle_timeout_15min— maps to DISA STIG V-273186 / OKTA-APP-000020: the Default Policy must have a Priority 1 rule (not the built-in Default Rule) that sets Maximum Okta global session idle time to 15 minutes or less.
More services, checks, the STIG v1 Okta compliance framework, and full Prowler API / UI integration are coming in follow-up releases.
Read more in our Okta provider documentation.
Explore all Okta checks at Prowler Hub.
📧 Google Workspace — Chat service
The Google Workspace provider grows again with the new Chat service and 6 CIS-mapped checks landing via the Cloud Identity Policy API:
chat_apps_installation_disabled— verifies third-party Chat apps cannot be installed by users, blocking unsanctioned access to email, conversation content, and organizational data.chat_external_file_sharing_disabled— verifies users cannot share files with people outside the organization via Chat conversations.chat_external_messaging_restricted— verifies messaging with users outside the organization is either disabled or restricted to allowlisted domains.chat_external_spaces_restricted— verifies external Chat spaces are either disabled or restricted to allowlisted domains.chat_incoming_webhooks_disabled— verifies incoming webhooks are disabled so external applications cannot post into Chat spaces.chat_internal_file_sharing_disabled— verifies file sharing between internal users in Chat is disabled, for organizations that need to audit all internal file flows.
Read more in our Google Workspace provider documentation.
Explore all Google Workspace checks at Prowler Hub.
🕸️ Attack Paths — Redesigned Graph
The Attack Paths graph in the Prowler App has been rewritten on React Flow, replacing the previous D3 + Dagre implementation. The new graph ships with:
- Improved layout and node clustering
- Smoother pan, zoom, and selection interactions
- Image export
- A minimap for orientation on dense graphs
☁️ AWS — "View in AWS Console"
AWS findings and resource details in the Prowler App now expose a one-click "View in AWS Console" link that opens the resource directly in the AWS Console. Jumping from a finding straight to the offending resource in the source-of-truth console is one click away.
☁️ AWS — IAM checks focus on attached customer-managed policies
AWS IAM customer-managed policy checks now scan only attached policies by default. Unattached customer-managed policies no longer emit a FAIL. They're inert, they're not in any principal's effective permissions, and they were generating findings on accounts that legitimately keep policies around for staged rollouts or break-glass scenarios. To keep auditing unattached policies (and other unused-service surfaces), opt in with --scan-unused-services, matching the existing semantics for the rest of the unused-services scope.
🤖 Lighthouse AI — Finding Groups MCP tools
Lighthouse AI can now reason about Finding Groups end to end. The new Finding Groups MCP tools let Lighthouse AI list, filter and inspect grouped findings, the same lens analysts use to triage at scale, instead of being limited to individual findings.
Read more about it in our Lighthouse AI documentation
📄 PDF Compliance Reports — Performance Improvements
We've introduce two important changes to the Compliance Reports in PDF:
- Only failed findings in the PDF. PDFs now focus on what needs action.
PASSfindings are no longer written into the report. The CSV and JSON exports remain complete and unfiltered for anyone who needs the full picture. - Per-check detail tables capped at 100 failed findings. Each check's detail table shows up to 100 failed findings, with an in-PDF banner reading "Showing first 100 of N failed findings" pointing readers to the CSV / JSON exports for the rest.
Read more in our compliance documentation.
🌊 New Provider: Scaleway (Unofficial, CLI-Only)
Prowler now scans Scaleway as a new provider. Point Prowler at your Scaleway organization with a secret key and start auditing IAM:
prowler scalewayThe release ships with the iam service and one check:
iam_api_keys_no_root_owned— flags Scaleway API keys bound to the account root user. Root-owned API keys bypass IAM policies and grant unrestricted access to every project, resource and billing setting in the organization; rotating them disrupts every automation that depended on root credentials, so they should be replaced with IAM-application-scoped keys.
Read more in our Scaleway provider documentation
⚙️ poetry → uv migration
Both the Prowler API and the Prowler SDK are now on uv as their package manager. Contributors get faster, deterministic installs and a single tool to work across the codebase.
Thank you to @AOrps for the contribution to migrate it in the API!
🆕 New Checks
AWS
cloudtrail_bedrock_logging_enabled— verifies at least one actively logging CloudTrail trail records Amazon Bedrock API activity for generative-AI auditability.iam_user_access_not_stale_to_sagemaker— flags IAM users whose last SageMaker access exceeds the configured threshold (default 90 days, tunable viamax_unused_sagemaker_access_days) or who have never accessed SageMaker.sagemaker_domain_sso_configured— verifies SageMaker Domains use IAM Identity Center (SSO) authentication instead of IAM users, so user access is centrally managed. Thanks to @kimjune01!
M365
entra_service_principal_no_secrets_for_permanent_tier0_roles— flags service principals that hold credentials for permanent Tier-0 role assignments (Global Admin, Privileged Role Admin, etc.), where any leaked secret is a tenant-wide compromise.
🔐 Security Updates
- UI:
npmdependencies updated to patched versions for Next.js, Vite, LangChain, XML parsing, lodash, and related transitive packages. - API: 4 HIGH severity dependency vulnerabilities resolved on
api/uv.lock—lxml5.3.2 → 6.1.0 (GHSA-vfmq-68hx-4jfw, XXE),urllib32.6.3 → 2.7.0 (GHSA-mf9v-mfxr-j63j, GHSA-qccp-gfcp-xxvc),microsoft-kiota-*1.9.2 → 1.9.9 (GHSA-7j59-v9qr-6fq9, viaoverride-dependenciessince the SDK hard-pinskiota-abstractions), andxmlsec1.3.14 → 1.3.17 for libxml2 compatibility with lxml 6.x (#11192). - MCP Server:
cryptography46.0.1 → 47.0.0 (transitive) for CVE-2026-39892, CVE-2026-26007 and CVE-2026-34073. - Supply chain tooling —
safetyreplaced withosv-scanner, which now also scans the UI workspace in addition to the SDK;npmsupply-chain hardening landed in the UI workspace; SDK root transitive dependencies pinned to prevent silent drift.
🙌 External Contributors
Thank you to our community contributors for this release!
- @AOrps — Replace
poetrywithuvas the Prowler API package manager in #10775 - @b-abderrahmane — Surface M365
AuditLog.Read.Allpermission errors as preventive per-user FAILs instead of mass false positives in #10907 - @kimjune01 — Add
sagemaker_domain_sso_configuredcheck for AWS provider in #11094
UI
🚀 Added
- Health endpoint at
GET /api/healthfor Docker Compose liveness checks (#11145) - AWS findings and resource details now expose a "View in AWS Console" link that opens the resource directly in the AWS Console via the universal
/go/viewARN resolver (#9172) - Lighthouse AI: Prowler App Finding Groups MCP tools (#11140)
🔄 Changed
- Trimmed unused
npmdependencies (#11115) - Faster, stricter pre-commit: prek lints and formats only staged UI files (husky removed), with Prettier and ESLint (
--max-warnings 40, stale-disable detection) now covering the full UI workspace, includi...
Prowler 5.26.1
UI
🐞 Fixed
- Role form Cancel buttons now return to Roles (#11125)
- Shared select dropdowns stay constrained and scrollable inside modals (#11125)
API
🐞 Fixed
POST /api/v1/scansCelery task is now published viatransaction.on_commitso the worker cannot read the Scan before the dispatch (#11122)
SDK
🐞 Fixed
entra_users_mfa_capableno longer flags disabled guest users by requestingaccountEnabledanduserTypefrom Microsoft Graph (#11002)
Prowler 5.26.0
✨ New features to highlight in this version
Enjoy them all now for free at https://cloud.prowler.com
🔔 Alerts
Note
Available exclusively in Prowler Cloud.
Wire findings straight into the people who need to know. By default, every organization gets a daily digest of critical findings delivered to the organization owner — auto-provisioned, no setup required, editable or removable any time.
From there, organization admins can define custom alert rules over scan results — scoped by provider, account, severity, status, or any combination — and route them to any user in the organization. A Create Alert shortcut on the Findings page turns the current filter set into an alert rule in one click, so the filters you used to triage become the alert that watches for the same condition tomorrow.
All organization users are confirmed recipients by default (no opt-in confirmation required for now), and every alert email carries a one-click unsubscribe link so nobody is stuck on a list they don't want to be on. The new Manage Alerts RBAC permission keeps configuration gated to the right people.
Read more in the alerts documentation.
🔍 Finding Detail Drawer - Built for Triage
The finding drawer is where security teams actually live during triage, so it has been rebuilt around the question every analyst opens it to answer: what's not good, where, and how do I fix it?
- The verdict comes first. A color-coded status banner sits at the top of the drawer - pass, fail, manual, or muted - so the outcome is the first thing you see, not the last thing you scroll to.
- Remediation gets its own tab. Step-by-step fixes no longer compete with identifiers and metadata for attention; you click one tab and you're in the "what do I do about it" view.
- Resource context is front and center. Account and Resource share the top row with a one-click link straight to the resource page.
- Information hierarchy matches the workflow. Internal identifiers (
check_id,finding_id,finding_uid) move to the bottom of the overview - still one click away when you need them for a Jira ticket or a copy-paste, but no longer competing with the answer to "what is this?". The "Other Findings For This Resource" tab is renamed to the more direct Findings for this resource. - Faster carousel navigation. Stepping through findings inside the drawer no longer flashes empty banners - the status renders immediately from the row you came from while the full record loads in the background.
The net effect: less hunting, fewer clicks between "I have a finding" and "I have a plan."
🎯 Prowler ThreatScore - Compliance View Overhaul
The ThreatScore compliance views get a focused UX pass so the score is something you can act on, not just look at:
- Canonical pillar ordering everywhere - pillars now render in a single canonical order (
1. IAM → 2. Attack Surface → 3. Logging and Monitoring → 4. Encryption) across the badge, breakdown card, donut legend, and accordion. Missing pillars no longer disappear from the UI - they render with-/ 0% so the full set is always visible. - Pillars are clickable - clicking a pillar on
/compliancenow jumps straight to the ThreatScore detail page with the accordion pre-expanded on the pillar you clicked, scrolled into view. No more eyeballing the accordion to find what you just clicked on. - Top Failed Sections always shows the full pillar set - every canonical pillar shows up on the chart, zero-filled when there are no failures, so you get a true at-a-glance pillar-by-pillar fail rate instead of a partial picture.
- Every donut slice is hoverable - on the Requirements Status donut, the slice you hover over expands slightly so even tiny 1–2% fail or manual segments are easy to target and inspect, instead of being swallowed by the dominant pass slice.
📚 ASD Essential Eight Maturity Model - AWS
The Australian Signals Directorate's Essential Eight Maturity Model (Maturity Level One, Nov 2023) is now a first-class compliance framework for AWS. It plugs into the compliance page with the same detail view, top-failed-sections breakdown, and export support as every other framework. Thanks to @boonchuan!
Read more in our compliance documentation.
📧 Google Workspace - Gmail Attachment Safety & Spoofing Protection
Eight new Gmail checks land for Google Workspace, covering attachment safety and spoofing protection at the domain level via the Cloud Identity Policy API:
gmail_anomalous_attachment_protection_enabledgmail_domain_spoofing_protection_enabledgmail_employee_name_spoofing_protection_enabledgmail_encrypted_attachment_protection_enabledgmail_groups_spoofing_protection_enabledgmail_inbound_domain_spoofing_protection_enabledgmail_script_attachment_protection_enabledgmail_unauthenticated_email_protection_enabled
Read more in our Google Workspace documentation.
Explore all Google Workspace checks at Prowler Hub.
☁️ AWS - Bedrock Hardening
Three new AWS Bedrock checks land this release to keep generative-AI surface area honest:
bedrock_guardrails_configured- flags Bedrock deployments that ship without Guardrails configured, the standard AWS-native abuse and content-safety layer.bedrock_prompt_management_exists- verifies Prompt Management is in use so prompts are versioned and auditable rather than embedded inline in application code.bedrock_prompt_encrypted_with_cmk- verifies that each Prompt is encrypted with CMK.
Read more in our AWS provider documentation.
Explore all AWS checks at Prowler Hub.
🖥️ UI - Providers Wording, Findings Polish
A coordinated UX pass across the high-traffic surfaces:
- Providers wording - "Cloud Providers", "Accounts", and "Account Groups" copy is gone. Everything is now consistently labeled "Providers" across the UI and docs, removing the last of the legacy naming.
- Finding remediation links - the detail drawer now labels remediation actions by destination ("View CVE", "View in Prowler Hub", "View Advisory", "View Reference") instead of a generic "View" everywhere.
- Compliance cards - full-width progress bar, passing-requirements caption next to the framework logo.
🔗 Remediation Links Now Point to the Source
Container image CVE findings and IaC findings now link to official sources for remediation and references - CVE.org, Prowler Hub, and GitHub Security Advisories - instead of a third-party advisory mirror. Trivy-sourced findings also link correctly into Prowler Hub, so the "View" buttons in the finding drawer go where you expect every time.
🔐 Security Updates
- Image provider SSRF - parser-mismatch SSRF in registry auth fixed: crafted bearer-token realms and pagination links could force requests to internal addresses and leak credentials cross-origin.
cryptography46.0.6 → 46.0.7 andtrivy0.69.2 → 0.70.0 across SDK, API, and MCP images for CVE-2026-39892 and CVE-2026-33186.requests2.33.1 in the MCP server image to clear advisory 90553.
🙌 External Contributors
Thank you to our community contributors for this release!
- @boonchuan - Add ASD Essential Eight Maturity Model compliance framework for AWS in #10808
- @DannyLyubenov - Batch AWS CodeBuild API calls to prevent throttling-induced false positives in #10639
- @davletd) - Tighten Azure Network Watcher flow log checks to require workspace-backed Traffic Analytics in #10645
- @davletd - Update Azure Network Watcher flow log compliance text for NSG retirement in #10937
- @ivan-necheporenko - Scan every Azure subscription even when display names collide in #10718
- @rchotacode - Scan Oracle Cloud identity in known valid regions for non-Ashburn tenancies in #10529
- @mohamedsolaiman - Add AWS guide for extending existing services in #10924
- @baggers27 - Fix Azure documentation broken link for minimum TLS version in #10916
UI
🚀 Added
- ASD Essential Eight compliance framework support (#11071)
🔄 Changed
Prowler 5.25.2
UI
🔄 Changed
- Compliance cards: progress bar now spans the full card width, the passing-requirements caption sits beside the framework logo under the title, and the ISO 27001 logo asset is recentered within its tile (#10939)
- Findings expanded resource rows now drop the redundant cube icons, render Service and Region with the same compact label style as Last seen and Failing for, and reorder columns to Status, Resource, Provider, Severity, then field labels (#10949)
SDK
🐞 Fixed
route53_dangling_ip_subdomain_takeovernow also flagsCNAMErecords pointing to S3 website endpoints whose buckets are missing from the account (#10920)- Duplicate Kubernetes RBAC findings when the same User or Group subject appeared in multiple ClusterRoleBindings (#10242)
- Match K8s RBAC rules by
apiGroup(#10969) - Return a compact actor name from CloudTrail
userIdentityevents (#10986)