CVE-2026-112942
launch-editor: `fs.existsSync()` existence check can be bypassed on Windows
launch-editor allows users to open files with line numbers in editor from Node.js. Prior to 2.14.2, launch-editor-middleware processes an attacker-controlled Windows file argument where the file argument ends in a parent-directory component plus a line-and-column suffix: the path is resolved while the suffix is still present, and launch-editor removes the suffix before its existsSync check, leaving the existing parent directory for existsSync and allowing the attacker-controlled file argument to pass filename existence validation without requiring the malicious filename to exist. The bypass can lead to OS command injection when combined with the separately described Windows percent-expansion flaw. This issue is fixed in version 2.14.2.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- Active
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
7.5
launch-editor: `fs.existsSync()` existence check can be bypassed on Windows
launch-editor allows users to open files with line numbers in editor from Node.js. Prior to 2.14.2, launch-editor-middleware processes an attacker-controlled Windows file argument where the file argument ends in a parent-directory component plus a line-and-column suffix: the path is resolved while the suffix is still present, and launch-editor removes the suffix before its existsSync check, leaving the existing parent directory for existsSync and allowing the attacker-controlled file argument to pass filename existence validation without requiring the malicious filename to exist. The bypass can lead to OS command injection when combined with the separately described Windows percent-expansion flaw. This issue is fixed in version 2.14.2.
- Record
CVE-2026-112942- CVSS 4.0
- 7.5 High
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-77
- Updated
- 2026-11-02
EUVDEUVD-2026-105035
7.5
launch-editor allows users to open files with line numbers in editor from Node.js. Prior to 2.14.2, launch-editor-middleware processes an attacker-controlled Windows file argument where the file argument ends in a parent-directory component plus a line-and-column suffix: the path is resolved while the suffix is still present, and launch-editor removes the suffix before its existsSync check, leaving the existing parent directory for existsSync and allowing the attacker-controlled file argument to pass filename existence validation without requiring the malicious filename to exist. The bypass can lead to OS command injection when combined with the separately described Windows percent-expansion flaw. This issue is fixed in version 2.14.2.
- Record
EUVD-2026-105035- CVSS 4.0
- 7.5 High
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-587h-7wmj-h5pm
7.5
launch-editor: `fs.existsSync()` existence check can be bypassed on Windows
Summary
launch-editor checked fs.existsSync(fileName) before passing a supplied path to an editor command. On Windows, an attacker can bypass this check with a crafted path ending in \\..:line:column. This removes the requirement that the attacker be able to place a file with a malicious filename.
Combined with the % escaping issue described in GHSA-698v-4r3x-3vcv, this bypass can lead to OS command injection when an attacker controls the file argument.
Impact
Only apps that runs on Windows is affected.
Details
The earlier advisory assumed that fs.existsSync() required an attacker-controlled filename to exist. This advisory covers a bypass of that requirement.
A crafted value ending in \\..:1:1 is interpreted differently by launch-editor-middleware, launch-editor, and Windows:
launch-editor-middlewarecallspath.resolve()while the final path component is..:1:1, so it is not treated as a parent-directory component.launch-editortreats:1:1as a line-and-column suffix and removes it, leaving a path ending in\\...- On Windows,
fs.existsSync()accepts the resulting path as the existing parent directory even though the attacker-controlled preceding component does not exist. - Because the existence check passes, the crafted filename reaches the Windows shell command.
- Record
GHSA-587h-7wmj-h5pm- CVSS 4.0
- 7.5 High
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-77
- Updated
- 2026-11-02
NVD
7.5
launch-editor allows users to open files with line numbers in editor from Node.js. Prior to 2.14.2, launch-editor-middleware processes an attacker-controlled Windows file argument where the file argument ends in a parent-directory component plus a line-and-column suffix: the path is resolved while the suffix is still present, and launch-editor removes the suffix before its existsSync check, leaving the existing parent directory for existsSync and allowing the attacker-controlled file argument to pass filename existence validation without requiring the malicious filename to exist. The bypass can lead to OS command injection when combined with the separately described Windows percent-expansion flaw. This issue is fixed in version 2.14.2.
- Record
CVE-2026-112942- CVSS 4.0
- 7.5 High
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - Weakness
- CWE-77
- Updated
- 2026-11-02
OSV
7.5
launch-editor: `fs.existsSync()` existence check can be bypassed on Windows
launch-editor allows users to open files with line numbers in editor from Node.js. Prior to 2.14.2, launch-editor-middleware processes an attacker-controlled Windows file argument where the file argument ends in a parent-directory component plus a line-and-column suffix: the path is resolved while the suffix is still present, and launch-editor removes the suffix before its existsSync check, leaving the existing parent directory for existsSync and allowing the attacker-controlled file argument to pass filename existence validation without requiring the malicious filename to exist. The bypass can lead to OS command injection when combined with the separately described Windows percent-expansion flaw. This issue is fixed in version 2.14.2.
- Record
CVE-2026-112942- CVSS 4.0
- 7.5 High
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-77
- Updated
- 2026-11-02
OSVGHSA-587h-7wmj-h5pm
7.5
launch-editor: `fs.existsSync()` existence check can be bypassed on Windows
Summary
launch-editor checked fs.existsSync(fileName) before passing a supplied path to an editor command. On Windows, an attacker can bypass this check with a crafted path ending in \\..:line:column. This removes the requirement that the attacker be able to place a file with a malicious filename.
Combined with the % escaping issue described in GHSA-698v-4r3x-3vcv, this bypass can lead to OS command injection when an attacker controls the file argument.
Impact
Only apps that runs on Windows is affected.
Details
The earlier advisory assumed that fs.existsSync() required an attacker-controlled filename to exist. This advisory covers a bypass of that requirement.
A crafted value ending in \\..:1:1 is interpreted differently by launch-editor-middleware, launch-editor, and Windows:
launch-editor-middlewarecallspath.resolve()while the final path component is..:1:1, so it is not treated as a parent-directory component.launch-editortreats:1:1as a line-and-column suffix and removes it, leaving a path ending in\\...- On Windows,
fs.existsSync()accepts the resulting path as the existing parent directory even though the attacker-controlled preceding component does not exist. - Because the existence check passes, the crafted filename reaches the Windows shell command.
- Record
GHSA-587h-7wmj-h5pm- CVSS 4.0
- 7.5 High
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-77
- Updated
- 2026-11-02
Show 7 moreShow less
OSVCLSA-2026-1792574714 No score
TuxCare security update for launch-editor (3 CVEs)
TuxCare rebuilt launch-editor to address 3 CVEs. Fixed in 2.6.1-tuxcare.2.
- Record
CLSA-2026-1792574714- Updated
- 2026-11-02
OSVCLSA-2026-1792582427 No score
TuxCare security update for launch-editor (3 CVEs)
TuxCare rebuilt launch-editor to address 3 CVEs. Fixed in 2.2.1-tuxcare.2.
- Record
CLSA-2026-1792582427- Updated
- 2026-11-02
OSVCLSA-2026-1793887392 No score
TuxCare security update for vite (2 CVEs)
TuxCare rebuilt vite to address 2 CVEs. Fixed in 3.2.11-tuxcare.9.
- Record
CLSA-2026-1793887392- Updated
- 2026-11-06
OSVCLSA-2026-1793887633 No score
TuxCare security update for vite (2 CVEs)
TuxCare rebuilt vite to address 2 CVEs. Fixed in 2.9.18-tuxcare.6.
- Record
CLSA-2026-1793887633- Updated
- 2026-11-06
OSVCLSA-2026-1793973624 No score
TuxCare security update for vite (2 CVEs)
TuxCare rebuilt vite to address 2 CVEs. Fixed in 4.5.0-tuxcare.7.
- Record
CLSA-2026-1793973624- Updated
- 2026-11-06
OSVCLSA-2026-1793973716 No score
TuxCare security update for vite (2 CVEs)
TuxCare rebuilt vite to address 2 CVEs. Fixed in 4.5.5-tuxcare.11.
- Record
CLSA-2026-1793973716- Updated
- 2026-11-06
OSVROOT-APP-NPM-CVE-2026-112942 No score
CVE-2026-112942 in vite - Patched by Root
Root has patched CVE-2026-112942 in the vite package for Root:npm. Multiple fixed versions available.
- Record
ROOT-APP-NPM-CVE-2026-112942- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
launch-editornpm |
through 2.14.1 | 2.14.2 |
vitenpm |
8.3.0 to 8.3.2 | 8.3.3 |
vitenpm |
8.2.0 to 8.2.3 | 8.2.4 |
vitenpm |
8.0.0 to 8.1.5 | 8.1.6 |
vitenpm |
7.0.0 to 7.3.6 | 7.3.7 |
vitenpm |
through 6.4.3 | 6.4.4 |
vite-plusnpm |
through 1.0.0 | 1.1.0 |
launch-editorTuxCare:npm From an advisory covering 3 CVEs |
2.6.1-tuxcare.0 up to 2.6.1-tuxcare.2, plus listed versions 2.6.12.6.1-tuxcare.1 |
2.6.1-tuxcare.2 |
launch-editorTuxCare:npm From an advisory covering 3 CVEs |
2.2.1-tuxcare.0 up to 2.2.1-tuxcare.2, plus listed versions 2.2.12.2.1-tuxcare.1 |
2.2.1-tuxcare.2 |
viteTuxCare:npm From an advisory covering 2 CVEs |
3.2.11-tuxcare.0 up to 3.2.11-tuxcare.9, plus listed versions 3.2.113.2.11-tuxcare.13.2.11-tuxcare.23.2.11-tuxcare.33.2.11-tuxcare.4 Show 4 moreShow less3.2.11-tuxcare.53.2.11-tuxcare.63.2.11-tuxcare.73.2.11-tuxcare.8 |
3.2.11-tuxcare.9 |
Show 14 moreShow less
| Package | Affected | Fixed |
|---|---|---|
viteTuxCare:npm From an advisory covering 2 CVEs |
2.9.18-tuxcare.0 up to 2.9.18-tuxcare.6, plus listed versions 2.9.182.9.18-tuxcare.12.9.18-tuxcare.22.9.18-tuxcare.32.9.18-tuxcare.42.9.18-tuxcare.5 |
2.9.18-tuxcare.6 |
viteTuxCare:npm From an advisory covering 2 CVEs |
4.5.0-tuxcare.0 up to 4.5.0-tuxcare.7, plus listed versions 4.5.04.5.0-tuxcare.14.5.0-tuxcare.24.5.0-tuxcare.34.5.0-tuxcare.44.5.0-tuxcare.54.5.0-tuxcare.6 |
4.5.0-tuxcare.7 |
viteTuxCare:npm From an advisory covering 2 CVEs |
4.5.5-tuxcare.0 up to 4.5.5-tuxcare.11, plus listed versions 4.5.54.5.5-tuxcare.14.5.5-tuxcare.104.5.5-tuxcare.24.5.5-tuxcare.3 Show 6 moreShow less4.5.5-tuxcare.44.5.5-tuxcare.54.5.5-tuxcare.64.5.5-tuxcare.74.5.5-tuxcare.84.5.5-tuxcare.9 |
4.5.5-tuxcare.11 |
launch-editornpm |
before 2.14.2 | 2.14.2 |
vitenpm |
8.3.0 up to 8.3.3 | 8.3.3 |
vitenpm |
8.2.0 up to 8.2.4 | 8.2.4 |
vitenpm |
8.0.0 up to 8.1.6 | 8.1.6 |
vitenpm |
7.0.0 up to 7.3.7 | 7.3.7 |
vitenpm |
before 6.4.4 | 6.4.4 |
vite-plusnpm |
before 1.1.0 | 1.1.0 |
viteRoot:npm |
before 8.2.1-aikido.1 | 8.2.1-aikido.16.4.1-aikido.48.2.2-aikido.18.3.2-aikido.18.2.0-aikido.15.4.21-aikido.46.4.3-aikido.18.3.0-aikido.18.3.1-aikido.1 |
launch-editorRoot:npm |
before 2.14.1-aikido.1 | 2.14.1-aikido.1 |
@rootio/viteRoot:npm |
before 8.2.1-root.io.1 | 8.2.1-root.io.16.4.1-root.io.48.2.2-root.io.18.3.2-root.io.18.2.0-root.io.15.4.21-root.io.46.4.3-root.io.18.3.0-root.io.18.3.1-root.io.1 |
@rootio/launch-editorRoot:npm |
before 2.14.1-root.io.1 | 2.14.1-root.io.1 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, aliases | OSV | |
| affected, aliases | OSV | |
| affected, facts | ||
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-112942 is a high vulnerability (CVSS 7.5) in Vitejs Launch-editor, published October 20, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 1.34%, the 71st percentile. Fixed in launch-editor 2.14.2.
References
github.com/vitejs/launch-editor/security/advisories/GHSA-587h-7wmj-h5pm
github.com/vitejs/launch-editor/commit/f13cd835d4b8e860b1d4d080ad8a490cc2463679
github.com/vitejs/launch-editor/releases/tag/v2.14.2
nvd.nist.gov/vuln/detail/CVE-2026-112942
github.com/advisories/GHSA-587h-7wmj-h5pm
github.com/CVEProject/cvelistV5/tree/main/cves/2026/112xxx/CVE-2026-112942.json
github.com/vitejs/launch-editor