chore(deps): update devdependency nuxt to v3.19.0 [security] #344
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.10.3->3.19.0GitHub Vulnerability Alerts
CVE-2024-34344
Summary
Due to the insufficient validation of the
pathparameter 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
NuxtTestComponentWrapperis 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
pathparameter 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.pathinstead of the normalizedpath, a non-normalized URL can reach theimport(...)function.For example, passing something like
./components/testnormalizespathto/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
whoamiis written to/tmp/testDemonstration 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
navigateTofunction 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
parseURLfunction. 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
isScriptProtocolfunction. 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
parseURLimplementation, bypassing theisScriptProtocolchecks.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
URLconstructor 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.jsonwhich 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_islandobjects. The issue affects the following flow:__nuxt_islandobjectdevalue.stringifyand stored in the prerendered pagedevalue.parsedeserializes the payload/__nuxt_island/${key}.jsonwherekeycould 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.jsonif 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]+$/iRelease Notes
nuxt/nuxt (nuxt)
v3.19.0Compare 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
ignoreoption toresolveFiles(#32858)onInstallandonUpgrademodule hooks (#32397)rolldown-vite(#31812)defineRouteRulesto pagerulesproperty (#32897)getLayerDirectoriesutil and refactor to use it (#33098)🔥 Performance
🩹 Fixes
satisfiesin page augmentation (#32902)useFetchhooks (#32891)resolvePathand normalize file extensions (#32857)requestTimeout+ allow configuration (#32874)node_modules/if no customsrcDir(#32987)routeobject (#32899)defineNuxtModule().with()(#33081)nuxtApp._runningTransitionon resolve (#33025)💅 Refactors
async/awaitinafterEach(#32999)📖 Documentation
setupTimeoutand addteardownTimeout(#32868)--nightlycommand (#32907)useRouteand accessing route in middleware (#33004)🏡 Chore
type: 'module'in playground (#33099)✅ Tests
import.meta.dev(#33023)findWorkspaceDirrather than relative paths to repo root (c4c3ada96)expect.poll(f4354203a)expect.pollinstead ofexpectWithPolling(15ca5be95)vi.waitUntilinstead of custom retry logic (4c8c13090)🤖 CI
❤️ Contributors
v3.18.1Compare Source
👉 Changelog
compare changes
🔥 Performance
tinyglobbyinresolveFiles(#32846)🩹 Fixes
errorvariable (#32807)typeCheck(#32835)nullresult from webpack call (65aa17158)reverseResolveAliasfor better errors (#32853)📖 Documentation
🏡 Chore
✅ Tests
defineNuxtComponentout of e2e test (#32848)🤖 CI
❤️ Contributors
v3.18.0Compare 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.vuein 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:
onWatcherCleanupThe
onWatcherCleanupfunction fromvueis 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
addServerImportskit 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 foronPrehydratetransforms (#32045) for faster code transformations🐛 Bug Fixes
This release also includes several important fixes:
scrollBehaviorTypeis 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)onWatcherCleanupto imports presets (#32396)🔥 Performance
🩹 Fixes
typescript.hoist(#32601)scrollBehaviorTypefor hash scrolling (#32622)async(fd312af03)<ClientOnly>and<DevOnly>(#32707)mllyto parse module paths (#32386)💅 Refactors
oxc-walker(#32250)onPrehydratetransform (#32045)installNuxtModule(228e3585e)📖 Documentation
v3template to create nuxt examples (03182202f)useNuxtDatain data fetching composable pages (#32589)noUncheckedIndexedAccessrule change in v4 guide (#32643)npm create nuxt@latest(#32726).with()(#32757)🏡 Chore
unbuildand use absolute path in dev stubs (#32759)✅ Tests
module.exportsexport (ac8b02d09)🤖 CI
pkg.pr.newformain/3.xbranches as well (ca4f0b1da)3xtag to latest v3 release (5e8dfc150)❤️ Contributors
v3.17.7Compare 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)loadBuildererror cause (8f13ce3c2)nullvalues (c1b83eab5)semver.satisfiesreturns true for pre-release versions (#32574)execute being passed towatch` (#32591)📖 Documentation
NUXT_(#32223)useAsyncDataanduseFetchmigration (#32560)undefinedtonullin v3 docs (#32562)asynckeyword (#32587)✅ Tests
generateTypes(c0855439d)<NuxtTime>test (#32558)❤️ Contributors
v3.17.6Compare 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-cookieheaders in error handler (#32483)asyncDataruns if changing key while fetcher is running (#32466)navigateTo(#32393)<NuxtLink>'s custom on click handler (#32499)inheritAttrs: falseincreateClientOnlyfn (#32323)output.generatedCode.symbolsfor nitro build (#32358)💅 Refactors
📖 Documentation
h3js(#32243)clearfunction description (#32287)defineNuxtPluginfunction documentation (#32328)<NuxtLink>encodes query params (#32361)bun.lockfor lockfile (#32427)🏡 Chore
workspacetoprojects(#32388)✅ Tests
immediate: false(#32473)🤖 CI
❤️ Contributors
v3.17.5Compare 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
useScriptRybbitAnalyticsfrom script stubs (d275ae1a0)appConfigsources are not duplicated (#32216)h()in ClientOnly (#30664)asyncDatastate from nuxt app instance (#32232)srcDirinbuildCache(#32260)asyncDatawatcher (#32247)📖 Documentation
addRouteMiddlewarepath in example (#32171)--env-file(29f6392cd)nuxtcommand consistently (#32237)alertwithwarningin/guide/pages(#32270)📦 Build
🏡 Chore
✅ Tests
❤️ Contributors
v3.17.4Compare 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
shallowReffor primitive values (#32152)Intl.Collatorinstead oflocaleCompare(#32167)🩹 Fixes
<ClientOnly>(#32101)useLazyAsyncData(#32092)ts-checker-rspack-plugin(#32115)/(#32129)DeepPartial(#31990)<ClientOnly>(#32131)globalwithglobalThis(#32130)<NuxtLayout>first renders (#24673)srcDirto parcel strategy (#32139)📖 Documentation
useNuxtDatadefault return toundefined(#32054)imports.dirswith 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 becomes conflicted, 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.