CVE-2025-15022 Overview
CVE-2025-15022 is a Cross-Site Scripting (XSS) vulnerability in Vaadin Framework affecting the Action class component. Action captions in Vaadin accept HTML by default but were not properly sanitized, potentially allowing XSS attacks if caption content is derived from user input.
In Vaadin Framework 7 and 8, the Action class is a general-purpose class that may be used by multiple components. In Vaadin 23 and newer, the Action class is only used by the Spreadsheet component. Vaadin 14 is not affected as the Spreadsheet component was not supported in that version.
Critical Impact
Attackers can inject malicious HTML/JavaScript through unsanitized Action captions, potentially leading to session hijacking, credential theft, or unauthorized actions performed on behalf of authenticated users.
Affected Products
- Vaadin Framework 7.0.0 - 7.7.49
- Vaadin Framework 8.0.0 - 8.29.1
- Vaadin 23.1.0 - 23.6.5
- Vaadin 24.0.0 - 24.8.13
- Vaadin 24.9.0 - 24.9.6
- com.vaadin:vaadin-spreadsheet-flow23.1.0 - 24.9.6
Discovery Timeline
- 2026-01-05 - CVE CVE-2025-15022 published to NVD
- 2026-01-08 - Last updated in NVD database
Technical Details for CVE-2025-15022
Vulnerability Analysis
This vulnerability exists due to improper input sanitization in the Vaadin Action class when processing caption content. The Action class accepts HTML content by default without applying proper sanitization, creating an XSS attack surface when application developers use user-supplied data in action captions.
The vulnerability is classified under CWE-79 (Improper Neutralization of Input During Web Page Generation), which represents the fundamental issue of failing to sanitize user-controlled data before rendering it in a web context.
In Vaadin Framework 7 and 8, the impact is broader as the Action class serves as a general-purpose component used across multiple UI elements. In Vaadin 23 and newer versions, the attack surface is more limited as the Action class is only utilized by the Spreadsheet component.
Root Cause
The root cause of this vulnerability is the default acceptance of HTML content in Action captions without proper sanitization. When developers pass user-supplied input directly to Action caption methods, the unsanitized HTML is rendered in the browser, enabling script injection.
The fixed versions address this by sanitizing captions by default and providing an explicit API to enable HTML content mode for backwards compatibility. In Vaadin 23 and newer, the fix implements HTML sanitization using Jsoup with a relaxed safelist to balance security with functionality.
Attack Vector
The attack vector is network-based, requiring an authenticated attacker to craft malicious input that gets processed by the Action class caption functionality. The attack requires some user interaction, as a victim must view the page containing the malicious content.
An attacker could exploit this vulnerability by:
- Identifying an application input field that feeds into an Action caption
- Injecting malicious HTML/JavaScript payload through the input
- Waiting for another user (potentially an administrator) to view the affected page
- The malicious script executes in the victim's browser context
The exploitation typically involves injecting event handlers or script tags within the HTML content. Since action captions may be displayed in menus, toolbars, or context menus, the malicious content could be triggered when users interact with these UI elements.
Detection Methods for CVE-2025-15022
Indicators of Compromise
- Unusual HTML or JavaScript content in application logs related to Action component captions
- Web application firewall alerts for XSS patterns targeting Vaadin endpoints
- Reports from users experiencing unexpected browser behavior or redirects
- Suspicious entries in action caption fields containing <script>, onerror, onclick, or similar HTML event handlers
Detection Strategies
- Review application source code for instances where user input is passed directly to Action caption methods without validation
- Monitor web server logs for requests containing encoded HTML entities or JavaScript patterns targeting Vaadin components
- Implement Content Security Policy (CSP) headers to detect and block inline script execution
- Deploy web application firewall rules to identify XSS payloads in request parameters
Monitoring Recommendations
- Enable verbose logging for Vaadin components to capture suspicious caption content
- Configure browser-side XSS auditors and CSP violation reporting endpoints
- Monitor for anomalous session activity that could indicate successful XSS exploitation
- Set up alerts for user-reported security incidents involving unexpected UI behavior
How to Mitigate CVE-2025-15022
Immediate Actions Required
- Audit your application code for any use of the Action class with user-supplied caption content
- Validate and sanitize all user input before passing to Vaadin Action captions
- Implement Content Security Policy headers to mitigate XSS impact
- Upgrade to the patched versions as soon as possible
Patch Information
The fixed versions sanitize captions by default and provide an API to explicitly enable HTML content mode for backwards compatibility. In Vaadin 23 and newer, HTML is sanitized using Jsoup with a relaxed safelist.
| Vulnerable Version Range | Fixed Version |
|---|---|
| 7.0.0 - 7.7.49 | ≥7.7.50 |
| 8.0.0 - 8.29.1 | ≥8.30.0 |
| 23.1.0 - 23.6.5 | ≥23.6.6 |
| 24.0.0 - 24.8.13 | ≥24.8.14 |
| 24.9.0 - 24.9.6 | ≥24.9.7 |
For additional details, see the Vaadin Security Advisory for CVE-2025-15022 and the GitHub Pull Request containing the fix.
Workarounds
- Manually sanitize all user input before passing to Action captions using a library like OWASP Java HTML Sanitizer
- Implement server-side input validation to reject HTML content in fields that feed into Action captions
- Use text-only captions by stripping HTML tags from user-supplied content
- Deploy a Web Application Firewall (WAF) with XSS protection rules as an interim measure
# Maven dependency update example for Vaadin 8.x
# Update pom.xml to use fixed version
mvn versions:use-dep-version -Dincludes=com.vaadin:vaadin-server -DdepVersion=8.30.0
mvn clean install
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.


