CVE-2026-112943: launch-editor: escapeCmdArgs() omits % escaping on Windows
Summary
launch-editor did not escape % on Windows when passing an argument to cmd. When an environment variable contained a malicious value, it was possible that that content to be executed.
Impact
Only apps that match all of the following conditions are affected:
- The user uses Windows - An attacker can place a file with the malicious filename containing & or % - Either of - An attacker can inject an environment variable with a malicious value - An attacker can add a NTFS alternate data stream to the file placed
Details
Unlike .sh files, .bat / .cmd files on Windows cannot be called directly using childprocess.spawn and requires passing them as an argument of cmd.exe. To do so, launch-editor escapes the arguments passed to cmd.exe. But launch-editor did not escape % which is used for environment variables.
Because launch-editor checks if the argument matches an existing filename, the attack requires the attacker to be able to place a file.
- If the attacker can inject an environment variable as well, they can include the subcommand in the env variable (e.g. set &calc.exe to %ENV%) and call launchEditor with something%ENV%. - If the attacker can place a NTFS alternate data stream to the file (e.g. a NTFS alternate data stream named ~-38%calc.exe), they can call launchEditor with something %CMDCMDLINE:~-38%calc.exe. - If the attacker can create a filename containing the %CD% and the subcommand (e.g. &calc.exe ), they can call launchEditor with ./%CD%
Other sources
launch-editor allows users to open files with line numbers in editor from Node.js. Prior to 2.14.2, launch-editor did not escape % on Windows when passing an argument to cmd. When an environment variable contained a malicious value, it was possible that that content to be executed. This vulnerability is fixed in 2.14.2.
— MITRE
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
npm/vite-plusto a version that resolves this vulnerability.Fixed in 1.1.0 - Upgrade
Upgrade
npm/viteto a version that resolves this vulnerability.Fixed in 6.4.4 - Upgrade
Upgrade
npm/viteto a version that resolves this vulnerability.Fixed in 7.3.7 - Upgrade
Upgrade
npm/viteto a version that resolves this vulnerability.Fixed in 8.1.6 - Upgrade
Upgrade
npm/viteto a version that resolves this vulnerability.Fixed in 8.2.4 - Upgrade
Upgrade
npm/viteto a version that resolves this vulnerability.Fixed in 8.3.3 - Upgrade
Upgrade
npm/launch-editorto a version that resolves this vulnerability.Fixed in 2.14.2 - Upgrade
Upgrade
launch-editorto a version that resolves this vulnerability.Fixed in 2.14.2
Event History
Frequently Asked Questions
Which deployments are affected?
Only applications running on Windows are affected. Exploitation also requires an attacker to be able to place a file whose filename contains `&` or `%`.
What additional attacker capability is required after placing the file?
The attacker must either inject an environment variable with a malicious value or add an NTFS alternate data stream to the file they placed. The filename must resolve as an existing file because the package checks this before processing the argument.
Is this exposed through normal command execution on all platforms?
No. The issue is specific to Windows handling of `.bat` and `.cmd` files, which are passed to `cmd.exe`; it does not apply to the `.sh` execution path described.