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 6de0ad3c1..b9bbc8003 100644
--- a/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/README.md
+++ b/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/README.md
@@ -1,10 +1,10 @@
-# NodeJS - \_\_proto\_\_ i zagađenje prototipa
+# NodeJS - \_\_proto\_\_ & prototype Pollution
{{#include ../../../banners/hacktricks-training.md}}
## Objekti u JavaScript-u
-Objekti u JavaScript-u su suštinski kolekcije parova ključ-vrednost, poznate kao svojstva. Objekat se može kreirati koristeći `Object.create` sa `null` kao argumentom da bi se proizveo prazan objekat. Ova metoda omogućava kreiranje objekta bez nasleđenih svojstava.
+Objekti u JavaScript-u su suštinski kolekcije parova ključ-vrednost, poznatih kao svojstva. Objekat se može kreirati koristeći `Object.create` sa `null` kao argumentom da bi se proizveo prazan objekat. Ova metoda omogućava kreiranje objekta bez nasleđenih svojstava.
```javascript
// Run this in the developers tools console
console.log(Object.create(null)) // This will output an empty object.
@@ -13,7 +13,7 @@ Prazan objekat je sličan praznom rečniku, predstavljen kao `{}`.
### Funkcije i klase u JavaScript-u
-U JavaScript-u, klase i funkcije su usko povezane, pri čemu funkcije često služe kao konstruktori za klase. I pored toga što JavaScript nema podršku za klase, konstruktori mogu emulirati ponašanje klasa.
+U JavaScript-u, klase i funkcije su usko povezane, pri čemu funkcije često služe kao konstruktori za klase. I pored nedostatka podrške za klase u JavaScript-u, konstruktori mogu emulirati ponašanje klasa.
```javascript
// Run this in the developers tools console
@@ -41,7 +41,7 @@ Funkcije kao što su `toString` i `valueOf` mogu se menjati kako bi se promenilo
U programiranju zasnovanom na prototipovima, svojstva/metode se nasleđuju od objekata iz klasa. Ove klase se kreiraju dodavanjem svojstava/metoda ili instanci druge klase ili praznom objektu.
-Treba napomenuti da kada se svojstvo doda objektu koji služi kao prototip za druge objekte (kao što je `myPersonObj`), nasleđujući objekti dobijaju pristup ovom novom svojstvu. Međutim, ovo svojstvo se ne prikazuje automatski osim ako nije eksplicitno pozvano.
+Treba napomenuti da kada se svojstvo doda objektu koji služi kao prototip za druge objekte (kao što je `myPersonObj`), nasleđeni objekti dobijaju pristup ovom novom svojstvu. Međutim, ovo svojstvo se ne prikazuje automatski osim ako nije eksplicitno pozvano.
## \_\_proto\_\_ pollution
@@ -61,7 +61,7 @@ Pristup Object prototipu je moguć kroz:
car1.__proto__.__proto__
Vehicle.__proto__.__proto__
```
-Dodavanjem svojstava prototipu objekta, svaki JavaScript objekat će naslediti ova nova svojstva:
+Dodavanjem svojstava u Object prototip, svaki JavaScript objekat će naslediti ova nova svojstva:
```javascript
function Vehicle(model) {
this.model = model
@@ -115,13 +115,13 @@ example.constructor.prototype.greet = function () {
console.log("Hello!")
}
```
-После ових операција, сваки JavaScript објекат може да изврши `goodbye` и `greet` методе.
+Nakon ovih operacija, svaki JavaScript objekat može izvršiti `goodbye` i `greet` metode.
-## Контаминирање других објеката
+## Zagađivanje drugih objekata
-### Из класе у Object.prototype
+### Iz klase u Object.prototype
-У сценарију где можете **контаминирати одређени објекат** и потребно вам је да **досегнете `Object.prototype`**, можете га потражити са нечим попут следећег кода:
+U scenariju gde možete **zagađivati određeni objekat** i potrebno je da **dođete do `Object.prototype`**, možete ga potražiti sa nečim poput sledećeg koda:
```javascript
// From https://blog.huli.tw/2022/05/02/en/intigriti-revenge-challenge-author-writeup/
@@ -144,7 +144,7 @@ console.log(key1 + "." + key2)
```
### Zagađenje elemenata niza
-Imajte na umu da, kao što možete zagađivati atribute objekata u JS-u, ako imate pristup da zagađujete niz, možete takođe **zagađivati vrednosti niza** dostupne **preko indeksa** (imajte na umu da ne možete prepisivati vrednosti, tako da morate zagađivati indekse koji se na neki način koriste, ali se ne pišu).
+Napomena: pošto možete zagađivati atribute objekata u JS-u, ako imate pristup da zagađujete niz, možete takođe **zagađivati vrednosti niza** dostupne **preko indeksa** (napomena: ne možete prepisivati vrednosti, tako da treba da zagađujete indekse koji se na neki način koriste, ali ne pišu).
```javascript
c = [1, 2]
a = []
@@ -154,9 +154,9 @@ b[0] //undefined
b[1] //"yolo"
c[1] // 2 -- not
```
-### Zagađenje HTML elemenata
+### Html elements pollution
-Kada se generiše HTML element putem JS-a, moguće je **prepisati** **`innerHTML`** atribut kako bi se napisao **arbitrarni HTML kod.** [Ideja i primer iz ovog članka](https://blog.huli.tw/2022/04/25/en/intigriti-0422-xss-challenge-author-writeup/).
+Kada se generiše HTML element putem JS-a, moguće je **prepisati** **`innerHTML`** atribut kako bi se napisao **arbitrarni HTML kod.** [Idea and example from this writeup](https://blog.huli.tw/2022/04/25/en/intigriti-0422-xss-challenge-author-writeup/).
```javascript
// Create element
devSettings["root"] = document.createElement('main')
@@ -228,13 +228,11 @@ Ova ranjivost, identifikovana kao CVE-2019–11358, ilustruje kako duboka kopija
### Još jedan tutorijal sa CVE-ima
-{{#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)
### Alati za otkrivanje zagađenja prototipa
-- [**Server-Side-Prototype-Pollution-Gadgets-Scanner**](https://github.com/doyensec/Server-Side-Prototype-Pollution-Gadgets-Scanner): Ekstenzija za Burp Suite dizajnirana za otkrivanje i analizu ranjivosti zagađenja prototipa na serverskoj strani u web aplikacijama. Ovaj alat automatizuje proces skeniranja zahteva kako bi identifikovao potencijalne probleme zagađenja prototipa. Iskorišćava poznate gadgete - metode korišćenja zagađenja prototipa za izvršavanje štetnih radnji - posebno se fokusirajući na Node.js biblioteke.
+- [**Server-Side-Prototype-Pollution-Gadgets-Scanner**](https://github.com/doyensec/Server-Side-Prototype-Pollution-Gadgets-Scanner): Ekstenzija za Burp Suite dizajnirana za otkrivanje i analizu ranjivosti zagađenja prototipa na serverskoj strani u web aplikacijama. Ovaj alat automatizuje proces skeniranja zahteva kako bi identifikovao potencijalne probleme sa zagađenjem prototipa. Iskorišćava poznate gadgete - metode korišćenja zagađenja prototipa za izvršavanje štetnih radnji - posebno se fokusirajući na Node.js biblioteke.
- [**server-side-prototype-pollution**](https://github.com/portswigger/server-side-prototype-pollution): Ova ekstenzija identifikuje ranjivosti zagađenja prototipa na serverskoj strani. Koristi tehnike opisane u [zagađenju prototipa na serverskoj strani](https://portswigger.net/research/server-side-prototype-pollution).
### AST zagađenje prototipa u NodeJS
@@ -243,7 +241,7 @@ NodeJS široko koristi Apstraktna Sintaktička Stabla (AST) u JavaScript-u za fu
#### Analiza ranjivosti Handlebars
-Engine za šablone Handlebars je podložan napadu zagađenja prototipa. Ova ranjivost proizašla je iz specifičnih funkcija unutar datoteke `javascript-compiler.js`. Funkcija `appendContent`, na primer, konkatenira `pendingContent` ako je prisutan, dok funkcija `pushSource` resetuje `pendingContent` na `undefined` nakon dodavanja izvora.
+Engine za šablone Handlebars je podložan napadu zagađenja prototipa. Ova ranjivost proističe iz specifičnih funkcija unutar datoteke `javascript-compiler.js`. Funkcija `appendContent`, na primer, konkatenira `pendingContent` ako je prisutan, dok funkcija `pushSource` resetuje `pendingContent` na `undefined` nakon dodavanja izvora.
**Proces eksploatacije**
@@ -253,7 +251,7 @@ Eksploatacija koristi AST (Apstraktno Sintaktičko Stablo) koje proizvodi Handle
2. **Obrada od strane Kompajlera**: Kompajler može obraditi AST objekat ili string šablon. Ako `input.type` jednako `Program`, ulaz se tretira kao prethodno analiziran, što se može iskoristiti.
3. **Umetanje Koda**: Kroz manipulaciju `Object.prototype`, može se umetnuti proizvoljan kod u funkciju šablona, što može dovesti do daljinskog izvršavanja koda.
-Primer koji demonstrira eksploataciju ranjivosti Handlebars:
+Primer koji ilustruje eksploataciju ranjivosti Handlebars:
```javascript
const Handlebars = require("handlebars")
@@ -283,9 +281,9 @@ console.log(eval("(" + template + ")")["main"].toString())
```
Ovaj kod prikazuje kako napadač može ubrizgati proizvoljan kod u Handlebars šablon.
-**Spoljašnja referenca**: Problem vezan za zagađenje prototipa pronađen je u 'flat' biblioteci, kako je detaljno opisano ovde: [Issue on GitHub](https://github.com/hughsk/flat/issues/105).
+**Spoljašnja Referenca**: Problem vezan za zagađenje prototipa pronađen je u 'flat' biblioteci, kako je detaljno opisano ovde: [Issue on GitHub](https://github.com/hughsk/flat/issues/105).
-**Spoljašnja referenca**: [Issue related to prototype pollution in the 'flat' library](https://github.com/hughsk/flat/issues/105)
+**Spoljašnja Referenca**: [Issue related to prototype pollution in the 'flat' library](https://github.com/hughsk/flat/issues/105)
Primer eksploatacije zagađenja prototipa u Python-u:
```python
@@ -336,19 +334,19 @@ requests.get(TARGET_URL)
```
### Preventivne Mere
-Da se smanji rizik od zagađenja prototipa, mogu se primeniti sledeće strategije:
+Da bi se smanjio rizik od zagađenja prototipa, mogu se primeniti sledeće strategije:
1. **Imutabilnost objekta**: `Object.prototype` se može učiniti imutabilnim primenom `Object.freeze`.
2. **Validacija ulaza**: JSON ulazi treba rigorozno validirati prema šemi aplikacije.
-3. **Sigurne funkcije spajanja**: Treba izbegavati nesigurno korišćenje rekurzivnih funkcija spajanja.
-4. **Objekti bez prototipa**: Objekti bez svojstava prototipa mogu se kreirati korišćenjem `Object.create(null)`.
+3. **Sigurne funkcije spajanja**: Treba izbegavati nesigurnu upotrebu rekurzivnih funkcija spajanja.
+4. **Objekti bez prototipa**: Objekti bez svojstava prototipa mogu se kreirati koristeći `Object.create(null)`.
5. **Korišćenje Map**: Umesto `Object`, treba koristiti `Map` za čuvanje parova ključ-vrednost.
6. **Ažuriranje biblioteka**: Sigurnosne zakrpe mogu se uključiti redovnim ažuriranjem biblioteka.
-7. **Linter i alati za statičku analizu**: Koristite alate poput ESLint-a sa odgovarajućim dodacima za otkrivanje i sprečavanje ranjivosti na zagađenje prototipa.
+7. **Linter i alati za statičku analizu**: Koristite alate poput ESLint-a sa odgovarajućim plugin-ovima za otkrivanje i sprečavanje ranjivosti na zagađenje prototipa.
8. **Revizije koda**: Implementirati temeljne revizije koda kako bi se identifikovali i otklonili potencijalni rizici vezani za zagađenje prototipa.
9. **Obuka o bezbednosti**: Obrazovati programere o rizicima zagađenja prototipa i najboljim praksama za pisanje sigurnog koda.
-10. **Korišćenje biblioteka sa oprezom**: Budite oprezni prilikom korišćenja biblioteka trećih strana. Procijenite njihovu sigurnosnu poziciju i pregledajte njihov kod, posebno one koji manipulišu objektima.
-11. **Zaštita u vreme izvođenja**: Primena mehanizama zaštite u vreme izvođenja kao što su korišćenje npm paketa fokusiranih na bezbednost koji mogu otkriti i sprečiti napade zagađenja prototipa.
+10. **Korišćenje biblioteka sa oprezom**: Budite oprezni prilikom korišćenja biblioteka trećih strana. Procijenite njihov sigurnosni položaj i pregledajte njihov kod, posebno onih koji manipulišu objektima.
+11. **Zaštita u vreme izvođenja**: Primena mehanizama zaštite u vreme izvođenja, kao što su korišćenje npm paketa fokusiranih na bezbednost koji mogu otkriti i sprečiti napade zagađenja prototipa.
## Reference