Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSupply file with crafted quoted name
-
ExploitApp re-serves name via unescaped setFileName
-
ExecutionInjected filename* added to Content-Disposition
-
ImpactVictim browser saves attacker-chosen name/extension
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding for downstream
|
| Exploitation Conditions | Requires an application that passes an attacker-influenced, untrusted file name to DownloadEvent.setFileName(String) or (from Vaadin 25.0) inline(String) - the canonical case being re-serving a file under the original name it was uploaded with. The crafted name must be pure US-ASCII and contain a double quote to break out of filename="..." and append an attacker-controlled filename* parameter. Limiting factors: the attacker cannot change the attachment/inline disposition and cannot split the header (no CRLF injection); a victim must actively trigger the download (UI:A); the attacker needs a path to inject the file name (PR:L); and only Vaadin 24.8 and later are affected (the DownloadEvent API does not exist below 24.8, and inline() is affected only from 25.0). Applications that do not feed untrusted names to these methods are not exploitable. |
| Impact | This is a genuine but modest-severity output-encoding flaw (CWE-116), not a high-priority emergency. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:A/VC:N/VI:N/VA:N/SC:N/SI:L/SA:N, score 4.8/Medium) tells a consistent story: network-reachable and low-complexity, but it requires some privilege (PR:L - the attacker must get an untrusted file name into the system), active user interaction (UI:A - a victim must actually download the file), and the only impact is low integrity on the downloading user's system (SI:L), with no confidentiality (VC:N) or availability impact. No EPSS score, KEV listing, or SSVC automatable flag was supplied; absence of these is not evidence of safety but does mean there is no signal of mass exploitation. The vuln.today decision label is 'this_month' (not act_now/emergency), aligning with the medium rating. Crucially, exploitation is gated on an application-side coding pattern (passing an untrusted file name to DownloadEvent.setFileName/inline), so this is not exploitable against a default Vaadin install - it depends on how the application uses the API. Note the input 'Information Disclosure' tag conflicts with the CVSS VC:N (no confidentiality impact); the real impact is file-name/extension spoofing (integrity), so that tag appears mislabeled. Treat this as a scheduled-patch item, not a drop-everything issue. |
| Exploit ScenarioDerived | An attacker uploads (or otherwise supplies) a file whose name contains a double quote plus an injected filename* parameter, e.g. a name that closes the quoted filename early and appends filename*=UTF-8''evil.exe. When a victim later downloads that file through an application that re-serves it under its stored name via the vulnerable DownloadEvent method, the browser prefers the attacker-controlled filename* and saves the file under a name and extension of the attacker's choosing, defeating the application's extension restrictions. No public exploit identified at time of analysis; the only linked code is the vendor fix PR. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Nov 10, 2026
Output-encoding failure in Vaadin Flow's DownloadEvent allows an attacker who influences an untrusted file name passed to setFileName() or inline() to append a filename* parameter to the Content-Disposition header and cause the browser to save a downloaded file under an attacker-chosen name and extension. Affected are Vaadin 24.8.0 through 24.8.17, 24.9.0 through 24.9.25, 24.10.0 through 24.10.13, 25.0.0 through 25.0.13, 25.1.0 through 25.1.13, 25.2.0 through 25.2.12, and 25.3.0 through 25.3.4; inline(String) is affected only from 25.0, and versions below 24.8 are not affected. The CVSS 4.0 score is 4.8 and the independent assessment characterizes this as a genuine but modest-severity CWE-116 issue, not a high-priority emergency; no public exploit identified at time of analysis.
RemediationAI
Upgrade to a fixed Vaadin release: 24.9.26 for 24.9.x, 24.10.14 for 24.10.x, 25.2.13 for 25.2.x, and 25.3.5 for 25.3.x. The 24.8 line has no fixed release, so upgrade to 24.9.26 or newer; the 25.0 and 25.1 lines also have no fixed release, so upgrade to 25.2.13 or newer. The vendor advisory is https://vaadin.com/security/cve-2026-120326 and the upstream patch is https://github.com/vaadin/flow/pull/26704. If upgrade cannot be applied immediately, avoid passing untrusted or user-supplied file names to DownloadEvent.setFileName(String) or inline(String), or sanitize them before use by removing double quotes, backslashes, and ISO control characters; this reduces exposure but does not replace the vendor fix, and applications that never feed untrusted names to these methods are not exploitable.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 3 packages in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Vaadin Flow's DownloadEvent builds the HTTP Content-Disposition header for file downloads. In the pure-US-ASCII branch it placed the supplied name verbatim inside filename="...", so a double quote in the name terminated the quoted-string early; trailing text was parsed by browsers as additional header parameters, including an attacker-supplied filename* parameter, which browsers prefer over filename. This is CWE-116 improper encoding/escaping of output, specifically a missing RFC 9110 quoted-string escape for backslashes and double quotes and missing removal of ISO control characters; the upstream fix adds EncodeUtil.quotedStringEscape and removeControlCharacters and centralizes setContentDisposition/buildContentDisposition for both attachment and inline modes. The attacker cannot change the attachment/inline disposition or split the header, and exploitation is conditional on the application passing an attacker-influenced, pure-US-ASCII file name containing a double quote to DownloadEvent.setFileName(String) or, from Vaadin 25.0, inline(String); the canonical case is re-serving an uploaded file under its original name. CPE data maps the affected code to vaadin:vaadin, vaadin:vaadin-core, and vaadin:flow, with the vulnerable API present from 24.8 onward; the CVSS vectors reflect PR:L and a victim-triggered download (UI:R/UI:A), not remote unauthenticated exploitation.
Know when Vaadin 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
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:A/VC:N/VI:N/VA:N/SC:N/SI:L/SA:N
Network-delivered and low-complexity, but PR:L (attacker must inject the file name) and UI:R (victim must download); impact is low integrity on the victim's system, a scope change (S:C), with no confidentiality or availability loss.
Primary rating from Vendor (Vaadin).
CVSS VectorVendor: Vaadin
Lifecycle Timeline
1DescriptionCVE.org
DownloadEvent.setFileName(String) in Vaadin Flow writes the download file name into the Content-Disposition header without escaping it. When the name is pure US-ASCII the header is built as attachment; filename="<name>" with the name inserted verbatim, so a double quote in the name ends the quoted string early and the rest of the name is read by the browser as further header parameters. The inline(String) variant, present from Vaadin 25.0, builds the name the same way. An application that passes an untrusted file name to either method, for example when re-serving a file under the name it was uploaded with, lets an attacker add a filename* parameter. Browsers prefer filename* over filename, so the file is saved under a name and extension of the attacker's choosing, which defeats any file name or extension restriction the application enforces. The attacker cannot change the attachment or inline disposition itself and cannot split the header.
Users of affected versions should apply the following mitigation or upgrade. Releases that have fixed this issue include:
Product version Vaadin 24.8.0 - 24.8.17 Vaadin 24.9.0 - 24.9.25 Vaadin 24.10.0 - 24.10.13 Vaadin 25.0.0 - 25.0.13 Vaadin 25.1.0 - 25.1.13 Vaadin 25.2.0 - 25.2.12 Vaadin 25.3.0 - 25.3.4
Mitigation No fixed release on this line, upgrade to 24.9.26 or newer Upgrade to 24.9.26 Upgrade to 24.10.14 No fixed release on this line, upgrade to 25.2.13 or newer No fixed release on this line, upgrade to 25.2.13 or newer Upgrade to 25.2.13 Upgrade to 25.3.5
Vaadin versions below 24.8 are not affected: the DownloadEvent API does not exist in them.
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
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Missing output sanitization in test sources in org.webjars.bowergithub.vaadin:vaadin-menu-bar versions 1.0.0 through 1.2
Unauthenticated remote denial of service in Vaadin Framework 8 (com.vaadin:vaadin-server 8.16.0 through 8.32.1, and vaad
Charts rendered by Vaadin Charts across Vaadin 22 through 25.3.0 bundle a pinned Highcharts release (9.2.2 in Vaadin 22-
Insecure temporary directory usage in frontend build functionality of com.vaadin:flow-server versions 2.0.9 through 2.5.
The default configuration of a TreeGrid component uses Object::toString as a key on the client-side and server communica
Unsafe validation RegEx in EmailValidator component in com.vaadin:vaadin-compatibility-server versions 8.0.0 through 8.1
Overly relaxed configuration of frontend resources server in Vaadin Designer versions 4.3.0 through 4.6.3 allows remote
Vulnerability in OSGi integration in com.vaadin:flow-server versions 1.2.0 through 2.4.7 (Vaadin 12.0.0 through 14.4.9),
Unsafe validation RegEx in EmailField component in com.vaadin:vaadin-text-field-flow versions 2.0.4 through 2.3.2 (Vaadi
Authentication.logout() helper in com.vaadin:flow-client versions 5.0.0 prior to 6.0.0 (Vaadin 18), and 6.0.0 through 6.
When adding non-visible components to the UI in server side, content is sent to the browser in Vaadin 10.0.0 through 10.
Deep-merge prototype pollution in Vaadin Charts and Vaadin Component Base lets remote, unauthenticated attackers write a
EUVD-2026-120893
NVD
CVE.org
GitHub
Exploit-DB