launch-editor: Editor CLI flag misinterpretation causing arbitrary command execution for some editors
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 forwarded file paths directly to editors without sanitization. If a path resembles a CLI flag, editors like Vim may interpret it as a command, potentially causing unintended file overwrites or command execution.
Impact
Direct launch-editor users
Only apps that match all of the following conditions are affected:
- The attacker is able to create a file system entry (e.g. a file or directory) starting with
+or-in the working directory - The user uses or the app specifies any of the following editors:
- Vim (including gVim)
- MacVim
- Emacs (including Emacsclient)
- Notepad++ (only if using a plugin exposing dangerous operations via plugin messages)
- The first argument of
launchEditorcan start with+or-or the user is using WSL
launch-editor-middleware users
Only apps that match the following conditions are affected:
- The attacker is able to create a file system entry (e.g. a file or directory) starting with
+or-in the working directory - The user uses or the app specifies any of the following editors:
- Vim (including gVim)
- MacVim
- Emacs (including Emacsclient)
- Notepad++ (only if using a plugin exposing dangerous operations via plugin messages)
- launch-editor older than v2.2.0 is used, or the user is using WSL
Vite users
Only apps that match the following conditions are affected:
- The attacker is able to create a file system entry (e.g. a file or directory) starting with
+or-in the working directory - The user uses or the app specifies any of the following editors:
- Vim (including gVim)
- MacVim
- Emacs (including Emacsclient)
- Notepad++ (only if using a plugin exposing dangerous operations via plugin messages)
- The user is using WSL
Details
launchEditor(file) function passes the file name as-is to the editor if the file with that file name exists. If the file name starts with - (also + for Vim), the editor treats them as flags rather than positional arguments. For example, Vim treats arguments starting with + as an Ex command. As a result, an existing relative directory such as:
+call writefile(["SAFE_MARKER"],"LAUNCH_EDITOR_MARKER")|qa!
is not treated as a filename when passed to Vim. Vim executes the embedded Ex command.
The following editor has a potentially destructive operation exposed to the CLI arguments:
- Vim (including gVim)
- MacVim
- Emacs (including Emacsclient)
- Notepad++ (only if using a plugin exposing dangerous operations via plugin messages)
launch-editor-middleware v2.2.0+ converts the passed file path to an absolute path so those are not affected as long as the user is not using WSL. For WSL, launch-editor converts the paths to relative paths internally, so those are still affected.
Vite 2.0.0+ uses launch-editor-middleware v2.2.0+ so the WSL users are only affected.
Is GHSA-r825-w8mm-5pxw 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-r825-w8mm-5pxw
- Advisorynvd.nist.gov/vuln/detail/CVE-2026-112944
- Linkgithub.com/vitejs/launch-editor/pull/156
- Linkgithub.com/vitejs/launch-editor/commit/f6e6701bb1f16f2dd242b321374f1b6cca6eb6d4
- 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.