Skip to main content

Wekan CVE-2026-52891

CRITICAL
OS Command Injection (CWE-78)
2026-07-15 GitHub_M
9.9
CVSS 3.1 · Vendor: GitHub_M
Share

Severity by source

Vendor (GitHub_M) PRIMARY
9.9 CRITICAL
AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
vuln.today AI
8.8 HIGH

Network-reachable upload with low complexity but requires a valid account (PR:L); command execution runs as the app process within one authority so scope Unchanged, giving full C/I/A impact.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Changed
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

3
Source Code Evidence Fetched
Jul 15, 2026 - 22:01 vuln.today
Analysis Generated
Jul 15, 2026 - 22:01 vuln.today
CVE Published
Jul 15, 2026 - 21:08 cve.org
CRITICAL 9.9

DescriptionCVE.org

Wekan is open source kanban built with Meteor. Prior to 9.07, Wekan avatar upload functionality embeds user-supplied filenames into paths later passed to child_process.exec() for MIME-type detection. Because models/avatars.js and models/fileValidation.js used a shell command with the avatar filename, shell metacharacters such as backticks and $() in the filename could execute commands on the server. This issue is fixed in version 9.07.

AnalysisAI

OS command injection in Wekan (the open-source Meteor-based kanban board) before version 9.07 lets an authenticated user execute arbitrary commands on the server by uploading an avatar with shell metacharacters in its filename. The user-supplied filename is embedded into a shell string passed to child_process.exec() for MIME-type detection in models/avatars.js and models/fileValidation.js, so backticks or $() in the name run as server-side commands. No public exploit is identified at time of analysis, but the vendor commit and advisory confirm the flaw; it is fixed in v9.07.

Technical ContextAI

Wekan performs server-side MIME-type detection on uploaded avatars by shelling out to the Unix 'file' utility (file --mime-type -b "<path>") via Node.js child_process.exec(). Because exec() spawns a shell, and the on-disk path incorporated the raw user-supplied filename, any shell metacharacter (backtick, $(), ;, |, &) in the filename was interpreted by the shell rather than treated as literal path data. This is a textbook CWE-78 (Improper Neutralization of Special Elements used in an OS Command) failure: untrusted input crossing a shell boundary without escaping. The fix addresses it in two layers - sanitizing the filename to an allowlist of [a-zA-Z0-9_.-] in the naming function, and, more fundamentally, replacing exec() with execFile('file', ['--mime-type','-b', path]) so no shell is spawned and the path is passed as a discrete argv element. Affected CPE: cpe:2.3:a:wekan:wekan:*.

RemediationAI

Vendor-released patch: upgrade to Wekan 9.07 or later (https://github.com/wekan/wekan/releases/tag/v9.07), which sanitizes avatar filenames to an allowlist and replaces the shell-based exec() call with execFile() so no shell is invoked (fix commit https://github.com/wekan/wekan/commit/a4c74a5980e9f778eb444fd346f32aa3d16786a9; advisory https://github.com/wekan/wekan/security/advisories/GHSA-35j7-h385-2q9g). If immediate upgrade is not possible, restrict who can register and log in (disable open self-registration) to shrink the pool of authenticated users who can upload avatars, and place Wekan behind a trusted-network boundary or reverse proxy with authentication; these reduce exposure but do not close the bug for existing legitimate users. As a stronger stopgap, run Wekan in a hardened, minimal-privilege container so that any command execution is contained, accepting that this limits blast radius rather than preventing injection.

More in Wekan

View all
CVE-2021-3309 HIGH POC
8.1 Jan 26

packages/wekan-ldap/server/ldap.js in Wekan before 4.87 can process connections even though they are not authorized by t

CVE-2026-55652 CRITICAL
9.8 Jul 15

Authentication bypass in Wekan (open-source Meteor kanban) before version 9.46 lets an unauthenticated attacker imperson

CVE-2023-28485 MEDIUM POC
5.4 Jun 26

A stored cross-site scripting (Stored XSS) vulnerability in file preview in WeKan before 6.75 allows remote authenticate

CVE-2021-20654 MEDIUM POC
5.4 Feb 10

Wekan, open source kanban board system, between version 3.12 and 4.11, is vulnerable to multiple stored cross-site scrip

CVE-2026-52893 CRITICAL
9.2 Jul 15

Account takeover in Wekan (open-source Meteor kanban) before 9.32 allows an attacker who controls an OIDC provider accou

CVE-2026-68561 HIGH
8.8 Aug 19

Privilege escalation in Wekan open-source kanban (all versions prior to 9.89, dubbed 'SortBleed') allows any board membe

CVE-2026-68899 HIGH
8.7 Aug 19

Stored XSS in Wekan prior to v9.90 allows authenticated board members to upload HTML containing JavaScript disguised as

CVE-2026-25560 HIGH
8.7 Feb 07

LDAP filter injection in WeKan before 8.19 allows remote unauthenticated attackers to manipulate LDAP search filters and

CVE-2026-41454 HIGH
8.7 Apr 22

Privilege escalation in WeKan (versions prior to 8.35) allows authenticated board members with low privileges to perform

CVE-2026-68558 HIGH
8.5 Aug 19

Wekan's outgoing webhook URL validator in versions 8.36 through 9.73 allows authenticated board members to bypass SSRF p

CVE-2026-55234 HIGH
8.5 Jul 15

Improper access control in Wekan (self-hosted open-source Meteor kanban) before version 9.37 lets any authenticated user

CVE-2026-30845 HIGH
8.2 Mar 06

Wekan versions 8.31.0 through 8.33 expose webhook URLs and authentication tokens to all board members through unfiltered

Share

CVE-2026-52891 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy