GitHub Advisoryadvisory · npm
GHSA-737v-mqg7-c878 defu: Prototype pollution via `__proto__` key in defaults argument
HIGH
Official page ↗
- Aliases
- CVE-2026-35209
- Ecosystem
- npm
- Packages
- defu
- Severity
- High
- CVSS vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
- Weaknesses
- CWE-1321
- Reviewed
- 2026-04-04
Affected packages
• npm defu: < 6.1.5 → fixed in 6.1.5
Description
Impact
Applications that pass unsanitized user input (e.g. parsed JSON request bodies, database records, or config files from untrusted sources) as the first argument to `defu()` are vulnerable to prototype pollution.
A crafted payload containing a `__proto__` key can override intended default values in the merged result:
```js
import { defu } from 'defu'
const userInput = JSON.parse('{"__proto__":{"isAdmin":true}}')
const config = defu(userInput, { isAdmin: false })
config.isAdmin // true — attacker overrides the server default
```
Root Cause
The internal `_defu` function used `Object.assign({}, defaults)` to copy the defaults object. `Object.assign` invokes the `__proto__` setter, which replaces the resulting object's `[[Prototype]]` with attacker-controlled values. Properties inherited from the polluted prototype then bypass the existing `__proto__` key guard in the `for...in` loop and land in the final result.
Fix
Replace `Object.assign({}, defaults)` with object spread (`{ ...defaults }`), which uses `[[DefineOwnProperty]]` and does not invoke the `__proto__` setter.
Affected Versions
<= 6.1.4
Credits
Reported by @BlackHatExploitation
Related
Alias · CVE (1)
- CVE-2026-35209 defu is software that allows uers to assign default properties recursively. vulnerability
Weakness · CWE (1)
- CWE-1321 Improperly Controlled Modification of Object Prototype Attributes weakness
References
- https://github.com/unjs/defu/security/advisories/GHSA-737v-mqg7-c878 web
- https://nvd.nist.gov/vuln/detail/CVE-2026-35209 advisory
- https://github.com/unjs/defu/pull/156 web
- https://github.com/unjs/defu/commit/3942bfbbcaa72084bd4284846c83bd61ed7c8b29 web
- https://github.com/unjs/defu package
- https://github.com/unjs/defu/releases/tag/v6.1.5 web