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

This commit is contained in:
Translator 2025-08-19 22:04:41 +00:00
parent 0cd9e4bba2
commit 5733981395

View File

@ -31,21 +31,21 @@ var employee1 = new Employee("Generic Employee", "Developer")
employee1.__proto__
```
### Πρωτότυπα στην JavaScript
### Prototypes in JavaScript
Η JavaScript επιτρέπει την τροποποίηση, προσθήκη ή διαγραφή χαρακτηριστικών πρωτοτύπου κατά την εκτέλεση. Αυτή η ευελιξία επιτρέπει τη δυναμική επέκταση των λειτουργιών της κλάσης.
Συναρτήσεις όπως `toString` και `valueOf` μπορούν να τροποποιηθούν για να αλλάξουν τη συμπεριφορά τους, αποδεικνύοντας τη προσαρμοστική φύση του συστήματος πρωτοτύπων της JavaScript.
## Κληρονομικότητα
## Inheritance
Στον προγραμματισμό με βάση τα πρωτότυπα, οι ιδιότητες/μέθοδοι κληρονομούνται από αντικείμενα από κλάσεις. Αυτές οι κλάσεις δημιουργούνται προσθέτοντας ιδιότητες/μεθόδους είτε σε μια παρουσία άλλης κλάσης είτε σε ένα κενό αντικείμενο.
Πρέπει να σημειωθεί ότι όταν μια ιδιότητα προστεθεί σε ένα αντικείμενο που χρησιμεύει ως το πρωτότυπο για άλλα αντικείμενα (όπως το `myPersonObj`), τα κληρονομικά αντικείμενα αποκτούν πρόσβαση σε αυτή τη νέα ιδιότητα. Ωστόσο, αυτή η ιδιότητα δεν εμφανίζεται αυτόματα εκτός αν προσκληθεί ρητά.
Πρέπει να σημειωθεί ότι όταν μια ιδιότητα προστεθεί σε ένα αντικείμενο που χρησιμεύει ως το πρωτότυπο για άλλα αντικείμενα (όπως το `myPersonObj`), τα κληρονομικά αντικείμενα αποκτούν πρόσβαση σε αυτή τη νέα ιδιότητα. Ωστόσο, αυτή η ιδιότητα δεν εμφανίζεται αυτόματα εκτός αν κληθεί ρητά.
## \_\_proto\_\_ pollution <a href="#id-0d0a" id="id-0d0a"></a>
## Εξερεύνηση της Ρύπανσης Πρωτοτύπων στην JavaScript
## Exploring Prototype Pollution in JavaScript
Τα αντικείμενα JavaScript ορίζονται από ζεύγη κλειδιού-τιμής και κληρονομούν από το πρωτότυπο του αντικειμένου JavaScript. Αυτό σημαίνει ότι η τροποποίηση του πρωτοτύπου του αντικειμένου μπορεί να επηρεάσει όλα τα αντικείμενα στο περιβάλλον.
@ -76,7 +76,7 @@ car1.announce() // Outputs "Beep beep!"
car1.__proto__.__proto__.isVehicle = true
console.log(car1.isVehicle) // Outputs true
```
## μόλυνση πρωτοτύπου
## prototype pollution
Για ένα σενάριο όπου η χρήση του `__proto__` είναι περιορισμένη, η τροποποίηση του πρωτοτύπου μιας συνάρτησης είναι μια εναλλακτική:
```javascript
@ -117,11 +117,11 @@ console.log("Hello!")
```
Μετά από αυτές τις λειτουργίες, κάθε αντικείμενο JavaScript μπορεί να εκτελέσει τις μεθόδους `goodbye` και `greet`.
## Μολύνοντας άλλα αντικείμενα
## Μόλυνση άλλων αντικειμένων
### Από μια κλάση στο Object.prototype
Σε ένα σενάριο όπου μπορείτε να **μολύνετε ένα συγκεκριμένο αντικείμενο** και χρειάζεστε να **φτάσετε στο `Object.prototype`** μπορείτε να το αναζητήσετε με κάτι σαν τον παρακάτω κώδικα:
Σε ένα σενάριο όπου μπορείτε να **μολύνετε ένα συγκεκριμένο αντικείμενο** και χρειάζεστε να **φτάσετε στο `Object.prototype`**, μπορείτε να το αναζητήσετε με κάτι σαν τον παρακάτω κώδικα:
```javascript
// From https://blog.huli.tw/2022/05/02/en/intigriti-revenge-challenge-author-writeup/
@ -144,7 +144,7 @@ console.log(key1 + "." + key2)
```
### Ρύπανση στοιχείων πίνακα
Σημειώστε ότι καθώς μπορείτε να ρυπαίνετε τις ιδιότητες των αντικειμένων σε JS, αν έχετε πρόσβαση για να ρυπάτε έναν πίνακα μπορείτε επίσης να **ρυπάτε τις τιμές του πίνακα** που είναι προσβάσιμες **μέσω δεικτών** (σημειώστε ότι δεν μπορείτε να αντικαταστήσετε τιμές, οπότε πρέπει να ρυπάτε δείκτες που χρησιμοποιούνται με κάποιον τρόπο αλλά δεν γράφονται).
Σημειώστε ότι καθώς μπορείτε να ρυπάνετε τις ιδιότητες αντικειμένων σε JS, αν έχετε πρόσβαση για να ρυπάνετε έναν πίνακα μπορείτε επίσης να **ρυπάνετε τις τιμές του πίνακα** που είναι προσβάσιμες **μέσω δεικτών** (σημειώστε ότι δεν μπορείτε να αντικαταστήσετε τιμές, οπότε πρέπει να ρυπάνετε δείκτες που χρησιμοποιούνται με κάποιον τρόπο αλλά δεν γράφονται).
```javascript
c = [1, 2]
a = []
@ -154,9 +154,9 @@ b[0] //undefined
b[1] //"yolo"
c[1] // 2 -- not
```
### Ρύπανση στοιχείων Html
### Html elements pollution
Όταν δημιουργείτε ένα στοιχείο HTML μέσω JS, είναι δυνατόν να **επικαλύψετε** την **`innerHTML`** ιδιότητα για να το κάνετε να γράφει **τυχαίο κώδικα HTML.** [Ιδέα και παράδειγμα από αυτή την αναφορά](https://blog.huli.tw/2022/04/25/en/intigriti-0422-xss-challenge-author-writeup/).
Όταν δημιουργείτε ένα HTML στοιχείο μέσω JS, είναι δυνατόν να **επικαλύψετε** την **`innerHTML`** ιδιότητα για να το κάνετε να γράφει **τυχαίο HTML κώδικα.** [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')
@ -201,7 +201,7 @@ customer.__proto__.toString = ()=>{alert("polluted")}
prototype-pollution-to-rce.md
{{#endref}}
Άλλα payloads:
Άλλες payloads:
- [https://github.com/KTH-LangSec/server-side-prototype-pollution](https://github.com/KTH-LangSec/server-side-prototype-pollution)
@ -228,14 +228,12 @@ console.log({}.devMode) // Outputs: true
### Ένα άλλο σεμινάριο με CVEs
{{#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)
### Εργαλεία για την ανίχνευση μόλυνσης πρωτοτύπου
- [**Server-Side-Prototype-Pollution-Gadgets-Scanner**](https://github.com/doyensec/Server-Side-Prototype-Pollution-Gadgets-Scanner): Επέκταση του Burp Suite σχεδιασμένη για την ανίχνευση και ανάλυση ευπαθειών μόλυνσης πρωτοτύπου στον διακομιστή σε διαδικτυακές εφαρμογές. Αυτό το εργαλείο αυτοματοποιεί τη διαδικασία σάρωσης αιτημάτων για την αναγνώριση πιθανών ζητημάτων μόλυνσης πρωτοτύπου. Εκμεταλλεύεται γνωστά gadgets - μεθόδους εκμετάλλευσης της μόλυνσης πρωτοτύπου για την εκτέλεση επιβλαβών ενεργειών - εστιάζοντας ιδιαίτερα σε βιβλιοθήκες Node.js.
- [**server-side-prototype-pollution**](https://github.com/portswigger/server-side-prototype-pollution): Αυτή η επέκταση εντοπίζει ευπάθειες μόλυνσης πρωτοτύπου στον διακομιστή. Χρησιμοποιεί τεχνικές που περιγράφονται στην [μόλυνση πρωτοτύπου στον διακομιστή](https://portswigger.net/research/server-side-prototype-pollution).
- [**server-side-prototype-pollution**](https://github.com/portswigger/server-side-prototype-pollution): Αυτή η επέκταση αναγνωρίζει ευπάθειες μόλυνσης πρωτοτύπου στον διακομιστή. Χρησιμοποιεί τεχνικές που περιγράφονται στην [μόλυνση πρωτοτύπου στον διακομιστή](https://portswigger.net/research/server-side-prototype-pollution).
### AST Prototype Pollution στο NodeJS
@ -313,11 +311,11 @@ requests.post(TARGET_URL + '/vulnerable', json = {
# execute
requests.get(TARGET_URL)
```
#### Ευπάθεια Pug
#### Pug Vulnerability
Το Pug, μια άλλη μηχανή προτύπων, αντιμετωπίζει παρόμοιο κίνδυνο μόλυνσης πρωτοτύπου. Λεπτομερείς πληροφορίες είναι διαθέσιμες στη συζήτηση για [AST Injection in Pug](https://blog.p6.is/AST-Injection/#Pug).
Το Pug, μια άλλη μηχανή προτύπων, αντιμετωπίζει παρόμοιο κίνδυνο μόλυνσης πρωτοτύπων. Λεπτομερείς πληροφορίες είναι διαθέσιμες στη συζήτηση για την [AST Injection in Pug](https://blog.p6.is/AST-Injection/#Pug).
Παράδειγμα μόλυνσης πρωτοτύπου στο Pug:
Example of prototype pollution in Pug:
```python
import requests
@ -342,13 +340,13 @@ requests.get(TARGET_URL)
2. **Επικύρωση Εισόδου**: Οι εισροές JSON θα πρέπει να επικυρώνονται αυστηρά σύμφωνα με το σχήμα της εφαρμογής.
3. **Ασφαλείς Συναρτήσεις Συγχώνευσης**: Η μη ασφαλής χρήση αναδρομικών συναρτήσεων συγχώνευσης θα πρέπει να αποφεύγεται.
4. **Αντικείμενα Χωρίς Πρωτότυπα**: Αντικείμενα χωρίς ιδιότητες πρωτοτύπου μπορούν να δημιουργηθούν χρησιμοποιώντας το `Object.create(null)`.
5. **Χρήση Χάρτη**: Αντί για το `Object`, θα πρέπει να χρησιμοποιείται το `Map` για την αποθήκευση ζευγών κλειδιού-τιμής.
5. **Χρήση Map**: Αντί για το `Object`, θα πρέπει να χρησιμοποιείται το `Map` για την αποθήκευση ζευγών κλειδιού-τιμής.
6. **Ενημερώσεις Βιβλιοθηκών**: Οι διορθώσεις ασφαλείας μπορούν να ενσωματωθούν με την τακτική ενημέρωση των βιβλιοθηκών.
7. **Εργαλεία Linter και Στατικής Ανάλυσης**: Χρησιμοποιήστε εργαλεία όπως το ESLint με κατάλληλα πρόσθετα για να ανιχνεύσετε και να αποτρέψετε ευπάθειες μόλυνσης του πρωτοτύπου.
8. **Αναθεωρήσεις Κώδικα**: Εφαρμόστε λεπτομερείς αναθεωρήσεις κώδικα για να εντοπίσετε και να διορθώσετε πιθανούς κινδύνους που σχετίζονται με τη μόλυνση του πρωτοτύπου.
8. **Ανασκοπήσεις Κώδικα**: Εφαρμόστε λεπτομερείς ανασκοπήσεις κώδικα για να εντοπίσετε και να διορθώσετε πιθανούς κινδύνους που σχετίζονται με τη μόλυνση του πρωτοτύπου.
9. **Εκπαίδευση Ασφαλείας**: Εκπαιδεύστε τους προγραμματιστές σχετικά με τους κινδύνους της μόλυνσης του πρωτοτύπου και τις βέλτιστες πρακτικές για τη συγγραφή ασφαλούς κώδικα.
10. **Χρήση Βιβλιοθηκών με Προσοχή**: Να είστε προσεκτικοί κατά τη χρήση τρίτων βιβλιοθηκών. Αξιολογήστε τη θέση ασφαλείας τους και αναθεωρήστε τον κώδικά τους, ειδικά εκείνες που χειρίζονται αντικείμενα.
11. **Προστασία Χρόνου Εκτέλεσης**: Εφαρμόστε μηχανισμούς προστασίας χρόνου εκτέλεσης, όπως η χρήση πακέτων npm που εστιάζουν στην ασφάλεια και μπορούν να ανιχνεύσουν και να αποτρέψουν επιθέσεις μόλυνσης του πρωτοτύπου.
10. **Χρήση Βιβλιοθηκών με Προσοχή**: Να είστε προσεκτικοί κατά τη χρήση τρίτων βιβλιοθηκών. Αξιολογήστε τη θέση ασφαλείας τους και ανασκοπήστε τον κώδικά τους, ειδικά εκείνες που χειρίζονται αντικείμενα.
11. **Προστασία σε Χρόνο Εκτέλεσης**: Εφαρμόστε μηχανισμούς προστασίας σε χρόνο εκτέλεσης, όπως η χρήση πακέτων npm που εστιάζουν στην ασφάλεια και μπορούν να ανιχνεύσουν και να αποτρέψουν επιθέσεις μόλυνσης του πρωτοτύπου.
## Αναφορές