CVE-2026-68560: Wekan:hell Injection in External Antivirus Scanner Path via asyncExec
Wekan is open source kanban built with Meteor. Prior to 9.75, models/fileValidation.js interpolated the uploaded fileObj.path into the administrator-configured externalCommandLine at its {file} placeholder and executed the result through asyncExec, which is promisify(exec) and invokes /bin/sh -c. On deployments with an external scanner configured, an authenticated user able to upload an attachment could place shell metacharacters such as command substitutions in the filename and execute commands as the Wekan server process. Version 9.75 adds shellQuote() and passes the file path as a POSIX single-quoted argument so shell metacharacters cannot escape the placeholder. This issue is fixed in version 9.75.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
Wekanto a version that resolves this vulnerability.Fixed in 9.75
Event History
Frequently Asked Questions
Which deployments are exposed to this issue?
Deployments running a version prior to 9.75 are exposed only when an administrator has configured an external antivirus scanner command. The vulnerable path is reached when that command uses the {file} placeholder.
What access does an attacker need to exploit it?
An attacker needs an authenticated Wekan account with permission to upload an attachment. They can use shell metacharacters in an attachment filename so that the filename-derived path is interpreted by the shell.
What process context would injected commands run under?
Injected commands run as the Wekan server process, because the constructed scanner command is executed through asyncExec using /bin/sh -c.
How can this be remediated?
Upgrade to Wekan version 9.75, which quotes the file path passed at the {file} placeholder. If upgrading cannot happen immediately, avoid configuring or using the external scanner command path affected by this issue.