Severity by source
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:U/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Exploitation needs the app to feed untrusted input to objDeepCopy plus a gadget, so AC:H; no auth (PR:N); primary impact is prototype integrity (I:H) with possible DoS (A:L) and no confidentiality loss.
Primary rating from Vendor (https://github.com/nevware21/ts-utils).
CVSS VectorVendor: https://github.com/nevware21/ts-utils
Lifecycle Timeline
5Blast Radius
ecosystem impact- 1 npm packages depend on @nevware21/ts-utils (1 direct, 0 indirect)
Ecosystem-wide dependent count for version 0.14.0.
DescriptionCVE.org
Summary
The _copyProps function in lib/src/object/copy.ts uses for...in to iterate over source object properties without an Object.hasOwnProperty check, and does not filter dangerous keys (__proto__, constructor, prototype). This allows an attacker to pollute the prototype chain of all objects in the application.
Details
In _copyProps() (copy.ts lines 186-191), the code iterates all enumerable properties including inherited ones and dangerous keys like __proto__. Any object with a __proto__ key (e.g., from untrusted JSON input) will overwrite the target's prototype.
PoC
const malicious = JSON.parse('{"__proto__": {"polluted": true}}');
objDeepCopy(malicious);
console.log({}.polluted); // trueSuggested Fix
Add objHasOwnProperty check and filter __proto__, constructor, prototype keys.
AnalysisAI
Prototype pollution in the @nevware21/ts-utils npm library (versions <= 0.13.0) lets an attacker who can influence an object passed to objDeepCopy() or objCopyProps() inject a __proto__ (or constructor/prototype) key that overwrites Object.prototype for the entire application. The flaw stems from _copyProps() in lib/src/object/copy.ts iterating with for...in and no hasOwnProperty guard, so parsing untrusted JSON and deep-copying it is enough to poison every object. A working proof-of-concept is published in the GHSA advisory, though EPSS is very low (0.06%) and the issue is not on CISA KEV, so publicly available exploit code exists but no active exploitation is confirmed.
Technical ContextAI
The affected component is the TypeScript utility library @nevware21/ts-utils (npm package pkg:npm/@nevware21/ts-utils), specifically its object copy helpers objDeepCopy and objCopyProps backed by the internal _copyProps function. The root cause is CWE-1321 (Improperly Controlled Modification of Object Prototype Attributes, i.e. prototype pollution): _copyProps uses a JavaScript for...in loop, which walks both own and inherited enumerable properties and does not distinguish the special __proto__ accessor. Without an Object.hasOwnProperty / objHasOwnProperty filter and without excluding the dangerous keys __proto__, constructor, and prototype, assigning a source property named __proto__ mutates the target object's prototype rather than setting an own property. Because JavaScript objects share Object.prototype, a single polluting copy propagates to all objects created in the running process, potentially altering control-flow-relevant defaults, enabling denial of service, or feeding downstream gadgets.
RemediationAI
Vendor-released patch: 0.14.0 - upgrade @nevware21/ts-utils to >= 0.14.0, which adds objHasOwnProperty checks and filters the __proto__, constructor, and prototype keys (see advisory https://github.com/nevware21/ts-utils/security/advisories/GHSA-x7j8-49r8-mr43 and fix commit https://github.com/nevware21/ts-utils/commit/5e887f4e2fbee7160c8f501634c45e6a229e83bb). Because the package is frequently a transitive dependency, run npm ls @nevware21/ts-utils and update or override the resolved version (npm overrides / yarn resolutions) so nested copies are also bumped. If an immediate upgrade is not possible, apply compensating controls in the calling code: avoid passing unsanitized JSON directly into objDeepCopy/objCopyProps, strip or reject any incoming object containing a __proto__/constructor/prototype key before copying, and consider Object.freeze(Object.prototype) at startup to block prototype mutation (trade-off: this can break libraries that legitimately extend prototypes and must be tested). Parsing untrusted input with a reviver that drops dangerous keys, or using Map/null-prototype objects for attacker-controlled data, further reduces exposure until the patched version is deployed.
More in Prototype Pollution
View allPrototype pollution in Adobe Acrobat Reader versions 24.001.30356, 26.001.21367 and earlier enables arbitrary code execu
Prototype pollution in the farinspace Partners WordPress plugin (versions up to and including 0.2.0) enables remote unau
Prototype pollution vulnerability in 'deephas' versions 1.0.0 through 1.0.5 allows attacker to cause a denial of service
A Prototype Pollution issue in Cronvel Tree-kit v.0.7.4 and before allows a remote attacker to execute arbitrary code vi
A Prototype Pollution issue in Aliconnect /sdk v.0.0.6 allows an attacker to execute arbitrary code via the aim function
All versions of the package safe-eval are vulnerable to Prototype Pollution via the safeEval function, due to improper s
This affects the package vm2 before 3.9.4 via a Prototype Pollution attack vector, which can lead to execution of arbitr
Prototype Pollution in chargeover redoc v2.0.9-rc.69 allows attackers to execute arbitrary code or cause a Denial of Ser
alizeait unflatto <= 1.0.2 was discovered to contain a prototype pollution via the method exports.unflatto at /dist/inde
A vulnerability exists in the 'dagre-d3-es' Node.js package version 7.0.9, specifically within the 'bk' module's addConf
A Prototype Pollution vulnerability in the util-deps.addFileDepend function of magix-combine-ex versions thru 1.2.10 all
Chartist 1.x through 1.3.0 allows Prototype Pollution via the extend function. Rated critical severity (CVSS 9.8), this
Same technique Information Disclosure
View allVendor StatusVendor
Share
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-46260
GHSA-x7j8-49r8-mr43