diff --git a/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/README.md b/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/README.md index 9b0f183c6..b72d3cc8e 100644 --- a/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/README.md +++ b/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/README.md @@ -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 +## \_\_proto\_\_ inquinamento -## 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]="{alert("polluted")} ``` @@ -213,12 +213,12 @@ client-side-prototype-pollution.md ### CVE-2019–11358: 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-2019–11358, 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-2019–11358, 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-2018–3721, CVE-2019–10744: attacco di inquinamento del prototipo tramite lodash @@ -228,9 +228,9 @@ Questa vulnerabilità, identificata come CVE-2019–11358, 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