Skip to main content

Nuxt DevTools CVE-2026-71319

| EUVDEUVD-2026-53648 CRITICAL
Code Injection (CWE-94)
2026-08-05 https://github.com/nuxt/nuxt GHSA-279x-mwfv-vcqv
9.6
CVSS 3.1 · Vendor: https://github.com/nuxt/nuxt
Share

Severity by source

Vendor (https://github.com/nuxt/nuxt) PRIMARY
9.6 CRITICAL
AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H
vuln.today AI
9.6 CRITICAL

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.

3.1 AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H

Primary rating from Vendor (https://github.com/nuxt/nuxt).

CVSS VectorVendor: https://github.com/nuxt/nuxt

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
Required
Scope
Changed
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

4
Patch available
Aug 05, 2026 - 22:02 EUVD
Source Code Evidence Fetched
Aug 05, 2026 - 21:45 vuln.today
Analysis Generated
Aug 05, 2026 - 21:45 vuln.today
CVE Published
Aug 05, 2026 - 21:27 github-advisory
CRITICAL 9.6

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 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/devtools to 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 } in nuxt.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.

Share

CVE-2026-71319 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy