launch-editor: escapeCmdArgs() omits % escaping on Windows
What fixes it
- 2.14.2launch-editor, npmGitHub
npm install launch-editor@2.14.2 - 8.3.3vite, npmGitHub
npm install vite@8.3.3 - 8.2.4vite, npmGitHub
npm install vite@8.2.4 - 8.1.6vite, npmGitHub
npm install vite@8.1.6 - 7.3.7vite, npmGitHub
npm install vite@7.3.7 - 6.4.4vite, npmGitHub
npm install vite@6.4.4
Show all 7 fixed versions
- 1.1.0vite-plus, npmGitHub
npm install vite-plus@1.1.0
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
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](https://nodejs.org/docs/latest-v24.x/api/child_process.html#child_processspawncommand-args-options) 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%
Text from GitHub Advisory Database
Affected versions 21
- launch-editor, npm<= 2.14.1GitHub
- vite, npm>= 8.3.0, <= 8.3.2GitHub
- vite, npm>= 8.2.0, <= 8.2.3GitHub
- vite, npm>= 8.0.0, <= 8.1.5GitHub
- vite, npm>= 7.0.0, <= 7.3.6GitHub
- vite, npm<= 6.4.3GitHub
- vite-plus, npm<= 1.0.0GitHub
- launch-editoraffected: < 2.14.2CVE List
- viteaffected: >= 8.3.0, < 8.3.3CVE List
- viteaffected: >= 8.2.0, < 8.2.4CVE List
- viteaffected: >= 8.0.0, < 8.1.6CVE List
- viteaffected: >= 7.0.0, < 7.3.7CVE List
- viteaffected: < 6.4.4CVE List
- vite-plusaffected: < 1.1.0CVE List
- launch-editor, npmfrom first release, fixed in 2.14.2OSV
- vite, npmfrom 8.3.0, fixed in 8.3.3OSV
- vite, npmfrom 8.2.0, fixed in 8.2.4OSV
- vite, npmfrom 8.0.0, fixed in 8.1.6OSV
- vite, npmfrom 7.0.0, fixed in 7.3.7OSV
- vite, npmfrom first release, fixed in 6.4.4OSV
- vite-plus, npmfrom first release, fixed in 1.1.0OSV
References 6
- github.com/vitejs/launch-editor/commit/3c2f9bf2ff8fe63d056a8f9cc52d825b66ca79fcFixvia CVE List
- github.com/vitejs/launch-editor/releases/tag/v2.14.2Fixvia CVE List
- github.com/vitejs/launch-editor/security/advisories/GHSA-698v-4r3x-3vcvAdvisoryvia CVE List
- github.com/advisories/GHSA-698v-4r3x-3vcvAdvisoryvia GitHub
- nvd.nist.gov/vuln/detail/CVE-2026-112943Referencevia GitHub
- github.com/vitejs/launch-editor/pull/155Referencevia CVE List