GitHub Advisoryadvisory · npm
GHSA-3r53-75j5-3g7j Quasar: Prototype pollution in the extend() utility
MEDIUM
Official page ↗
- Aliases
- CVE-2026-73647
- Ecosystem
- npm
- Packages
- quasar
- Severity
- Moderate
- CVSS vector
- CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:L
- Weaknesses
- CWE-1321
- Reviewed
- 2026-07-24
Affected packages
• npm quasar: < 2.22.0 → fixed in 2.22.0
Description
Summary
`[email protected]`, the latest published version at the time of testing, appears to be vulnerable to prototype pollution through the public `extend()` utility exported from the package root.
When `extend(true, target, source)` is used for a deep merge, attacker-controlled object keys are recursively copied into the target object without blocking prototype-pollution primitives such as `__proto__`, `constructor`, or `prototype`.
This can allow attacker-controlled properties to be written to `Object.prototype`.
Details
Affected source:
```text
src/utils/extend/extend.js
```
Distributed files include:
```text
dist/quasar.server.prod.js
dist/quasar.server.prod.cjs
dist/quasar.client.js
```
The package root publicly exports `extend`. During deep merge, source object keys are recursively assigned into the target object. If the source object contains an own `__proto__` property, the merge can descend into the prototype object and assign attacker-controlled properties onto `Object.prototype`.
PoC
```bash
rm -rf /tmp/quasar-extend-pp-poc
mkdir /tmp/quasar-extend-pp-poc
cd /tmp/quasar-extend-pp-poc
npm init -y >/dev/null
npm install [email protected] [email protected] >/dev/null
cat > hack.mjs <<'JS'
import { extend } from 'quasar';
delete Object.prototype.polluted;
extend(true, {}, {
['__proto__']: {
polluted: 'yes'
}
});
console.log(({}).polluted);
delete Object.prototype.polluted;
JS
node ./hack.mjs
```
Observed output:
```text
yes
```
Expected output:
```text
undefined
```
Impact
This is a prototype pollution vulnerability.
If an application passes user-controlled or partially user-controlled objects into `extend(true, ...)`, an attacker may be able to pollute `Object.prototype` in the same JavaScript process.
Depending on how the polluted property is later consumed, this may lead to logic bypass, unsafe default option injection, denial of service, or other application-specific security impact.
Suggested Fix
Reject or safely ignore dangerous keys before assignment, including:
```text
__proto__
prototype
constructor
```
The merge implementation should also avoid descending into prototype-related properties during recursive merge.
Related
Alias · CVE (1)
- CVE-2026-73647 Quasar Framework is a framework for building high-performance Vue.js user interfaces. vulnerability
Weakness · CWE (1)
- CWE-1321 Improperly Controlled Modification of Object Prototype Attributes weakness
References
- https://github.com/quasarframework/quasar/security/advisories/GHSA-3r53-75j5-3g7j web
- https://github.com/quasarframework/quasar/commit/d0a95d95ab3c29d13e1b8ba8c5e5025fd6ce35e7 web
- https://github.com/quasarframework/quasar package
- https://github.com/quasarframework/quasar/releases/tag/quasar-v2.22.0 web