diff --git a/lib/internal/iterator.js b/lib/internal/iterator.js index d167ff9d1..02526e0fd 100644 --- a/lib/internal/iterator.js +++ b/lib/internal/iterator.js @@ -26,6 +26,9 @@ function createObjectIterator(obj) { var len = okeys.length; return function next() { var key = okeys[++i]; + if (key === '__proto__') { + return next(); + } return i < len ? {value: obj[key], key} : null; }; } diff --git a/test/mapValues.js b/test/mapValues.js index 32643379c..6d089fb03 100644 --- a/test/mapValues.js +++ b/test/mapValues.js @@ -60,6 +60,17 @@ describe('mapValues', () => { done(); }, 50); }); + + it('prototype pollution', (done) => { + var input = JSON.parse('{"a": 1, "b": 2, "__proto__": { "exploit": true }}'); + + async.mapValues(input, (val, key, next) => { + next(null, val) + }, (err, result) => { + expect(result.exploit).to.equal(undefined) + done(err); + }) + }) }); context('mapValues', () => {