Every CVE Search/ Get API key

CVE-2026-112942

launch-editor: `fs.existsSync()` existence check can be bypassed on Windows

7.5 HighFix available

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

1.34%Unchanged since Oct 21, 2026
90%50%10%1%

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 HighCVSS: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 HighCVSS: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:

  1. launch-editor-middleware calls path.resolve() while the final path component is ..:1:1, so it is not treated as a parent-directory component.
  2. launch-editor treats :1:1 as a line-and-column suffix and removes it, leaving a path ending in \\...
  3. On Windows, fs.existsSync() accepts the resulting path as the existing parent directory even though the attacker-controlled preceding component does not exist.
  4. Because the existence check passes, the crafted filename reaches the Windows shell command.
Record
GHSA-587h-7wmj-h5pm
CVSS 4.0
7.5 HighCVSS: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 HighCVSS: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 HighCVSS: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:

  1. launch-editor-middleware calls path.resolve() while the final path component is ..:1:1, so it is not treated as a parent-directory component.
  2. launch-editor treats :1:1 as a line-and-column suffix and removes it, leaving a path ending in \\...
  3. On Windows, fs.existsSync() accepts the resulting path as the existing parent directory even though the attacker-controlled preceding component does not exist.
  4. Because the existence check passes, the crafted filename reaches the Windows shell command.
Record
GHSA-587h-7wmj-h5pm
CVSS 4.0
7.5 HighCVSS: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

Affected packages
PackageAffectedFixed
launch-editor
npm
through 2.14.1
2.14.2
vite
npm
8.3.0 to 8.3.2
8.3.3
vite
npm
8.2.0 to 8.2.3
8.2.4
vite
npm
8.0.0 to 8.1.5
8.1.6
vite
npm
7.0.0 to 7.3.6
7.3.7
vite
npm
through 6.4.3
6.4.4
vite-plus
npm
through 1.0.0
1.1.0
launch-editor
TuxCare: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-editor
TuxCare: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
vite
TuxCare: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 less
3.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
Affected packages
PackageAffectedFixed
vite
TuxCare: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
vite
TuxCare: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
vite
TuxCare: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 less
4.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-editor
npm
before 2.14.2
2.14.2
vite
npm
8.3.0 up to 8.3.3
8.3.3
vite
npm
8.2.0 up to 8.2.4
8.2.4
vite
npm
8.0.0 up to 8.1.6
8.1.6
vite
npm
7.0.0 up to 7.3.7
7.3.7
vite
npm
before 6.4.4
6.4.4
vite-plus
npm
before 1.1.0
1.1.0
vite
Root: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-editor
Root:npm
before 2.14.1-aikido.1
2.14.1-aikido.1
@rootio/vite
Root: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-editor
Root:npm
before 2.14.1-root.io.1
2.14.1-root.io.1

History

History
RecordedChangedSources
affected, aliasesOSV
affected, aliasesOSV
affected, facts
first indexedCVE 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

MoveEnter Open