Translated ['src/network-services-pentesting/pentesting-web/electron-des

This commit is contained in:
Translator 2025-01-07 18:30:42 +00:00
parent 4aa03203b2
commit 4ce4df97e3

View File

@ -4,7 +4,7 @@
## Εισαγωγή
Το Electron συνδυάζει ένα τοπικό backend (με **NodeJS**) και ένα frontend (**Chromium**), αν και του λείπουν μερικοί από τους μηχανισμούς ασφαλείας των σύγχρονων προγραμμάτων περιήγησης.
Το Electron συνδυάζει έναν τοπικό backend (με **NodeJS**) και έναν frontend (**Chromium**), αν και του λείπουν μερικοί από τους μηχανισμούς ασφαλείας των σύγχρονων προγραμμάτων περιήγησης.
Συνήθως μπορείς να βρεις τον κώδικα της εφαρμογής electron μέσα σε μια εφαρμογή `.asar`, προκειμένου να αποκτήσεις τον κώδικα πρέπει να τον εξαγάγεις:
```bash
@ -17,14 +17,14 @@ npx asar extract-file app.asar main.js #Extract just a file
"name": "standard-notes",
"main": "./app/index.js",
```
Το Electron έχει 2 τύπους διεργασιών:
Το Electron έχει 2 τύπους διαδικασιών:
- Κύρια Διεργασία (έχει πλήρη πρόσβαση στο NodeJS)
- Διεργασία Απόδοσης (θα πρέπει να έχει περιορισμένη πρόσβαση στο NodeJS για λόγους ασφαλείας)
- Κύρια Διαδικασία (έχει πλήρη πρόσβαση στο NodeJS)
- Διαδικασία Απόδοσης (θα πρέπει να έχει περιορισμένη πρόσβαση στο NodeJS για λόγους ασφαλείας)
![](<../../../images/image (182).png>)
Μια **διεργασία απόδοσης** θα είναι ένα παράθυρο προγράμματος περιήγησης που φορτώνει ένα αρχείο:
Μια **διαδικασία απόδοσης** θα είναι ένα παράθυρο προγράμματος περιήγησης που φορτώνει ένα αρχείο:
```javascript
const { BrowserWindow } = require("electron")
let win = new BrowserWindow()
@ -40,10 +40,10 @@ win.loadURL(`file://path/to/index.html`)
- **`contextIsolation`** - είναι `on` από προεπιλογή. Αν είναι απενεργοποιημένο, οι κύριες και οι διαδικασίες απόδοσης δεν είναι απομονωμένες.
- **`preload`** - κενό από προεπιλογή.
- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - είναι απενεργοποιημένο από προεπιλογή. Θα περιορίσει τις ενέργειες που μπορεί να εκτελέσει το NodeJS.
- Node Integration σε Εργάτες
- Ενοποίηση Node σε Εργάτες
- **`nodeIntegrationInSubframes`** - είναι `off` από προεπιλογή.
- Αν **`nodeIntegration`** είναι **ενεργοποιημένο**, αυτό θα επιτρέψει τη χρήση των **Node.js APIs** σε ιστοσελίδες που είναι **φορτωμένες σε iframes** μέσα σε μια εφαρμογή Electron.
- Αν **`nodeIntegration`** είναι **απενεργοποιημένο**, τότε τα preload θα φορτωθούν στο iframe.
- Αν η **`nodeIntegration`** είναι **ενεργοποιημένη**, αυτό θα επιτρέψει τη χρήση των **Node.js APIs** σε ιστοσελίδες που είναι **φορτωμένες σε iframes** μέσα σε μια εφαρμογή Electron.
- Αν η **`nodeIntegration`** είναι **απενεργοποιημένη**, τότε οι προφορτώσεις θα φορτωθούν στο iframe.
Παράδειγμα ρύθμισης:
```javascript
@ -152,7 +152,7 @@ runCalc()
## RCE: XSS + contextIsolation
Το _**contextIsolation**_ εισάγει **χωριστά συμφραζόμενα μεταξύ των σεναρίων της ιστοσελίδας και του εσωτερικού κώδικα JavaScript του Electron** έτσι ώστε η εκτέλεση JavaScript κάθε κώδικα να μην επηρεάζει η μία την άλλη. Αυτή είναι μια απαραίτητη δυνατότητα για την εξάλειψη της πιθανότητας RCE.
Το _**contextIsolation**_ εισάγει **χωριστά συμφραζόμενα μεταξύ των σεναρίων της ιστοσελίδας και του εσωτερικού κώδικα JavaScript του Electron** έτσι ώστε η εκτέλεση JavaScript κάθε κώδικα να μην επηρεάζει το άλλο. Αυτή είναι μια απαραίτητη δυνατότητα για την εξάλειψη της πιθανότητας RCE.
Αν τα συμφραζόμενα δεν είναι απομονωμένα, ένας επιτιθέμενος μπορεί να:
@ -185,9 +185,9 @@ window.addEventListener('click', (e) => {
Για περισσότερες πληροφορίες σχετικά με αυτά τα παραδείγματα, ελέγξτε [https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8](https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8) και [https://benjamin-altpeter.de/shell-openexternal-dangers/](https://benjamin-altpeter.de/shell-openexternal-dangers/)
Κατά την ανάπτυξη μιας εφαρμογής Electron desktop, είναι κρίσιμο να διασφαλιστούν οι σωστές ρυθμίσεις για το `nodeIntegration` και το `contextIsolation`. Είναι αποδεδειγμένο ότι η **εκτέλεση απομακρυσμένου κώδικα (RCE)** από την πλευρά του πελάτη που στοχεύει σε preload scripts ή στον εγγενή κώδικα του Electron από τη βασική διαδικασία αποτρέπεται αποτελεσματικά με αυτές τις ρυθμίσεις σε εφαρμογή.
Κατά την ανάπτυξη μιας εφαρμογής Electron desktop, είναι κρίσιμο να διασφαλιστούν οι σωστές ρυθμίσεις για το `nodeIntegration` και το `contextIsolation`. Είναι αποδεδειγμένο ότι η **εκτέλεση απομακρυσμένου κώδικα (RCE)** από την πλευρά του πελάτη που στοχεύει σε preload scripts ή στον εγγενή κώδικα του Electron από τη κύρια διαδικασία αποτρέπεται αποτελεσματικά με αυτές τις ρυθμίσεις σε εφαρμογή.
Όταν ένας χρήστης αλληλεπιδρά με συνδέσμους ή ανοίγει νέα παράθυρα, ενεργοποιούνται συγκεκριμένοι ακροατές γεγονότων, οι οποίοι είναι κρίσιμοι για την ασφάλεια και τη λειτουργικότητα της εφαρμογής:
Κατά την αλληλεπίδραση ενός χρήστη με συνδέσμους ή το άνοιγμα νέων παραθύρων, ενεργοποιούνται συγκεκριμένοι ακροατές γεγονότων, οι οποίοι είναι κρίσιμοι για την ασφάλεια και τη λειτουργικότητα της εφαρμογής:
```javascript
webContents.on("new-window", function (event, url, disposition, options) {}
webContents.on("will-navigate", function (event, url) {}
@ -200,7 +200,7 @@ webContents.on("will-navigate", function (event, url) {}
![https://miro.medium.com/max/1400/1*ZfgVwT3X1V_UfjcKaAccag.png](<../../../images/image (963).png>)
Οι καλύτερες πρακτικές ασφαλείας του Electron JS προειδοποιούν κατά της αποδοχής μη αξιόπιστου περιεχομένου με τη συνάρτηση `openExternal`, καθώς αυτό θα μπορούσε να οδηγήσει σε RCE μέσω διαφόρων πρωτοκόλλων. Τα λειτουργικά συστήματα υποστηρίζουν διαφορετικά πρωτόκολλα που μπορεί να προκαλέσουν RCE. Για λεπτομερείς παραδείγματα και περαιτέρω εξήγηση σχετικά με αυτό το θέμα, μπορεί κανείς να ανατρέξει σε [αυτή την πηγή](https://positive.security/blog/url-open-rce#windows-10-19042), η οποία περιλαμβάνει παραδείγματα πρωτοκόλλων Windows ικανά να εκμεταλλευτούν αυτή την ευπάθεια.
Οι καλύτερες πρακτικές ασφαλείας του Electron JS προειδοποιούν κατά της αποδοχής μη αξιόπιστου περιεχομένου με τη συνάρτηση `openExternal`, καθώς αυτό θα μπορούσε να οδηγήσει σε RCE μέσω διαφόρων πρωτοκόλλων. Τα λειτουργικά συστήματα υποστηρίζουν διαφορετικά πρωτόκολλα που μπορεί να ενεργοποιήσουν RCE. Για λεπτομερείς παραδείγματα και περαιτέρω εξήγηση σχετικά με αυτό το θέμα, μπορεί κανείς να ανατρέξει [σε αυτόν τον πόρο](https://positive.security/blog/url-open-rce#windows-10-19042), ο οποίος περιλαμβάνει παραδείγματα πρωτοκόλλων Windows ικανά να εκμεταλλευτούν αυτή την ευπάθεια.
Στο macos, η συνάρτηση `openExternal` μπορεί να εκμεταλλευτεί για να εκτελέσει αυθαίρετες εντολές όπως στο `shell.openExternal('file:///System/Applications/Calculator.app')`.
@ -226,7 +226,7 @@ window.open(
```
## Ανάγνωση Εσωτερικών Αρχείων: XSS + contextIsolation
**Η απενεργοποίηση του `contextIsolation` επιτρέπει τη χρήση των ετικετών `<webview>`**, παρόμοια με τις `<iframe>`, για την ανάγνωση και εξαγωγή τοπικών αρχείων. Ένα παράδειγμα που παρέχεται δείχνει πώς να εκμεταλλευτείτε αυτήν την ευπάθεια για να διαβάσετε το περιεχόμενο εσωτερικών αρχείων:
**Η απενεργοποίηση του `contextIsolation` επιτρέπει τη χρήση των ετικετών `<webview>`**, παρόμοια με τις `<iframe>`, για την ανάγνωση και εξαγωγή τοπικών αρχείων. Ένα παράδειγμα που παρέχεται δείχνει πώς να εκμεταλλευτεί κανείς αυτήν την ευπάθεια για να διαβάσει το περιεχόμενο εσωτερικών αρχείων:
![](<../../../images/1 u1jdRYuWAEVwJmf_F2ttJg (1).png>)
@ -248,14 +248,14 @@ frames[0].document.body.innerText
```
## **RCE: XSS + Old Chromium**
Αν ο **chromium** που χρησιμοποιείται από την εφαρμογή είναι **παλιός** και υπάρχουν **γνωστές** **ευπάθειες** σε αυτόν, μπορεί να είναι δυνατό να **εκμεταλλευτείτε και να αποκτήσετε RCE μέσω ενός XSS**.\
Μπορείτε να δείτε ένα παράδειγμα σε αυτή τη **writeup**: [https://blog.electrovolt.io/posts/discord-rce/](https://blog.electrovolt.io/posts/discord-rce/)
Αν ο **chromium** που χρησιμοποιείται από την εφαρμογή είναι **παλιός** και υπάρχουν **γνωστές** **ευπάθειες** σε αυτόν, μπορεί να είναι δυνατό να **εκμεταλλευτείς το και να αποκτήσεις RCE μέσω ενός XSS**.\
Μπορείς να δεις ένα παράδειγμα σε αυτή τη **writeup**: [https://blog.electrovolt.io/posts/discord-rce/](https://blog.electrovolt.io/posts/discord-rce/)
## **XSS Phishing μέσω εσωτερικού URL regex bypass**
## **XSS Phishing μέσω παράκαμψης regex εσωτερικού URL**
Υποθέτοντας ότι βρήκατε ένα XSS αλλά **δεν μπορείτε να ενεργοποιήσετε RCE ή να κλέψετε εσωτερικά αρχεία**, θα μπορούσατε να προσπαθήσετε να το χρησιμοποιήσετε για να **κλέψετε διαπιστευτήρια μέσω phishing**.
Υποθέτοντας ότι βρήκες ένα XSS αλλά **δεν μπορείς να ενεργοποιήσεις RCE ή να κλέψεις εσωτερικά αρχεία**, θα μπορούσες να προσπαθήσεις να το χρησιμοποιήσεις για να **κλέψεις διαπιστευτήρια μέσω phishing**.
Πρώτα απ' όλα, πρέπει να ξέρετε τι συμβαίνει όταν προσπαθείτε να ανοίξετε μια νέα διεύθυνση URL, ελέγχοντας τον κωδικό JS στο front-end:
Πρώτα απ' όλα, πρέπει να ξέρεις τι συμβαίνει όταν προσπαθείς να ανοίξεις μια νέα διεύθυνση URL, ελέγχοντας τον κωδικό JS στο front-end:
```javascript
webContents.on("new-window", function (event, url, disposition, options) {} // opens the custom openInternally function (it is declared below)
webContents.on("will-navigate", function (event, url) {} // opens the custom openInternally function (it is declared below)
@ -321,7 +321,7 @@ Native.app.exit()
Η **κύρια API** για την πρόσβαση στις ρυθμίσεις συστήματος και **την εκπομπή συστημικών γεγονότων** στο Electron. Μέθοδοι όπως **subscribeNotification**, **subscribeWorkspaceNotification**, **getUserDefault** και **setUserDefault** είναι όλες **μέρος αυτού** του module.
**Παράδειγμα χρήσης:**
**Example usage:**
```javascript
const { systemPreferences } = require('electron');
@ -337,8 +337,8 @@ console.log('Recent Places:', recentPlaces);
### **subscribeNotification / subscribeWorkspaceNotification**
* **Ακούει** για **εγγενείς ειδοποιήσεις macOS** χρησιμοποιώντας NSDistributedNotificationCenter.
* Πριν από **macOS Catalina**, μπορούσατε να καταγράψετε **όλες** τις διανεμόμενες ειδοποιήσεις περνώντας **nil** στο CFNotificationCenterAddObserver.
* Μετά από **Catalina / Big Sur**, οι εφαρμογές σε sandbox μπορούν ακόμα να **εγγραφούν** σε **πολλές εκδηλώσεις** (για παράδειγμα, **κλειδώματα/ξεκλειδώματα οθόνης**, **τοποθετήσεις όγκου**, **δραστηριότητα δικτύου**, κ.λπ.) καταχωρώντας ειδοποιήσεις **κατά όνομα**.
* Πριν από **macOS Catalina**, μπορούσατε να παρακολουθήσετε **όλες** τις διανεμόμενες ειδοποιήσεις περνώντας **nil** στο CFNotificationCenterAddObserver.
* Μετά από **Catalina / Big Sur**, οι εφαρμογές σε sandbox μπορούν να **εγγραφούν** σε **πολλές εκδηλώσεις** (για παράδειγμα, **κλειδώματα/ξεκλειδώματα οθόνης**, **τοποθετήσεις τόμου**, **δραστηριότητα δικτύου**, κ.λπ.) καταχωρώντας ειδοποιήσεις **κατά όνομα**.
### **getUserDefault / setUserDefault**