Skip to content

fix(security): Fix 12 security issues in nuxt, ws, sharp and 1 more - #840

Closed
aikido-autofix[bot] wants to merge 1 commit into
mainfrom
fix/aikido-security-update-packages-83073768-sss4
Closed

fix(security): Fix 12 security issues in nuxt, ws, sharp and 1 more#840
aikido-autofix[bot] wants to merge 1 commit into
mainfrom
fix/aikido-security-update-packages-83073768-sss4

Conversation

@aikido-autofix

@aikido-autofix aikido-autofix Bot commented Aug 7, 2026

Copy link
Copy Markdown

Upgrade Nuxt, ws, sharp, and react-router to fix authorization bypass, RCE via template injection, and information disclosure vulnerabilities. This update includes breaking changes that require manual migration.

⚠️ Code affected by breaking changes.

⚠️ ## Nuxt (4.5.0 => 4.5.1)

Where your code is affected: examples/nuxt/components/WidgetContainer.vue (lines 9-28)

Impact: The component uses Vue Options API syntax (export default { components: {...}, setup() {...} }). With Nuxt 4.5.1, the Options API is disabled by default for v5+, which will cause this component to fail at runtime.

Remediation: Either enable Options API in nuxt.config.ts by adding vue: { optionsApi: true } configuration, or refactor the component to use Composition API with <script setup> syntax.

React Router (7.18.1 => 8.3.0)

Where your code is affected: examples/react-router/app/entry.client.tsx (line 4)

Impact: The code already imports HydratedRouter from react-router/dom, which is the correct v8 import path. However, the example is upgrading from v7.18.1 to v8.3.0, which requires Node.js >= 22.22.0 (already satisfied) and React >= 19.2.7 (already satisfied). The breaking change about removing react-router-dom package doesn't affect this code since it's already using the new import structure.

Remediation: No code changes needed - the imports are already using the v8 structure. Ensure Node.js version is >= 22.22.0 and React version is >= 19.2.7 (both already satisfied in package.json).

All breaking changes by upgrading nuxt from version 4.5.0 to 4.5.1 (CHANGELOG)

Version Description
4.5.1
Disabled Vue Options API by default for v5+ via vue.optionsApi configuration
4.5.1
Route rule keys are now case-folded to match folded lookups, which may affect route rule matching behavior
4.5.1
Reserved template island prop is now rejected when using runtime compiler
4.5.1
Top-level as prop is now rejected for islands
4.5.1
Island props and v-for are now bounded to prevent unauthenticated DoS, restricting previously unlimited behavior
4.5.1
Runtime payload cache is now confined to prerendering only, no longer available during regular runtime

All breaking changes by upgrading sharp from version 0.34.5 to 0.35.0 (CHANGELOG)

Version Description
0.35.0
Drop support for Node.js 18, now requires Node.js >= 20.9.0.
0.35.0
Remove install script from package.json file. Compiling from source is now opt-in via the build script.
0.35.0
Lossy AVIF output is now tuned using SSIMULACRA2-based iq quality metrics.
0.35.0
Add limitInputChannels with a default value of 5.
0.35.0
Remove deprecated failOnError constructor property.
0.35.0
Remove deprecated paletteBitDepth from metadata response.
0.35.0
Remove deprecated properties from sharpen operation.
0.35.0
Rename format.jp2k as format.jp2 for API consistency.

All breaking changes by upgrading react-router from version 7.18.1 to 8.3.0 (CHANGELOG)

Version Description
8.0.0
Remove the future.v8_trailingSlashAwareDataRequests flag - trailing slash-aware data request URLs are now the default behavior
8.0.0
Update tsconfig.json target/lib from ES2020 -> ES2022
8.0.0
Switch the published packages in packages/ to ESM-only
8.0.0
Remove deprecated data parameter in favor of loaderData for meta APIs
8.0.0
Remove future.v8_passThroughRequests flag - the raw incoming request is now always passed through to loader/action
8.0.0
Remove internal hasErrorBoundary field from router.routes - hasErrorBoundary is no longer accepted on RouteObject, DataRouteObject, <Route> JSX props, or as a key in lazy route definitions
8.0.0
Remove react-router-dom package - imports must be changed to react-router/dom for RouterProvider/HydratedRouter and react-router for everything else
8.0.0
Remove future.v8_middleware flag - middleware is always enabled and getLoadContext functions must return a RouterContextProvider instance instead of a plain object
8.0.0
Update minimum Node version to 22.22.0
8.0.0
Update minimum React version to 19.2.7
8.3.0
Encode path params in href/generatePath per RFC 3986 path-segment rules instead of encodeURIComponent - characters like $ & + , ; = : @ are no longer percent-encoded
✅ 12 CVEs resolved by this upgrade

This PR will resolve the following CVEs:

Issue Severity           Description
AIKIDO-2026-174775
HIGH
[nuxt] An authorization bypass vulnerability exists in route rule matching where uppercase characters cause inconsistent case normalization, allowing attackers to bypass authentication middleware and other protections by accessing protected pages with differently cased URLs.
CVE-2026-71315
HIGH
[nuxt] Mixed-case routeRules keys fail to match case-folded lookups when router.options.sensitive is false, bypassing appMiddleware authorization gates. This incomplete fix for a prior vulnerability allows unauthorized access to protected routes.
AIKIDO-2026-414718
HIGH
[nuxt] Server-side remote code execution when vue.runtimeCompiler is enabled and attacker-controlled props are forwarded to Vue's dynamic component resolution via the /__nuxt_island/ endpoint. An attacker can inject a malicious template property to execute arbitrary code within the Nitro server process.
CVE-2026-71320
HIGH
[nuxt] An attacker can inject a template key through /__nuxt_island/ props into a dynamic component when vue.runtimeCompiler: true is enabled, allowing arbitrary template execution in the Nitro process. This results in remote code execution on the server.
AIKIDO-2026-483885
HIGH
[nuxt] Route caching can expose authenticated user data in /_payload.json without proper authentication checks, allowing unauthenticated or other authenticated users to access sensitive server-rendered information from cached pages.
CVE-2026-71316
HIGH
[nuxt] Runtime cache entries for payload JSON files can be returned before route middleware and page guards are executed, potentially disclosing another user's SSR data due to unenforced prerender checks.
AIKIDO-2026-858072
MEDIUM
[nuxt] Improper input validation in server islands allows attackers to instantiate arbitrary Vue components or HTML elements via crafted props, bypassing component restrictions and potentially exposing unintended functionality or information.
CVE-2026-71318
MEDIUM
[nuxt] An attacker can supply a malicious as prop to the /__nuxt_island/ endpoint to manipulate dynamic component resolution, potentially enabling arbitrary code execution through component injection. This vulnerability affects the framework's island rendering feature.
AIKIDO-2026-295422
LOW
[nuxt] A network-reachable dev server's Chrome DevTools endpoint incorrectly validates local-only access using request headers instead of peer address, allowing unauthenticated attackers to retrieve the project root path and workspace UUID. This information disclosure vulnerability affects any host that can reach the dev server on the network.
AIKIDO-2026-138234
HIGH
[ws] A remote attacker can send fragmented WebSocket frames with high default limits on fragment retention, causing excessive heap memory consumption and denial of service without completing the message or exceeding payload limits.
GHSA-qwww-vcr4-c8h2
HIGH
[react-router] This is a follow up to CVE-2026-22030 to address related CSRF flows in unstable RSC code paths.

> [!NOTE]
> This only affects your application if you are using the unstable RSC APIs
GHSA-f88m-g3jw-g9cj
HIGH
[sharp] Multiple high-severity vulnerabilities in upstream libvips dependency allow remote code execution when processing untrusted image input (GIF, TIFF, VIPS formats).

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Aikido Label created by Aikido AutoFix

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants