Public mode

No access to your tenant or devices. Every item links to its source. What this means

Some sources, documents or advisories need attention: 271/271 feeds/APIs · 464/464 docs · 8/9 advisories · checked 23:08 UTC Customize Public modeDiscuss ChangeIntel on Discord

Quasar: Prototype pollution in the extend() utility

Exact source revision recorded 24 Oct 2026 13:17:17 UTC. It does not establish the source's current position. Latest evidence.

osv · GHSA-3r53-75j5-3g7j

Published

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

Source published
24 Jul 2026 22:36:45 UTC
Source modified
13 Aug 2026 18:51:16 UTC
Observed here
24 Oct 2026 13:17:17 UTC
Source terms
GitHub Advisory Database · CC-BY-4.0

Original source record · Cite this exact observation · Complete original publisher JSON

This view projects the publisher's source fields for reading; the original JSON retains additional fields and CVE enrichment containers. Attribution: osv · GitHub Advisory Database · CC-BY-4.0. Source text is retained; field grouping and change labels are provided by ChangeIntel.

CVSS_V3 · CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:L

Publisher rating · MODERATE

ChangeIntel

An IT change radar: releases, security, known issues, retirements, documentation changes, and service status from public sources. Every item links to supporting evidence; dates and statuses can change after they are read.

Sources read 25 Oct 23:08 UTC · 271 of 271 readable · 269 fully read · documentation 464/464 current