Skip to main content

@feathersjs/commons CVE-2026-54335

LOW
Improperly Controlled Modification of Object Prototype Attributes (Prototype Pollution) (CWE-1321)
2026-07-14 https://github.com/feathersjs/feathers GHSA-28xv-ph75-77wh
3.7
CVSS 3.1 · Vendor: https://github.com/feathersjs/feathers

Severity by source

Vendor (https://github.com/feathersjs/feathers) PRIMARY
3.7 LOW
AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N
vuln.today AI
3.7 LOW

AC:H because exploitation requires the specific non-default condition of application or plugin code routing untrusted JSON through commons._.merge; I:L only as prototype pollution affects logic integrity but not confidentiality or availability directly.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N
4.0 AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (https://github.com/feathersjs/feathers).

CVSS VectorVendor: https://github.com/feathersjs/feathers

Attack Vector
Network
Attack Complexity
High
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
Low
Availability
None

Lifecycle Timeline

2
Source Code Evidence Fetched
Jul 22, 2026 - 14:43 vuln.today
Analysis Generated
Jul 22, 2026 - 14:43 vuln.today

DescriptionCVE.org

Impact

The _.merge(target, source) utility exported by @feathersjs/commons recursively merges source into target by iterating Object.keys(source). When source was produced by JSON.parse and contains a __proto__ (or constructor / prototype) key, that key is returned as an own-enumerable property. The recursive merge then resolves target['__proto__'] to Object.prototype and writes the attacker-supplied properties onto it, polluting the prototype for all plain objects in the process for the lifetime of the Node process.

Scope of real-world risk is limited. No first-party Feathers package routes input - trusted or untrusted - through commons._.merge. The @feathersjs/authentication package, which does merge request-influenced data, uses lodash/merge (prototype-pollution-safe since 4.17.12), not this utility. Exploitation therefore requires a downstream plugin or application to pass JSON-parsed, attacker-controlled input directly through the exported _.merge.

Patches

Fixed in @feathersjs/commons@5.0.45. The fix skips __proto__, constructor, and prototype keys during iteration - the standard remediation used by lodash and others.

Workarounds

Avoid passing JSON-parsed untrusted input through commons._.merge. Freezing Object.prototype or validating/sanitizing keys upstream also mitigates.

Credit

Reported responsibly by Andrew Ridings (@ridingsa).

AnalysisAI

Prototype pollution in @feathersjs/commons _.merge allows remote attackers to corrupt Object.prototype for the lifetime of a Node.js process by submitting JSON-parsed input containing a __proto__, constructor, or prototype key. The CVSS 3.7 (Low) rating reflects genuine low real-world risk: no first-party @feathersjs/* package routes untrusted input through this specific utility, meaning exploitation is gated on a downstream plugin or custom application code doing so. EPSS is 0.39% (31st percentile) and no public exploit or CISA KEV listing exists, consistent with the vendor's own assessment that scope of real-world risk is limited.

Technical ContextAI

The affected utility is _.merge(target, source) exported from the @feathersjs/commons npm package (pkg:npm/@feathersjs_commons, versions <= 5.0.44). The function recursively merges source into target by iterating Object.keys(source). Because JSON.parse returns __proto__, constructor, and prototype as own-enumerable properties when present in a JSON string, these keys pass through the key iterator unfiltered. When the merge evaluates target['__proto__'], JavaScript resolves this to Object.prototype - the shared prototype of all plain objects - and writes attacker-supplied properties onto it, persisting for the lifetime of the Node process. This is a textbook CWE-1321 (Improperly Controlled Modification of Object Prototype Attributes) flaw, the same class that affected lodash prior to 4.17.12. The PR #3690 fix (commit 28b3c03) adds explicit guard checks skipping __proto__, constructor, and prototype keys during iteration, mirroring the standard remediation pattern. Notably, @feathersjs/authentication - the package that does merge request-influenced data - uses lodash/merge (safe since 4.17.12), not this utility.

RemediationAI

Upgrade @feathersjs/commons to version 5.0.45 or later; the patch is confirmed at commit 28b3c03c63bdbff53115fdaa46c56980e7942acc (https://github.com/feathersjs/feathers/commit/28b3c03c63bdbff53115fdaa46c56980e7942acc) and PR #3690 (https://github.com/feathersjs/feathers/pull/3690). If an immediate upgrade is not feasible, audit all application and plugin code for call sites that pass JSON.parse output directly to @feathersjs/commons _.merge and refactor those paths to avoid the unsafe utility. A targeted workaround is to strip or reject __proto__, constructor, and prototype keys from parsed objects before they reach _.merge - this has minimal side effects compared to other options. Freezing Object.prototype at process startup (Object.freeze(Object.prototype)) prevents writes globally but can break third-party libraries that rely on prototype augmentation, so validate thoroughly in a staging environment before deploying. Restarting the Node process clears any active prototype pollution, which can serve as an immediate containment step if exploitation is suspected.

CVE-2026-34621 HIGH POC
8.6 Apr 11

Prototype pollution in Adobe Acrobat Reader versions 24.001.30356, 26.001.21367 and earlier enables arbitrary code execu

CVE-2024-56059 CRITICAL
9.8 Dec 18

Prototype pollution in the farinspace Partners WordPress plugin (versions up to and including 0.2.0) enables remote unau

CVE-2020-28271 CRITICAL POC
9.8 Nov 12

Prototype pollution vulnerability in 'deephas' versions 1.0.0 through 1.0.5 allows attacker to cause a denial of service

CVE-2023-38894 CRITICAL POC
9.8 Aug 16

A Prototype Pollution issue in Cronvel Tree-kit v.0.7.4 and before allows a remote attacker to execute arbitrary code vi

CVE-2024-24292 CRITICAL POC
9.8 Mar 28

A Prototype Pollution issue in Aliconnect /sdk v.0.0.6 allows an attacker to execute arbitrary code via the aim function

CVE-2023-26121 CRITICAL POC
10.0 Apr 11

All versions of the package safe-eval are vulnerable to Prototype Pollution via the safeEval function, due to improper s

CVE-2021-23449 CRITICAL POC
10.0 Oct 18

This affects the package vm2 before 3.9.4 via a Prototype Pollution attack vector, which can lead to execution of arbitr

CVE-2024-39011 CRITICAL POC
9.8 Jul 30

Prototype Pollution in chargeover redoc v2.0.9-rc.69 allows attackers to execute arbitrary code or cause a Denial of Ser

CVE-2024-38988 CRITICAL POC
9.8 Mar 28

alizeait unflatto <= 1.0.2 was discovered to contain a prototype pollution via the method exports.unflatto at /dist/inde

CVE-2025-57347 CRITICAL POC
9.8 Sep 24

A vulnerability exists in the 'dagre-d3-es' Node.js package version 7.0.9, specifically within the 'bk' module's addConf

CVE-2025-57321 CRITICAL POC
9.8 Sep 24

A Prototype Pollution vulnerability in the util-deps.addFileDepend function of magix-combine-ex versions thru 1.2.10 all

CVE-2024-45435 CRITICAL POC
9.8 Aug 29

Chartist 1.x through 1.3.0 allows Prototype Pollution via the extend function. Rated critical severity (CVSS 9.8), this

Share

CVE-2026-54335 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy