Prototype Pollution is a vulnerability that occurs when an attacker manipulates the prototype of a JavaScript object. It exploits the dynamic nature of JavaScript, allowing an attacker to modify an object's structure and behavior.
This vulnerability is unique to JavaScript environments due to the language's flexible object model, where prototypes are shared between all objects of the same type. Consequently, a change to the prototype is reflected across all instances, potentially affecting the application's behavior globally.
There are mainly two types of Prototype Pollution:
Global Prototype Pollution: This involves manipulating JavaScript's built-in object prototypes, such as Object.prototype, Array.prototype, etc. It can lead to various forms of attacks, such as adding, modifying, or deleting properties and methods, affecting the entire application.
Local Prototype Pollution: This is more specific and involves manipulating the prototype of specific objects in the application. The impact is usually confined to the scope of those specific objects.
It's important to note that due to its nature, Prototype Pollution can lead to other kinds of attacks like:
Privilege escalation: By altering properties that control user privileges.
Remote Code Execution: By changing methods or properties related to function execution.
Denial of Service: By overloading methods or properties causing resource exhaustion.
Bypassing security measures: By altering validation or security checks.
For more details on Prototype Pollution see the relevant resources and child pages.