mirror of
				https://github.com/HackTricks-wiki/hacktricks.git
				synced 2025-10-10 18:36:50 +00:00 
			
		
		
		
	Translated ['src/pentesting-web/deserialization/nodejs-proto-prototype-p
This commit is contained in:
		
							parent
							
								
									eb2e43bfcd
								
							
						
					
					
						commit
						7fac557cb9
					
				@ -31,7 +31,7 @@ var employee1 = new Employee("Generic Employee", "Developer")
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
employee1.__proto__
 | 
					employee1.__proto__
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
### Prototipagem em JavaScript
 | 
					### Prototypes em JavaScript
 | 
				
			||||||
 | 
					
 | 
				
			||||||
JavaScript permite a modificação, adição ou exclusão de atributos de protótipo em tempo de execução. Essa flexibilidade possibilita a extensão dinâmica das funcionalidades de classes.
 | 
					JavaScript permite a modificação, adição ou exclusão de atributos de protótipo em tempo de execução. Essa flexibilidade possibilita a extensão dinâmica das funcionalidades de classes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -41,9 +41,9 @@ Funções como `toString` e `valueOf` podem ser alteradas para mudar seu comport
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Na programação baseada em protótipos, propriedades/métodos são herdados por objetos de classes. Essas classes são criadas adicionando propriedades/métodos a uma instância de outra classe ou a um objeto vazio.
 | 
					Na programação baseada em protótipos, propriedades/métodos são herdados por objetos de classes. Essas classes são criadas adicionando propriedades/métodos a uma instância de outra classe ou a um objeto vazio.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Deve-se notar que, quando uma propriedade é adicionada a um objeto que serve como protótipo para outros objetos (como `myPersonObj`), os objetos herdantes ganham acesso a essa nova propriedade. No entanto, essa propriedade não é exibida automaticamente, a menos que seja invocada explicitamente.
 | 
					Deve-se notar que, quando uma propriedade é adicionada a um objeto que serve como protótipo para outros objetos (como `myPersonObj`), os objetos que herdam ganham acesso a essa nova propriedade. No entanto, essa propriedade não é exibida automaticamente, a menos que seja invocada explicitamente.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## \_\_proto\_\_ poluição <a href="#id-0d0a" id="id-0d0a"></a>
 | 
					## \_\_proto\_\_ pollution <a href="#id-0d0a" id="id-0d0a"></a>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Explorando a Poluição de Protótipos em JavaScript
 | 
					## Explorando a Poluição de Protótipos em JavaScript
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -56,7 +56,7 @@ this.model = model
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
var car1 = new Vehicle("Tesla Model S")
 | 
					var car1 = new Vehicle("Tesla Model S")
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
O acesso ao protótipo Object é possível através de:
 | 
					O acesso ao protótipo do Object é possível através de:
 | 
				
			||||||
```javascript
 | 
					```javascript
 | 
				
			||||||
car1.__proto__.__proto__
 | 
					car1.__proto__.__proto__
 | 
				
			||||||
Vehicle.__proto__.__proto__
 | 
					Vehicle.__proto__.__proto__
 | 
				
			||||||
@ -173,7 +173,7 @@ settings[root][ownerDocument][body][innerHTML]="<svg onload=alert(document.domai
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Uma poluição de protótipo ocorre devido a uma falha na aplicação que permite sobrescrever propriedades em `Object.prototype`. Isso significa que, uma vez que a maioria dos objetos deriva suas propriedades de `Object.prototype`
 | 
					Uma poluição de protótipo ocorre devido a uma falha na aplicação que permite sobrescrever propriedades em `Object.prototype`. Isso significa que, uma vez que a maioria dos objetos deriva suas propriedades de `Object.prototype`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
O exemplo mais fácil é adicionar um valor a um **atributo indefinido de um objeto** que será verificado, como:
 | 
					O exemplo mais fácil é adicionar um valor a um **atributo indefinido de um objeto** que vai ser verificado, como:
 | 
				
			||||||
```javascript
 | 
					```javascript
 | 
				
			||||||
if (user.admin) {
 | 
					if (user.admin) {
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
@ -228,9 +228,7 @@ Esta vulnerabilidade, identificada como CVE-2019–11358, ilustra como uma cópi
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
### Outro tutorial com CVEs
 | 
					### Outro tutorial com CVEs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{{#ref}}
 | 
					- [https://infosecwriteups.com/javascript-prototype-pollution-practice-of-finding-and-exploitation-f97284333b2](https://infosecwriteups.com/javascript-prototype-pollution-practice-of-finding-and-exploitation-f97284333b2)
 | 
				
			||||||
https://infosecwriteups.com/javascript-prototype-pollution-practice-of-finding-and-exploitation-f97284333b2
 | 
					 | 
				
			||||||
{{#endref}}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Ferramentas para detectar Poluição de Protótipo
 | 
					### Ferramentas para detectar Poluição de Protótipo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -285,7 +283,7 @@ Este código demonstra como um atacante poderia injetar código arbitrário em u
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
**Referência Externa**: Um problema relacionado à poluição de protótipos foi encontrado na biblioteca 'flat', conforme detalhado aqui: [Issue on GitHub](https://github.com/hughsk/flat/issues/105).
 | 
					**Referência Externa**: Um problema relacionado à poluição de protótipos foi encontrado na biblioteca 'flat', conforme detalhado aqui: [Issue on GitHub](https://github.com/hughsk/flat/issues/105).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**Referência Externa**: [Issue related to prototype pollution in the 'flat' library](https://github.com/hughsk/flat/issues/105)
 | 
					**Referência Externa**: [Issue relacionado à poluição de protótipos na biblioteca 'flat'](https://github.com/hughsk/flat/issues/105)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Exemplo de exploração de poluição de protótipos em Python:
 | 
					Exemplo de exploração de poluição de protótipos em Python:
 | 
				
			||||||
```python
 | 
					```python
 | 
				
			||||||
@ -343,7 +341,7 @@ Para reduzir o risco de poluição de protótipos, as estratégias listadas abai
 | 
				
			|||||||
3. **Funções de Mesclagem Seguras**: O uso inseguro de funções de mesclagem recursivas deve ser evitado.
 | 
					3. **Funções de Mesclagem Seguras**: O uso inseguro de funções de mesclagem recursivas deve ser evitado.
 | 
				
			||||||
4. **Objetos Sem Protótipos**: Objetos sem propriedades de protótipo podem ser criados usando `Object.create(null)`.
 | 
					4. **Objetos Sem Protótipos**: Objetos sem propriedades de protótipo podem ser criados usando `Object.create(null)`.
 | 
				
			||||||
5. **Uso de Map**: Em vez de `Object`, `Map` deve ser usado para armazenar pares chave-valor.
 | 
					5. **Uso de Map**: Em vez de `Object`, `Map` deve ser usado para armazenar pares chave-valor.
 | 
				
			||||||
6. **Atualizações de Biblioteca**: Correções de segurança podem ser incorporadas atualizando regularmente as bibliotecas.
 | 
					6. **Atualizações de Bibliotecas**: Correções de segurança podem ser incorporadas atualizando bibliotecas regularmente.
 | 
				
			||||||
7. **Ferramentas de Linter e Análise Estática**: Use ferramentas como ESLint com plugins apropriados para detectar e prevenir vulnerabilidades de poluição de protótipos.
 | 
					7. **Ferramentas de Linter e Análise Estática**: Use ferramentas como ESLint com plugins apropriados para detectar e prevenir vulnerabilidades de poluição de protótipos.
 | 
				
			||||||
8. **Revisões de Código**: Implemente revisões de código minuciosas para identificar e remediar riscos potenciais relacionados à poluição de protótipos.
 | 
					8. **Revisões de Código**: Implemente revisões de código minuciosas para identificar e remediar riscos potenciais relacionados à poluição de protótipos.
 | 
				
			||||||
9. **Treinamento em Segurança**: Eduque os desenvolvedores sobre os riscos da poluição de protótipos e as melhores práticas para escrever código seguro.
 | 
					9. **Treinamento em Segurança**: Eduque os desenvolvedores sobre os riscos da poluição de protótipos e as melhores práticas para escrever código seguro.
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user