JavaScript prototype pollution & Object properties #215
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I added two new sections:
JavaScript prototype pollution
This is an attack where properties are added onto Object prototype, making them part of ALL objects, e.g.:
In essence, any code containing
obj[a][b] = value
where at leasta
andvalue
are user controlled are vulnerable, and many popular libraries have had this vulnerability found. More info: https://github.com/HoLyVieR/prototype-pollution-nsec18my two naughty strings contain the standard naughty JSON with a proto property, and a less likely but still possible attack where
obj[a][b][c] = value
is needed. the JSON keys are common names that are likely to break any application (items, data, attributes)JavaScript Object properties
those are properties on the default Object prototype that will cause issues in two cases:
obj.<obj-method>()
on a user-controlled object (can crash if user supplies this method) -- the correct thing to do isObject.prototype.<name>.call(obj, ...)
obj[key]
on a user-controlled object to check if a key exists - this will always be truthy for Object properties, but incorrect. This logic error can be a security vulnerability in some cases.