Reino: Input Validation and Representation
Los problemas de validación y representación de entradas están causados por metacaracteres, codificaciones alternativas y representaciones numéricas. Los problemas de seguridad surgen de entradas en las que se confía. Estos problemas incluyen: «desbordamientos de búfer», ataques de «scripts de sitios», "SQL injection" y muchas otras acciones.
Prototype Pollution
Abstract
La aplicación permite al usuario contaminar el prototipo.
Explanation
La contaminación de prototipos es un ataque que permite a un usuario malintencionado sobrescribir el prototipo de un objeto.
Para comprender la contaminación de prototipos, primero se debe comprender la herencia de los prototipos. Los prototipos y la cadena de prototipos se utilizan como búsqueda de propiedades y funciones en JavaScript, lo que proporciona la herencia. Al intentar acceder a una propiedad en un objeto determinado, se verifica la definición del objeto actual. Si el objeto actual no define la propiedad, se verifica la clase de prototipo. Los prototipos se verifican de forma recursiva hasta que se encuentra la propiedad o no hay más prototipos establecidos.
Debido a que la mayoría de los objetos en JavaScript tienen de forma predeterminada un prototipo que apunta a
En el caso de que la aplicación (o cualquiera de sus dependencias) se base en el hecho de que las propiedades puedan ser
La contaminación de prototipos puede ocurrir cuando:
1. Los datos se introducen en un programa desde un origen que no es de confianza.
2. Los datos pasan a una API que permite sobrescribir el prototipo.
Ejemplo 1: El siguiente código utiliza una versión vulnerable de
En este punto, si la entrada que no es de confianza es
Considere el siguiente código que existe más adelante en la aplicación.
Aunque
Desafortunadamente, como el prototipo ha sido contaminado, el prototipo de
Para comprender la contaminación de prototipos, primero se debe comprender la herencia de los prototipos. Los prototipos y la cadena de prototipos se utilizan como búsqueda de propiedades y funciones en JavaScript, lo que proporciona la herencia. Al intentar acceder a una propiedad en un objeto determinado, se verifica la definición del objeto actual. Si el objeto actual no define la propiedad, se verifica la clase de prototipo. Los prototipos se verifican de forma recursiva hasta que se encuentra la propiedad o no hay más prototipos establecidos.
Debido a que la mayoría de los objetos en JavaScript tienen de forma predeterminada un prototipo que apunta a
Object.prototype
, si un atacante puede sobrescribir el prototipo de un objeto, normalmente puede sobrescribir la definición de Object.prototype
, lo que afecta a todos los objetos dentro de la aplicación.En el caso de que la aplicación (o cualquiera de sus dependencias) se base en el hecho de que las propiedades puedan ser
undefined
en lugar de establecerse siempre explícitamente, si el prototipo ha sido contaminado, la aplicación podría leer inadvertidamente el prototipo en lugar del objeto previsto.La contaminación de prototipos puede ocurrir cuando:
1. Los datos se introducen en un programa desde un origen que no es de confianza.
2. Los datos pasan a una API que permite sobrescribir el prototipo.
Ejemplo 1: El siguiente código utiliza una versión vulnerable de
lodash
para contaminar el prototipo del objeto:
import * as lodash from 'lodash'
...
let clonedObject = lodash.merge({}, JSON.parse(untrustedInput));
...
En este punto, si la entrada que no es de confianza es
{"__proto__": { "isAdmin": true}}
, entonces Object.prototype
habrá definido isAdmin = true
.Considere el siguiente código que existe más adelante en la aplicación.
...
let config = {}
if (isAuthorizedAsAdmin()){
config.isAdmin = true;
}
...
if (config.isAdmin) {
// do something as the admin
}
...
Aunque
isAdmin
solo debe establecerse en verdadero si isAuthorizedAdmin()
devuelve verdadero, como la aplicación no establece config.isAdmin = false
en la condición else, se basa en el hecho de que config.isAdmin === undefined === false
.Desafortunadamente, como el prototipo ha sido contaminado, el prototipo de
config
ahora se ha configurado en isAdmin === true
, que permite eludir la autorización del administrador.References
[1] Olivier Arteau Prototype pollution attack.
[2] Open Web Application Security Project (OWASP) Prototype Pollution Prevention Cheat Sheet
[3] Standards Mapping - Common Weakness Enumeration CWE ID 1321
[4] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002754
[5] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-2 Application Partitioning (P1), SI-10 Information Input Validation (P1)
[7] Standards Mapping - NIST Special Publication 800-53 Revision 5 SC-2 Separation of System and User Functionality, SI-10 Information Input Validation
[8] Standards Mapping - OWASP API 2023 API3 Broken Object Property Level Authorization
[9] Standards Mapping - OWASP Application Security Verification Standard 4.0 1.5.2 Input and Output Architectural Requirements (L2 L3), 5.1.2 Input Validation Requirements (L1 L2 L3)
[10] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[11] Standards Mapping - OWASP Top 10 2017 A5 Broken Access Control
[12] Standards Mapping - OWASP Top 10 2021 A08 Software and Data Integrity Failures
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[16] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 5.4 - Authentication and Access Control
[17] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 5.4 - Authentication and Access Control
[18] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002150 CAT II, APSC-DV-002530 CAT II, APSC-DV-002560 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002150 CAT II, APSC-DV-002530 CAT II, APSC-DV-002560 CAT I
desc.dataflow.javascript.prototype_pollution