All vulnerabilities
CVE-2026-112943GHSA-698v-4r3x-3vcv

launch-editor: escapeCmdArgs() omits % escaping on Windows

vitejs launch-editornpmLibraries & packages
CVSS
6.3Medium
ExploitationNo known exploitationNot in CISA KEV, which does not prove it is unexploitedCISA KEV
Exploit odds (EPSS)0.41%Chance of exploitation activity in the next 30 days, higher than 34% of CVEs. Scored 23 Oct 2026FIRST EPSS
Fixed in2.14.2Also 8.3.3, 8.2.4 and 4 moreGitHub
Published20 Oct 2026Updated 20 Oct 2026CVE List

What fixes it

  • 2.14.2launch-editor, npmGitHubnpm install launch-editor@2.14.2
  • 8.3.3vite, npmGitHubnpm install vite@8.3.3
  • 8.2.4vite, npmGitHubnpm install vite@8.2.4
  • 8.1.6vite, npmGitHubnpm install vite@8.1.6
  • 7.3.7vite, npmGitHubnpm install vite@7.3.7
  • 6.4.4vite, npmGitHubnpm install vite@6.4.4
Show all 7 fixed versions
  • 1.1.0vite-plus, npmGitHubnpm 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.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%

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