Executive brief
Prowler's SAML single sign-on feature used to authorize cloud security audit accounts to users. An authenticated attacker with control of their own SAML identity provider could forge SAML assertions claiming another organization's email domain, causing the system to issue authentication tokens for the victim's account instead of the attacker's. This grants the attacker full read-write access to the victim's cloud security findings, compliance data, and secrets across AWS, GCP, Azure, and other providers—without requiring any action from the victim.
Technical details
The vulnerability is an Improper Authentication (CWE-287) flaw in Prowler's SAML ACS (Assertion Consumer Service) finish and token issuance flow. The root cause lies in two compounding weaknesses: (1) ProwlerSocialAccountAdapter.pre_social_login() extracts the email from the SAML assertion and calls get_user_by_email() with a global database lookup (no tenant scope), automatically linking the attacker's SAML session to any pre-existing victim account with that email; (2) the ACS finish flow later recalculates the tenant from the asserted email domain instead of binding token issuance to the SAML configuration validated by the ACS route. Attack preconditions: SAML must be enabled on the target Prowler instance, the attacker must have a valid Prowler account with control over a SAML IdP, and the victim's email domain must either be unclaimed or already configured by the victim tenant. No user interaction is required because IdP-initiated SSO is enabled by default. An attacker can obtain a JWT for the victim user, enumerate and modify cloud security findings, access integration secrets, and switch into other tenants where the victim is a member. The fix released in version 5.30.3 binds token issuance to the SAML configuration validated by the ACS route instead of trusting the asserted email domain.
Affected products
- prowler-cloud prowler <5.30.3
Timeline
- 2026-06-22: disclosed: GitHub Advisory published
- 2026-09-11: advisory: Advisory updated
- 2026-06-22: patched: Fixed in version 5.30.3