Severity by source
AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H
Unauthenticated (PR:N) low-complexity RPC over the network; UI:R because the browser/cross-origin vector needs the developer to visit a page; S:C and C/I/A:H as the dev component escapes to host command execution.
Primary rating from Vendor (https://github.com/nuxt/nuxt).
CVSS VectorVendor: https://github.com/nuxt/nuxt
Lifecycle Timeline
4Blast Radius
ecosystem impact- 1 npm packages depend on @nuxt/devtools (1 direct, 0 indirect)
Ecosystem-wide dependent count for version 3.3.1.
DescriptionCVE.org
Impact
Nuxt DevTools (development mode only) exposes a bidirectional RPC channel over the Vite HMR WebSocket via the nuxt:devtools:rpc plugin. On affected versions the channel has no authentication: any client that can reach the Vite HMR endpoint (ws://<host>:<port>/, subprotocol vite-hmr) can call RPC methods, with no token, handshake, or origin check before the channel is established. The updateOptions(), clearOptions(), and openInEditor() methods do not enforce the ensureDevAuthToken check that the other mutating methods use.
openInEditor() reads the persisted behavior.openInEditor value and passes it to the launch-editor package, which spawns it as a child process. That value is settable through the equally unauthenticated updateOptions(). An attacker who can reach the HMR port can therefore chain updateOptions('behavior', { openInEditor: '<command>' }) then openInEditor('<any-existing-file>') to execute an arbitrary program on the developer's machine.
The HMR port is reachable by a process on the same host, by any peer on the LAN when the dev server is bound with nuxi dev --host, or by a malicious website the developer visits while the dev server is running (a browser can open the HMR WebSocket cross-origin). Impact is limited to development environments; production builds do not run DevTools.
Patches
Fixed in @nuxt/devtools@3.3.1. Because nuxt depends on @nuxt/devtools through a ^3.x range, updating is a lockfile refresh / reinstall; no nuxt release is required.
Workarounds
- Update
@nuxt/devtoolsto a patched version. - Do not run the dev server bound to a non-loopback interface (
nuxi dev --host) on an untrusted network. - Disable DevTools entirely with
devtools: { enabled: false }innuxt.config.
References
- GHSA-279x-mwfv-vcqv
launch-editor: https://www.npmjs.com/package/launch-editor
AnalysisAI
Unauthenticated remote code execution in Nuxt DevTools (@nuxt/devtools before 3.3.1) lets any client reaching the Vite HMR WebSocket invoke RPC methods that were never gated by the ensureDevAuthToken check. By chaining updateOptions() to poison the persisted behavior.openInEditor value and then calling openInEditor(), an attacker runs an arbitrary program on the developer's machine via the launch-editor package. Only development environments are affected; production builds do not run DevTools. This is rated CVSS 9.6 (scope-changed), and no public exploit has been identified at time of analysis.
Technical ContextAI
Nuxt DevTools registers a nuxt:devtools:rpc plugin that multiplexes a bidirectional RPC channel over the same Vite HMR WebSocket used for hot module reload (ws://<host>:<port>/ with the vite-hmr subprotocol). RPC is intended to be a trusted dev-only control plane, but the mutating methods updateOptions(), clearOptions(), and openInEditor() omit the ensureDevAuthToken guard that other write methods enforce, so there is no token, handshake, or origin validation before the channel is usable. openInEditor() reads the persisted behavior.openInEditor setting and hands it to the launch-editor npm package, which spawns it as a child process - turning an attacker-controllable configuration string into command execution. This is CWE-94 (Code Injection): untrusted input flows into a process-spawning routine as executable content. Affected package per CPE is pkg:npm/@nuxt/devtools; because nuxt pulls it via a ^3.x range, the vulnerable code is present transitively in most Nuxt 3 dev setups.
RemediationAI
Vendor-released patch: @nuxt/devtools 3.3.1 - because nuxt references it through a ^3.x range, remediation is a lockfile refresh / reinstall (e.g. delete the lockfile entry or run your package manager's update for @nuxt/devtools) and no separate nuxt release is needed. If you cannot immediately update, do not bind the dev server to a non-loopback interface (avoid nuxi dev --host) on untrusted or shared networks, which removes the LAN attack surface at the cost of losing remote/device testing access; and consider disabling DevTools entirely with devtools: { enabled: false } in nuxt.config, which fully closes the RPC channel but removes the DevTools UI for all developers on the project. Note that even loopback-bound servers remain reachable by the malicious-website cross-origin vector and by same-host processes, so patching is the only complete fix. See GHSA-279x-mwfv-vcqv for authoritative guidance.
Same weakness CWE-94 – Code Injection
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-53648
GHSA-279x-mwfv-vcqv