Repository navigation
CVE-2026-112942 CVE-2026-112943 CVE-2026-112944 CVE-2026-112945 CVE-2026-112946 vite: Dev-server command injection via bundled launch-editor and server.fs bypass (8.0.16 -> 8.3.5) - #1190
Merged
vharseko merged 1 commit intoOct 21, 2026
Conversation
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 8.0.16 to 8.3.5. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v8.3.5/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-version: 8.3.5 dependency-type: direct:development ... Signed-off-by: dependabot[bot] <support@github.com>
vharseko
approved these changes
Oct 21, 2026
vharseko
deleted the
dependabot/npm_and_yarn/openam-ui/openam-ui-js-sdk/vite-8.3.5
branch
October 21, 2026 08:07
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bumps
viteinopenam-ui/openam-ui-js-sdkfrom 8.0.16 to 8.3.5, clearing Dependabot alerts #369, #370 and #371. All three are advisories againstlaunch-editor, which Vite bundles into its owndist(8.0.16 carrieslaunch-editor/launch-editor-middleware2.14.1, 8.3.5 carries 2.14.2), so the lock file has nolaunch-editorentry and only a Vite release can fix it. The same bump fixes two more Vite advisories that are published in the vitejs/vite repository but have not reached the GitHub Advisory Database yet, hence no Dependabot alert.openam-ui-js-sdkis the only lock file in the repository that resolvesvite.Advisories
Vite's dev server mounts
launch-editor-middlewareat/__open-in-editor: a request to/__open-in-editor?file=<path>resolves<path>against the project root and haslaunch-editoropen it in the developer's editor (the error overlay's "click to open" uses it). The threelaunch-editoradvisories are about what thatfileargument can make the editor's command line do.CVE-2026-112942 / GHSA-587h-7wmj-h5pm (Windows only) — Command injection (CWE-77).
launch-editoronly starts the editor for a path thatfs.existsSync()accepts, which was meant to require the attacker to plant a file with a malicious name. A value ending in\..:1:1gets past that: the middleware'spath.resolve()keeps..:1:1as an ordinary name,launch-editorstrips:1:1as line and column, and Windows then accepts the trailing\..as the existing parent directory, so an arbitrary, non-existent preceding component reaches the shell command. Combined with GHSA-698v-4r3x-3vcv this gives OS command injection to whoever controls thefileargument. launch-editor 2.14.2 resolves the path after stripping the position, so the existence check sees the real target (vitejs/launch-editor@f13cd83).CVE-2026-112943 / GHSA-698v-4r3x-3vcv (Windows only) — OS command injection (CWE-78). On Windows
launch-editorstarts the editor throughcmd.exe(child_process.exec(…, { shell: true })), andescapeCmdArgs()did not escape%, so environment-variable expansion (%VAR%,%CD%,%CMDCMDLINE:~-38%) can splice a subcommand into the command line. On its own it needs a planted file plus an injected environment variable or an NTFS alternate data stream; GHSA-587h removes the planted-file requirement. 2.14.2 rejects any argument containing%or a line break on Windows instead of trying to escape it (vitejs/launch-editor@3c2f9bf).CVE-2026-112944 / GHSA-r825-w8mm-5pxw — Argument injection (CWE-88). A file name that starts with
+or-reaches the editor as an option; Vim runs+<cmd>as an Ex command, and Emacs and some Notepad++ plugins expose similar switches. For Vite it is limited to WSL, wherelaunch-editorturns the absolute path back into a relative one, with Vim / MacVim / Emacs / Notepad++ as the editor and an attacker who can create a+…or-…entry in the working directory. 2.14.2 resolves the name to an absolute path and prefixes the WSL relative form with./(vitejs/launch-editor@f6e6701).Not in the Advisory Database yet:
CVE-2026-112946 / GHSA-rq7h-c2jc-7f22 (not on Windows) — Path traversal and improper access control (CWE-22, CWE-284) that bypasses
server.fs.allow. When Vite rewrote an in-root import to a browser URL such as/etc/hostname, it recorded that URL insafeModulePathsas if it were an absolute filesystem path, so a later/@fs/etc/hostnamerequest returned the host's/etc/hostnameinstead of the project file. It needs the dev server exposed to the network (--host/server.host), a project import whose root-relative URL is also the absolute path of a readable host file, and that file not matched byserver.fs.deny. The fix stores module IDs rather than URLs insafeModulePaths(vitejs/vite#23656, in 8.3.3).CVE-2026-112945 / GHSA-9jrq-w75r-8gcw — Cross-origin script execution (CWE-80). A server that hands the unchanged browser request URL to
server.transformIndexHtml— the middleware-mode /appType: 'custom'SSR pattern from Vite's guide — could be made to emit<script type="module" src="//evil.example/…">for an inline module script and so load an attacker's script into the dev-server origin. Vite's ownspa/mpaHTML handling is not affected. The fix strips the query before deriving the HTML file name (vitejs/vite#23653, in 8.3.3).AV:N/AC:L/AT:P/PR:N/UI:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N)AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N)AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N)AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N)AV:N/AC:L/AT:P/PR:N/UI:A/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N)8.0.16 was never affected by GHSA-vfpm-58rq-9qcg / CVE-2026-112947 (
?vite-wasm-instanceexposes the first 4 bytes of files outsideserver.fs), which covers only 8.2.0–8.3.2; 8.3.5 is past it, whereas a bump that stopped in that window would have introduced it.Impact on OpenAM
Nothing at runtime and nothing in the build; the exposure is
npm run devon a developer machine.viteis a direct development dependency ofopenam-ui-js-sdk(devDependencies,dev: true), and every advisory above sits in the dev server —/__open-in-editor, the/@fs/handler,transformIndexHtml— none of which ends up in whatvite buildwrites.npm run build(tsc -b && vite buildwithvite.config.tsand withvite.lib.config.ts) andnpm run test:run(vitest run).vite buildstarts no server.vitest runcreates a Vite server in-process but callslisten()only whenapi.portis set (createVitest:if (ctx.config.api?.port) await server.listen()), andvitest.config.jssets noapi, so no port is opened and/__open-in-editoris unreachable, thewindows-latestCI runners included.vite buildoutput:openam-server-onlyunpacks theappzip (target/app) into the WAR asextui/, and thelibzip carriestarget/lib. Neither contains the dev server, the Vite client orlaunch-editor.npm run devrunsvite --host 0.0.0.0, which binds the dev server to every interface, so/__open-in-editorand/@fs/answer anyone on the network.server.allowedHosts(localhost,openam.example.org) checks only theHostheader, which a client other than a browser sets at will; it stops DNS rebinding, not direct requests. A developer runningnpm run devon Windows with an editor that launch-editor detects was therefore open to command injection over the network through GHSA-587h + GHSA-698v. GHSA-r825 additionally needs WSL, a Vim- or Emacs-type editor and a planted+…/-…entry in the working directory. GHSA-rq7h needs an import whose root-relative URL is also a readable host path; this module's imports resolve to/src/…and/node_modules/…, which a standard Linux or macOS host does not have. GHSA-9jrq does not apply: the module uses Vite's defaultspaapp type and never callstransformIndexHtmlitself.Change
vite8.0.16 → 8.3.5 inopenam-ui/openam-ui-js-sdk. ThedevDependenciesfloor inpackage.jsonmoves^8.0.16→^8.3.5, so a freshnpm installcannot resolve back into an affected version, andpackage-lock.jsonfollows Vite's own dependency floors:rolldown1.0.3 → 1.2.14 (Vite 8.3.5 pins~1.2.14), with@oxc-project/types0.133.0 → 0.154.0 and the@rolldown/binding-*platform packages 1.0.3 → 1.2.14. Rolldown 1.2.14 adds@rolldown/binding-android-arm-eabiand no longer lists the WebAssembly fallback@rolldown/binding-wasm32-wasi, so that binding and its helpers (@napi-rs/wasm-runtime,@emnapi/core,@emnapi/runtime,@emnapi/wasi-threads,@tybys/wasm-util,tslib) leave the lock file; the CI runners (Linux x64, macOS arm64, Windows x64) all have native bindings.lightningcssand its platform packages 1.32.0 → 1.33.0,postcss8.5.23 → 8.5.31,nanoid3.3.16 → 3.3.20 (frompostcss's new^3.3.20floor), and Vite's nestedpicomatch4.0.4 → 4.0.7.This is a minor-version step for the toolchain that produces the shipped
extui/andlibbundles — Rolldown is Vite 8's production bundler — so the generated JavaScript can differ in chunking and output details although no source or configuration changes. The smallest fixed 8.x release is 8.1.6; Dependabot took the latest, 8.3.5, which is also clear of GHSA-vfpm-58rq-9qcg.The
nanoidmove also takes this lock file out of GHSA-2v37-7h3g-55p8 / CVE-2026-67213 (infinite loop incustomAlphabet/customRandomwithsize0, fixed in 3.3.18). Its alert #303 had been auto-dismissed, and it was never reachable:postcssonly callsnanoid(6)fromnanoid/non-secure.Verified:
integrityhashes match the npm registry:vite@8.3.5,rolldown@1.2.14, the 15@rolldown/binding-*@1.2.14,@oxc-project/types@0.154.0,lightningcss@1.33.0and its 11 platform packages,postcss@8.5.31,nanoid@3.3.20,picomatch@4.0.7distbundleslaunch-editorandlaunch-editor-middleware2.14.2 (8.0.16: 2.14.1), and/__open-in-editoris mounted only in the dev servervite@8.3.5viteaccept 8.3.5:@vitejs/plugin-react5.2.0 (… || ^8.0.0),vitestand@vitest/mocker4.1.11 (^6.0.0 || ^7.0.0 || ^8.0.0),vite-plugin-dts5.0.3 (>=3)engines.nodeofviteandrolldownis unchanged (^20.19.0 || >=22.12.0); the build's Node v22.21.1 satisfies itReferences
safeModulePathsrather than URLs vitejs/vite#23656