Reino: Input Validation and Representation
Problemas de validação e representação da entrada são causados por metacaracteres, codificações alternativas e representações numéricas. Confiar na entrada resulta em problemas de segurança. Os problemas incluem: “Buffer Overflows”, ataques de “Cross-Site Scripting”, “SQL Injection”, entre outros.
Prototype Pollution
Abstract
O aplicativo permite que um usuário polua o protótipo.
Explanation
A poluição de protótipo é um ataque que permite que um usuário mal-intencionado substitua o protótipo de um objeto.
Para entender a poluição dos protótipos, você deve primeiro entender a herança dos protótipos. Os protótipos e a cadeia de protótipos são usados como uma pesquisa de propriedades e funções em JavaScript, fornecendo herança. Ao tentar acessar uma propriedade em um determinado objeto, a definição atual do objeto é verificada. Se o objeto atual não definir a propriedade, a classe do protótipo será verificada. Os protótipos são verificados recursivamente até que a propriedade seja encontrada ou não haja mais protótipos definidos.
Como a maioria dos objetos em JavaScript, por padrão, tem um protótipo apontando para
Se o aplicativo (ou qualquer uma de suas dependências) depende do fato de que as propriedades podem ser
A poluição do protótipo pode ocorrer quando:
1. Os dados entram em um programa por uma fonte não confiável.
2. Os dados são passados para uma API que permite sobrescrever o protótipo.
Exemplo 1: O código a seguir usa uma versão vulnerável de
Nesse ponto, se a entrada não confiável for
Considere o código a seguir, que existe mais adiante no aplicativo.
Embora
Infelizmente, como o protótipo foi poluído, o protótipo de
Para entender a poluição dos protótipos, você deve primeiro entender a herança dos protótipos. Os protótipos e a cadeia de protótipos são usados como uma pesquisa de propriedades e funções em JavaScript, fornecendo herança. Ao tentar acessar uma propriedade em um determinado objeto, a definição atual do objeto é verificada. Se o objeto atual não definir a propriedade, a classe do protótipo será verificada. Os protótipos são verificados recursivamente até que a propriedade seja encontrada ou não haja mais protótipos definidos.
Como a maioria dos objetos em JavaScript, por padrão, tem um protótipo apontando para
Object.prototype
, se um invasor puder sobrescrever o protótipo de um objeto, ele normalmente poderá sobrescrever a definição de Object.prototype
, afetando todos os objetos dentro do aplicativo.Se o aplicativo (ou qualquer uma de suas dependências) depende do fato de que as propriedades podem ser
undefined
em vez de sempre serem explicitamente definidas, então se o protótipo foi poluído, o aplicativo poderá ler inadvertidamente o protótipo em vez do objeto pretendido.A poluição do protótipo pode ocorrer quando:
1. Os dados entram em um programa por uma fonte não confiável.
2. Os dados são passados para uma API que permite sobrescrever o protótipo.
Exemplo 1: O código a seguir usa uma versão vulnerável de
lodash
para poluir o protótipo do objeto:
import * as lodash from 'lodash'
...
let clonedObject = lodash.merge({}, JSON.parse(untrustedInput));
...
Nesse ponto, se a entrada não confiável for
{"__proto__": { "isAdmin": true}}
, então Object.prototype
terá definido isAdmin = true
.Considere o código a seguir, que existe mais adiante no aplicativo.
...
let config = {}
if (isAuthorizedAsAdmin()){
config.isAdmin = true;
}
...
if (config.isAdmin) {
// do something as the admin
}
...
Embora
isAdmin
só deve ser definido como verdadeiro se isAuthorizedAdmin()
retorna verdadeiro, porque o aplicativo não consegue definir config.isAdmin = false
na outra condição, ele se baseia no fato de que config.isAdmin === undefined === false
.Infelizmente, como o protótipo foi poluído, o protótipo de
config
agora foi definido isAdmin === true
, que permite que a autorização do administrador seja ignorada.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