Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain Wekan board member credentials
-
DeliveryUpload HTML+JS payload via attachment API with spoofed image/png MIME type
-
ExploitSilent file-binary absence causes validation to trust client-supplied type
-
ExecutionDangerous-content scan skipped; malicious file stored under Wekan origin
-
PersistVictim user opens attachment link
-
ImpactJavaScript executes in victim's browser, exfiltrating session token or performing privileged actions
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V5 - File Handling File type validation, storage isolation
MITRE ATT&CK
2 techniques across 2 tactics: Command and Control, Persistence The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Two specific deployment conditions must simultaneously be true: (1) the Wekan instance must have the WITH_API=true environment variable set, enabling the REST attachment upload endpoint in server/routes/attachmentApi.js; and (2) the Unix file binary must be absent from the server environment, which is common in minimal Docker/Alpine container images. When either condition is absent the vulnerability is not exploitable - deployments with file installed perform content-based MIME detection normally, and deployments without WITH_API=true do not expose the upload API path. Additionally, the attacker must hold at least board member access (CVSS PR:L), limiting exploitation to authenticated insiders or accounts compromised through other means. Exploitation also requires a victim user to open the stored attachment (CVSS UI:R), preventing fully passive exploitation. Defenders can quickly assess exposure by running 'which file' inside the container and checking the WITH_API environment variable. |
| Impact | The vendor-assigned CVSS 3.1 score of 8.7 (AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:N) reflects the potential scope change - XSS that compromises other users' sessions including administrator accounts - and is appropriate for worst-case impact. However, AC:L understates real-world exploitation difficulty: two conditions beyond the attacker's control must simultaneously hold - the WITH_API=true environment variable must be set, and the Unix file binary must be absent. The second condition is common in Alpine/minimal Docker images but is not the universal default, making the effective attack surface narrower than AC:L implies. No EPSS score was provided in the input data, preventing quantitative exploitation probability comparison. No CISA KEV listing exists, and no independent POC has been identified - the advisory originates from a researcher-reported GitHub security advisory (GHSA-jhph-whx8-wq6p). The stored XSS impact is high when conditions are met: a low-privileged board member can achieve session theft and admin-level actions against any user who opens the attachment, which aligns with S:C/C:H/I:H. Defenders should prioritize patching container deployments but can verify exposure by checking whether WITH_API=true is set and whether the file package is installed in their images. |
| Exploit ScenarioDerived | An authenticated Wekan board member on a container deployment lacking the file binary sets the Content-Type to image/png via the attachment API (WITH_API=true) while uploading an HTML file containing a JavaScript payload such as a session-cookie exfiltration script. Because MIME detection silently returns undefined and the spoofed type passes the deny-list check, the malicious file is stored under the Wekan origin. Any user - including administrators - who subsequently opens the attachment triggers the stored XSS, allowing the attacker to steal session tokens, perform actions on the victim's behalf, and potentially escalate to administrative control of the Wekan instance. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 19, 2026
Stored XSS in Wekan prior to v9.90 allows authenticated board members to upload HTML containing JavaScript disguised as a permitted MIME type, which is then served under the Wekan origin and executes in any user's browser that opens the attachment. The vulnerability is rooted in a silent fallback: when the Unix file binary is absent (typical of minimal Docker/Alpine deployments), MIME detection returns undefined and validation trusts the attacker-supplied content type instead of inspecting actual file bytes. Exploitation is conditional on two deployment-specific factors - the WITH_API=true environment variable and the absence of the file binary - but both are common in container-based Wekan deployments. No public exploit code or CISA KEV listing has been identified at the time of analysis.
RemediationAI
Upgrade Wekan to version 9.90 or later, which is available at https://github.com/wekan/wekan/releases/tag/v9.90 and contains the fix commit f6ba472f6738bcd3763f133d3d9970f216df2263. This release introduces the looksLikeDangerousMarkup() content sniffer as a fail-closed fallback, so the dangerous-content scan is forced regardless of client-supplied MIME type when the file binary is unavailable. As an independent hardening step, install the file package in any container image running Wekan to restore full content-based MIME detection; Wekan's official images already do this. If immediate upgrade is not possible, disabling the attachment API by setting WITH_API=false eliminates the exploitable upload path entirely, at the cost of disabling all REST API file upload functionality. Access controls limiting board membership to trusted users reduce exposure but do not eliminate it, since the vulnerability requires only board member privileges.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Wekan's file attachment pipeline in models/fileValidation.js performs two-stage type checking: first, it attempts content-based MIME detection by invoking the Unix file command via detectMimeFromFile(); if that succeeds, the detected MIME is checked against a dangerous-MIME deny-list and, independently, the file bytes are scanned for dangerous markup. The flaw (CWE-434: Unrestricted Upload of File with Dangerous Type) is that detectMimeFromFile() silently returned undefined when the file binary was absent - an ENOENT the code suppressed without warning - causing isFileValid() to substitute the client-supplied fileObj.type from the attachment API (server/routes/attachmentApi.js) as the detected MIME. Because the attacker-controlled type ('image/png') is not on the dangerous-MIME deny-list, the dangerous-content scan was also skipped, and raw HTML+JavaScript was persisted under the Wekan origin. CPE cpe:2.3:a:wekan:wekan:*:*:*:*:*:*:*:* confirms all Wekan releases prior to 9.90 are affected. The fix in v9.90 introduces a dependency-free JS content sniffer (looksLikeDangerousMarkup()) that inspects real file bytes for HTML/SVG/XML/script signatures and forces the dangerous-content scan regardless of the claimed MIME type, eliminating trust in any client-supplied value when the file binary is unavailable.
Know when Wekan 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:H/I:H/A:N
AC:H reflects the two required deployment conditions beyond attacker control (WITH_API=true and absent file binary); all other metrics align with vendor assessment.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Wekan is open source kanban built with Meteor. Prior to 9.90, isFileValid() in models/fileValidation.js used the Unix file command for content-based MIME detection, but detectMimeFromFile() silently returned undefined when that binary was unavailable and the validation fell back to the attacker-controlled fileObj.type supplied through server/routes/attachmentApi.js. On deployments with WITH_API=true and no file binary, an authenticated board member could label HTML containing JavaScript as image/png, bypass the dangerous MIME check, and store active content under the Wekan origin for execution when another user opened it. Version 9.90 adds looksLikeDangerousMarkup() to inspect file bytes and force dangerous-content scanning when MIME detection is unavailable. This issue is fixed in version 9.90.
Executive ViewAI
Wekan collaboration platform versions prior to v9.90 contain a stored cross-site scripting vulnerability allowing authenticated board members to upload malicious files that execute in other team members' browsers, creating risk of credential theft and session hijacking. This risk is concentrated in containerized deployments with specific configurations (WITH_API=true and absent file-type validation binary). A vendor patch is available and should be deployed urgently.
Apply vendor patch.
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
Malicious file upload attacks exploit insufficient validation when web applications accept user-provided files.
packages/wekan-ldap/server/ldap.js in Wekan before 4.87 can process connections even though they are not authorized by t
OS command injection in Wekan (the open-source Meteor-based kanban board) before version 9.07 lets an authenticated user
Authentication bypass in Wekan (open-source Meteor kanban) before version 9.46 lets an unauthenticated attacker imperson
A stored cross-site scripting (Stored XSS) vulnerability in file preview in WeKan before 6.75 allows remote authenticate
Wekan, open source kanban board system, between version 3.12 and 4.11, is vulnerable to multiple stored cross-site scrip
Account takeover in Wekan (open-source Meteor kanban) before 9.32 allows an attacker who controls an OIDC provider accou
Privilege escalation in Wekan open-source kanban (all versions prior to 9.89, dubbed 'SortBleed') allows any board membe
Privilege escalation in the self-hosted Wekan kanban board through version 18.15 allows any authenticated user to rewrit
LDAP filter injection in WeKan before 8.19 allows remote unauthenticated attackers to manipulate LDAP search filters and
Privilege escalation in WeKan (versions prior to 8.35) allows authenticated board members with low privileges to perform
Wekan's outgoing webhook URL validator in versions 8.36 through 9.73 allows authenticated board members to bypass SSRF p
Improper access control in Wekan (self-hosted open-source Meteor kanban) before version 9.37 lets any authenticated user
EUVD-2026-62706
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB