Translated ['src/pentesting-web/deserialization/nodejs-proto-prototype-p

This commit is contained in:
Translator 2025-08-19 22:04:32 +00:00
parent 9a8fe31b00
commit 6d9097611d

View File

@ -43,9 +43,9 @@ Nella programmazione basata su prototipi, le proprietà/metodi sono ereditati da
Va notato che quando una proprietà viene aggiunta a un oggetto che funge da prototipo per altri oggetti (come `myPersonObj`), gli oggetti ereditanti ottengono accesso a questa nuova proprietà. Tuttavia, questa proprietà non viene visualizzata automaticamente a meno che non venga esplicitamente invocata.
## \_\_proto\_\_ pollution <a href="#id-0d0a" id="id-0d0a"></a>
## \_\_proto\_\_ inquinamento <a href="#id-0d0a" id="id-0d0a"></a>
## Esplorare la Pollution del Prototipo in JavaScript
## Esplorare l'inquinamento del prototipo in JavaScript
Gli oggetti JavaScript sono definiti da coppie chiave-valore e ereditano dal prototipo dell'oggetto JavaScript. Ciò significa che alterare il prototipo dell'oggetto può influenzare tutti gli oggetti nell'ambiente.
@ -154,7 +154,7 @@ b[0] //undefined
b[1] //"yolo"
c[1] // 2 -- not
```
### Inquinamento degli elementi Html
### Html elements pollution
Quando si genera un elemento HTML tramite JS, è possibile **sovrascrivere** l'attributo **`innerHTML`** per farlo scrivere **codice HTML arbitrario.** [Idea e esempio da questo writeup](https://blog.huli.tw/2022/04/25/en/intigriti-0422-xss-challenge-author-writeup/).
```javascript
@ -171,7 +171,7 @@ settings[root][ownerDocument][body][innerHTML]="<svg onload=alert(document.domai
### Esempio di base
Una contaminazione del prototipo si verifica a causa di un difetto nell'applicazione che consente di sovrascrivere le proprietà su `Object.prototype`. Ciò significa che poiché la maggior parte degli oggetti deriva le proprie proprietà da `Object.prototype`
Una contaminazione del prototipo si verifica a causa di un difetto nell'applicazione che consente di sovrascrivere le proprietà su `Object.prototype`. Questo significa che poiché la maggior parte degli oggetti deriva le proprie proprietà da `Object.prototype`
L'esempio più semplice è aggiungere un valore a un **attributo indefinito di un oggetto** che verrà controllato, come:
```javascript
@ -191,7 +191,7 @@ Le condizioni sotto le quali questo attacco può essere eseguito con successo, c
- Definire proprietà basate su un percorso.
- Clonare oggetti.
### Funzione di override
### Override function
```python
customer.__proto__.toString = ()=>{alert("polluted")}
```
@ -213,12 +213,12 @@ client-side-prototype-pollution.md
### CVE-201911358: Attacco di inquinamento del prototipo tramite jQuery $ .extend
[Per ulteriori dettagli controlla questo articolo](https://itnext.io/prototype-pollution-attack-on-nodejs-applications-94a8582373e7) In jQuery, la funzione `$ .extend` può portare a inquinamento del prototipo se la funzionalità di copia profonda viene utilizzata in modo improprio. Questa funzione è comunemente usata per clonare oggetti o unire proprietà da un oggetto predefinito. Tuttavia, quando è configurata in modo errato, le proprietà destinate a un nuovo oggetto possono essere assegnate al prototipo invece. Ad esempio:
[Per ulteriori dettagli controlla questo articolo](https://itnext.io/prototype-pollution-attack-on-nodejs-applications-94a8582373e7) In jQuery, la funzione `$ .extend` può portare a inquinamento del prototipo se la funzione di copia profonda viene utilizzata in modo improprio. Questa funzione è comunemente usata per clonare oggetti o unire proprietà da un oggetto predefinito. Tuttavia, quando è configurata in modo errato, le proprietà destinate a un nuovo oggetto possono essere assegnate al prototipo invece. Ad esempio:
```javascript
$.extend(true, {}, JSON.parse('{"__proto__": {"devMode": true}}'))
console.log({}.devMode) // Outputs: true
```
Questa vulnerabilità, identificata come CVE-201911358, illustra come una copia profonda possa modificare involontariamente il prototipo, portando a potenziali rischi per la sicurezza, come l'accesso non autorizzato come admin se proprietà come `isAdmin` vengono controllate senza una corretta verifica di esistenza.
Questa vulnerabilità, identificata come CVE-201911358, illustra come una copia profonda possa modificare involontariamente il prototipo, portando a potenziali rischi per la sicurezza, come l'accesso non autorizzato da parte di un amministratore se proprietà come `isAdmin` vengono controllate senza una corretta verifica di esistenza.
### CVE-20183721, CVE-201910744: attacco di inquinamento del prototipo tramite lodash
@ -228,9 +228,9 @@ Questa vulnerabilità, identificata come CVE-201911358, illustra come una cop
### Un altro tutorial con CVE
{{#ref}}
https://infosecwriteups.com/javascript-prototype-pollution-practice-of-finding-and-exploitation-f97284333b2
{{#endref}}
- [https://infosecwriteups.com/javascript-prototype-pollution-practice-of-finding-and-exploitation-f97284333b2](https://infosecwriteups.com/javascript-prototype-pollution-practice-of-finding-and-exploitation-f97284333b2)
### Strumenti per rilevare l'inquinamento del prototipo
@ -243,7 +243,7 @@ NodeJS utilizza ampiamente gli Abstract Syntax Trees (AST) in JavaScript per fun
#### Analisi della vulnerabilità di Handlebars
Il motore di template Handlebars è suscettibile a un attacco di inquinamento del prototipo. Questa vulnerabilità deriva da specifiche funzioni all'interno del file `javascript-compiler.js`. La funzione `appendContent`, ad esempio, concatena `pendingContent` se è presente, mentre la funzione `pushSource` reimposta `pendingContent` su `undefined` dopo aver aggiunto la sorgente.
Il motore di template Handlebars è suscettibile a un attacco di inquinamento del prototipo. Questa vulnerabilità deriva da specifiche funzioni all'interno del file `javascript-compiler.js`. La funzione `appendContent`, ad esempio, concatena `pendingContent` se è presente, mentre la funzione `pushSource` reimposta `pendingContent` a `undefined` dopo aver aggiunto la sorgente.
**Processo di sfruttamento**
@ -251,7 +251,7 @@ Lo sfruttamento si basa sull'AST (Abstract Syntax Tree) prodotto da Handlebars,
1. **Manipolazione del Parser**: Inizialmente, il parser, tramite il nodo `NumberLiteral`, impone che i valori siano numerici. L'inquinamento del prototipo può eludere questo, consentendo l'inserimento di stringhe non numeriche.
2. **Gestione da parte del Compilatore**: Il compilatore può elaborare un oggetto AST o un template string. Se `input.type` è uguale a `Program`, l'input viene trattato come pre-parsato, il che può essere sfruttato.
3. **Iniezione di Codice**: Attraverso la manipolazione di `Object.prototype`, è possibile iniettare codice arbitrario nella funzione template, il che può portare all'esecuzione remota di codice.
3. **Iniezione di Codice**: Attraverso la manipolazione di `Object.prototype`, è possibile iniettare codice arbitrario nella funzione template, il che può portare all'esecuzione di codice remoto.
Un esempio che dimostra lo sfruttamento della vulnerabilità di Handlebars:
```javascript