launch-editor: escapeCmdArgs() omits % escaping on Windows
Published 20 Oct 2026 · Updated 20 Oct 2026
Affected packages
- Affected
- <2.14.2
- Fixed in
- 2.14.2
npm install launch-editor@2.14.2- Affected
- >=8.3.0 <8.3.3
- Fixed in
- 8.3.3
npm install vite@8.3.3- Affected
- >=8.2.0 <8.2.4
- Fixed in
- 8.2.4
npm install vite@8.2.4- Affected
- >=8.0.0 <8.1.6
- Fixed in
- 8.1.6
npm install vite@8.1.6- Affected
- >=7.0.0 <7.3.7
- Fixed in
- 7.3.7
npm install vite@7.3.7- Affected
- <6.4.4
- Fixed in
- 6.4.4
npm install vite@6.4.4- Affected
- <1.1.0
- Fixed in
- 1.1.0
npm install vite-plus@1.1.0Details
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 `child_process.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.exeto%ENV%) and calllaunchEditorwithsomething%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 calllaunchEditorwithsomething %CMDCMDLINE:~-38%calc.exe. - If the attacker can create a filename containing the
%CD%and the subcommand (e.g.&calc.exe), they can calllaunchEditorwith./%CD%
Is GHSA-698v-4r3x-3vcv in any of your client repos?
Checking one package by hand is fine. Checking it across forty client projects is not. NPMscan reads the lockfiles in every GitHub repo you pick, finds each project with an affected launch-editor, and gives you the command that fixes it.
References
- Linkgithub.com/vitejs/launch-editor/security/advisories/GHSA-698v-4r3x-3vcv
- Advisorynvd.nist.gov/vuln/detail/CVE-2026-112943
- Linkgithub.com/vitejs/launch-editor/pull/155
- Linkgithub.com/vitejs/launch-editor/commit/3c2f9bf2ff8fe63d056a8f9cc52d825b66ca79fc
- Packagegithub.com/vitejs/launch-editor
- Linkgithub.com/vitejs/launch-editor/releases/tag/v2.14.2
Advisory data from OSV.dev (opens OSV.dev in a new tab), refreshed daily.