Prototype Pollution

Prototype Pollution

Description

An application object, method or module can be overwritten with malicious logic due to the lack of validations and the nature of the JavaScript language.

Impact

- Overwrite or pollute the behavior of existing methods in the application.
- Lead to dangerous vulnerabilities such as XSS, SQLi, RCE, among others.

Recommendation

- Implement integrity validations on the vulnerable objects.
- Restrict and Discourage the use harmful properties such as _proto_ in the system objects.

Threat

Authenticated attacker from the Internet.

Expected Remediation Time

⌚ 60 minutes.

Score

Default score using CVSS 3.1. It may change depending on the context of the src.

Base

  • Attack vector: N
  • Attack complexity: H
  • Privileges required: L
  • User interaction: N
  • Scope: U
  • Confidentiality: N
  • Integrity: L
  • Availability: N

Temporal

  • Exploit code maturity: P
  • Remediation level: U
  • Report confidence: R

Result

  • Vector string: CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:N/E:P/RL:U/RC:R
  • Score:
    • Base: 3.1
    • Temporal: 2.8
  • Severity:
    • Base: Low
    • Temporal: Low

Score 4.0

Default score using CVSS 4.0. It may change depending on the context of the src.

Base 4.0

  • Attack vector: N
  • Attack complexity: H
  • Attack Requirements: N
  • Privileges required: L
  • User interaction: N
  • Confidentiality (VC): N
  • Integrity (VI): L
  • Availability (VA): N
  • Confidentiality (SC): N
  • Integrity (SI): N
  • Availability (SA): N

Threat 4.0

  • Exploit maturity: P

Result 4.0

  • Vector string: CVSS:4.0/AV:N/AC:H/AT:N/PR:L/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N/E:P
  • Score:
    • CVSS-BT: 1.3
  • Severity:
    • CVSS-BT: Low

Compliant code

There are no harmful functionalities on vulnerable objects

                function modifyPrototype(moduleName, deleteMethod, newMethod) {
  var newMod = new moduleName;

//Add new method to the object, without altering the original newMod.${newMethod} = function() { //Add functionality to object };

return newMod; }

Non compliant code

There are functionalities that can be overwritten due to insecure coding practices

                function modifyPrototype(moduleName, deleteMethod, newMethod) {
  // modifying the prototype of a module from within another function
  var newMod = require(moduleName);
  delete newMod[deleteMethod];
  newMod.${newMethod} = function() {
      // function body that modifies the original method
  };

module.exports = newMod; }

Requirements

Fixes

Free trial message
Free trial
Search for vulnerabilities in your apps for free with Fluid Attacks' automated security testing! Start your 21-day free trial and discover the benefits of the Continuous Hacking Essential plan. If you prefer the Advanced plan, which includes the expertise of Fluid Attacks' hacking team, fill out this contact form.