chore(deps): update dependency nuxt to v3.19.0 [security] #470
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.
This PR contains the following updates:
3.9.1
->3.19.0
GitHub Vulnerability Alerts
CVE-2024-34344
Summary
Due to the insufficient validation of the
path
parameter in the NuxtTestComponentWrapper, an attacker can execute arbitrary JavaScript on the server side, which allows them to execute arbitrary commands.Details
While running the test, a special component named
NuxtTestComponentWrapper
is available.https://github.com/nuxt/nuxt/blob/4779f5906fa4d3c784c2e2d6fe5a5c5f181faaec/packages/nuxt/src/app/components/nuxt-root.vue#L42-L43
This component loads the specified path as a component and renders it.
https://github.com/nuxt/nuxt/blob/4779f5906fa4d3c784c2e2d6fe5a5c5f181faaec/packages/nuxt/src/app/components/test-component-wrapper.ts#L9-L27
There is a validation for the
path
parameter to check whether the path traversal is performed, but this check is not sufficient.https://github.com/nuxt/nuxt/blob/4779f5906fa4d3c784c2e2d6fe5a5c5f181faaec/packages/nuxt/src/app/components/test-component-wrapper.ts#L15-L19
Since
import(...)
usesquery.path
instead of the normalizedpath
, a non-normalized URL can reach theimport(...)
function.For example, passing something like
./components/test
normalizespath
to/root/directory/components/test
, butimport(...)
still receives./components/test
.By using this behavior, it's possible to load arbitrary JavaScript by using the path like the following:
Since
resolve(...)
resolves the filesystem path, not the URI, the above URI is treated as a relative path, butimport(...)
sees it as an absolute URI, and loads it as a JavaScript.PoC
whoami
is written to/tmp/test
Demonstration video: https://www.youtube.com/watch?v=FI6mN8WbcE4
Impact
Users who open a malicious web page in the browser while running the test locally are affected by this vulnerability, which results in the remote code execution from the malicious web page.
Since web pages can send requests to arbitrary addresses, a malicious web page can repeatedly try to exploit this vulnerability, which then triggers the exploit when the test server starts.
CVE-2024-34343
Summary
The
navigateTo
function attempts to blockthejavascript:
protocol, but does not correctly use API's provided byunjs/ufo
. This library also contains parsing discrepancies.Details
The function first tests to see if the specified URL has a protocol. This uses the unjs/ufo package for URL parsing. This function works effectively, and returns true for a
javascript:
protocol.After this, the URL is parsed using the
parseURL
function. This function will refuse to parse poorly formatted URLs. Parsingjavascript:alert(1)
returns null/"" for all values.Next, the protocol of the URL is then checked using the
isScriptProtocol
function. This function simply checks the input against a list of protocols, and does not perform any parsing.The combination of refusing to parse poorly formatted URLs, and not performing additional parsing means that script checks fail as no protocol can be found. Even if a protocol was identified, whitespace is not stripped in the
parseURL
implementation, bypassing theisScriptProtocol
checks.Certain special protocols are identified at the top of
parseURL
. Inserting a newline or tab into this sequence will block the special protocol check, and bypass the latter checks.PoC
POC - https://stackblitz.com/edit/nuxt-xss-navigateto?file=app.vue
Attempt payload X, then attempt payload Y.
Impact
XSS, access to cookies, make requests on user's behalf.
Recommendations
As always with these bugs, the
URL
constructor provided by the browser is always the safest method of parsing a URL.Given the cross-platform requirements of nuxt/ufo a more appropriate solution is to make parsing consistent between functions, and to adapt parsing to be more consistent with the WHATWG URL specification.
Note
I've reported this vulnerability here as it is unclear if this is a bug in ufo or a misuse of the ufo library.
This ONLY has impact after SSR has occurred, the
javascript:
protocol within a location header does not trigger XSS.CVE-2025-27415
Summary
By sending a crafted HTTP request to a server behind an CDN, it is possible in some circumstances to poison the CDN cache and highly impacts the availability of a site.
It is possible to craft a request, such as
https://mysite.com/?/_payload.json
which will be rendered as JSON. If the CDN in front of a Nuxt site ignores the query string when determining whether to cache a route, then this JSON response could be served to future visitors to the site.Impact
An attacker can perform this attack to a vulnerable site in order to make a site unavailable indefinitely. It is also possible in the case where the cache will be reset to make a small script to send a request each X seconds (=caching duration) so that the cache is permanently poisoned making the site completely unavailable.
Conclusion :
This is similar to a vulnerability in Next.js that resulted in CVE-2024-46982 (and see this article, in particular the "Internal URL parameter and pageProps" part, the latter being very similar to the one concerning us here.)
CVE-2025-59414
Summary
A client-side path traversal vulnerability in Nuxt's Island payload revival mechanism allowed attackers to manipulate client-side requests to different endpoints within the same application domain when specific prerendering conditions are met.
Technical Details
The vulnerability occurs in the client-side payload revival process (revive-payload.client.ts) where Nuxt Islands are automatically fetched when encountering serialized
__nuxt_island
objects. The issue affects the following flow:__nuxt_island
objectdevalue.stringify
and stored in the prerendered pagedevalue.parse
deserializes the payload/__nuxt_island/${key}.json
wherekey
could contain path traversal sequencesPrerequisites for Exploitation
This vulnerability requires all of the following conditions:
nitro.prerender
)useFetch
,useAsyncData
, or similar composablesAttack Scenario
This could cause the client to make requests to
/__nuxt_island/../../../../internal/service.json
if path traversal is not properly handled by the server.Impact Assessment
Mitigation
Action Required:
Temporary Workarounds (if immediate update is not possible):
Fix Details
The fix implemented validation for Island keys in
revive-payload.server.ts
:/^[a-z][a-z\d-]*_[a-z\d]+$/i
Release Notes
nuxt/nuxt (nuxt)
v3.19.0
Compare Source
👀 Highlights
Please see the release notes for Nuxt v4.1 for full details on the features and fixes in Nuxt v3.19.
✅ Upgrading
As usual, our recommendation for upgrading is to run:
This will refresh your lockfile and pull in all the latest dependencies that Nuxt relies on, especially from the unjs ecosystem.
👉 Changelog
compare changes
🚀 Enhancements
ignore
option toresolveFiles
(#32858)onInstall
andonUpgrade
module hooks (#32397)rolldown-vite
(#31812)defineRouteRules
to pagerules
property (#32897)getLayerDirectories
util and refactor to use it (#33098)🔥 Performance
🩹 Fixes
satisfies
in page augmentation (#32902)useFetch
hooks (#32891)resolvePath
and normalize file extensions (#32857)requestTimeout
+ allow configuration (#32874)node_modules/
if no customsrcDir
(#32987)route
object (#32899)defineNuxtModule().with()
(#33081)nuxtApp._runningTransition
on resolve (#33025)💅 Refactors
async/await
inafterEach
(#32999)📖 Documentation
setupTimeout
and addteardownTimeout
(#32868)--nightly
command (#32907)useRoute
and accessing route in middleware (#33004)🏡 Chore
type: 'module'
in playground (#33099)✅ Tests
import.meta.dev
(#33023)findWorkspaceDir
rather than relative paths to repo root (c4c3ada96)expect.poll
(f4354203a)expect.poll
instead ofexpectWithPolling
(15ca5be95)vi.waitUntil
instead of custom retry logic (4c8c13090)🤖 CI
❤️ Contributors
v3.18.1
Compare Source
👉 Changelog
compare changes
🔥 Performance
tinyglobby
inresolveFiles
(#32846)🩹 Fixes
error
variable (#32807)typeCheck
(#32835)null
result from webpack call (65aa17158)reverseResolveAlias
for better errors (#32853)📖 Documentation
🏡 Chore
✅ Tests
defineNuxtComponent
out of e2e test (#32848)🤖 CI
❤️ Contributors
v3.18.0
Compare Source
👀 Highlights
A huge thank you to everyone who's been a part of this release, which is mostly about backporting features + bugfixes from Nuxt v4.
Over the next six months, we'll continue backporting compatible v4 features and bug fixes, so please keep the feedback coming! ❤️
🧪 Lazy Hydration Macros
Building on the delayed hydration support from v3.16, we now support lazy hydration macros (#31192)! These provide a more ergonomic way to control component hydration:
These macros make it possible to use Nuxt's lazy hydration utilities alongside explicit component imports.
♿️ Accessibility Improvements
We've enhanced accessibility by including
<NuxtRouteAnnouncer>
in the built-inapp.vue
(#32621). This means page changes will be announced to screen readers, making navigation more accessible for users with visual impairments. (This only applies if you do not have anapp.vue
in your project. If you do, please keep<NuxtRouteAnnouncer>
in yourapp.vue
!)🛠️ Enhanced Development Experience
Chrome DevTools Workspace Integration
We've added Chrome DevTools workspace integration (#32084), allowing you to edit your Nuxt source files directly from Chrome DevTools. This creates a better debugging experience where changes made in DevTools are reflected in your actual source files.
Better Component Type Safety
Component type safety has been improved with:
<ClientOnly>
and<DevOnly>
(#32707) - better IntelliSense and error checking<NuxtTime>
prop types (#32547) - easier to extend and customizeNew Auto-Import:
onWatcherCleanup
The
onWatcherCleanup
function fromvue
is now available as an auto-import (#32396), making it easier to clean up watchers and prevent memory leaks:📊 Observability Enhancements
Page routes are now exposed to Nitro for observability (#32617), enabling better monitoring and analytics integration with supported platforms. This allows observability tools to track page-level metrics more effectively.
🔧 Module Development Improvements
Module authors get several quality-of-life improvements:
Simplified Server Imports
The
addServerImports
kit utility now supports single imports (#32289), making it easier to add individual server utilities:TypeScript Configuration
Modules can now add to
typescript.hoist
(#32601), giving them more control over TypeScript configuration and type generation.⚡️ Performance Improvements
We've made several performance optimizations:
oxc-walker
(#32250) and oxc foronPrehydrate
transforms (#32045) for faster code transformations🐛 Bug Fixes
This release also includes several important fixes:
scrollBehaviorType
is now only used for hash scrolling (#32622)✅ Upgrading
As usual, our recommendation for upgrading is to run:
This refreshes your lockfile and pulls in all the latest dependencies that Nuxt relies on, especially from the unjs ecosystem.
👉 Changelog
compare changes
🚀 Enhancements
<NuxtTime>
prop types (#32547)addServerImports
(#32289)onWatcherCleanup
to imports presets (#32396)🔥 Performance
🩹 Fixes
typescript.hoist
(#32601)scrollBehaviorType
for hash scrolling (#32622)async
(fd312af03)<ClientOnly>
and<DevOnly>
(#32707)mlly
to parse module paths (#32386)💅 Refactors
oxc-walker
(#32250)onPrehydrate
transform (#32045)installNuxtModule
(228e3585e)📖 Documentation
v3
template to create nuxt examples (03182202f)useNuxtData
in data fetching composable pages (#32589)noUncheckedIndexedAccess
rule change in v4 guide (#32643)npm create nuxt@latest
(#32726).with()
(#32757)🏡 Chore
unbuild
and use absolute path in dev stubs (#32759)✅ Tests
module.exports
export (ac8b02d09)🤖 CI
pkg.pr.new
formain
/3.x
branches as well (ca4f0b1da)3x
tag to latest v3 release (5e8dfc150)❤️ Contributors
v3.17.7
Compare Source
✅ Upgrading
Our recommendation for upgrading is to run:
This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
compare changes
🩹 Fixes
extraPageMetaExtractionKeys
(#32510)loadBuilder
error cause (8f13ce3c2)null
values (c1b83eab5)semver.satisfies
returns true for pre-release versions (#32574)execute being passed to
watch` (#32591)📖 Documentation
NUXT_
(#32223)useAsyncData
anduseFetch
migration (#32560)undefined
tonull
in v3 docs (#32562)async
keyword (#32587)✅ Tests
generateTypes
(c0855439d)<NuxtTime>
test (#32558)❤️ Contributors
v3.17.6
Compare Source
✅ Upgrading
Our recommendation for upgrading is to run:
This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
compare changes
🔥 Performance
🩹 Fixes
nuxt.config
(#32324)nuxt:chunk-reload-immediate
(#32382)set-cookie
headers in error handler (#32483)asyncData
runs if changing key while fetcher is running (#32466)navigateTo
(#32393)<NuxtLink>
's custom on click handler (#32499)inheritAttrs: false
increateClientOnly
fn (#32323)output.generatedCode.symbols
for nitro build (#32358)💅 Refactors
📖 Documentation
h3js
(#32243)clear
function description (#32287)defineNuxtPlugin
function documentation (#32328)<NuxtLink>
encodes query params (#32361)bun.lock
for lockfile (#32427)🏡 Chore
workspace
toprojects
(#32388)✅ Tests
immediate: false
(#32473)🤖 CI
❤️ Contributors
v3.17.5
Compare Source
✅ Upgrading
Our recommendation for upgrading is to run:
This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
compare changes
🔥 Performance
globby
(#31688)🩹 Fixes
useScriptRybbitAnalytics
from script stubs (d275ae1a0)appConfig
sources are not duplicated (#32216)h()
in ClientOnly (#30664)asyncData
state from nuxt app instance (#32232)srcDir
inbuildCache
(#32260)asyncData
watcher (#32247)📖 Documentation
addRouteMiddleware
path in example (#32171)--env-file
(29f6392cd)nuxt
command consistently (#32237)alert
withwarning
in/guide/pages
(#32270)📦 Build
🏡 Chore
✅ Tests
❤️ Contributors
v3.17.4
Compare Source
✅ Upgrading
Our recommendation for upgrading is to run:
This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
compare changes
🔥 Performance
shallowRef
for primitive values (#32152)Intl.Collator
instead oflocaleCompare
(#32167)🩹 Fixes
<ClientOnly>
(#32101)useLazyAsyncData
(#32092)ts-checker-rspack-plugin
(#32115)/
(#32129)DeepPartial
(#31990)<ClientOnly>
(#32131)global
withglobalThis
(#32130)<NuxtLayout>
first renders (#24673)srcDir
to parcel strategy (#32139)📖 Documentation
useNuxtData
default return toundefined
(#32054)imports.dirs
with alias (0dbf314d9)🏡 Chore
✅ Tests
Configuration
📅 Schedule: Branch creation - "" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.