mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/pentesting-web/electron-des
This commit is contained in:
parent
4ce4df97e3
commit
b84b4322f2
@ -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 για λόγους ασφαλείας)
|
||||
|
||||
.png>)
|
||||
|
||||
Μια **διαδικασία απόδοσης** θα είναι ένα παράθυρο προγράμματος περιήγησης που φορτώνει ένα αρχείο:
|
||||
Μια **διεργασία απόδοσης** θα είναι ένα παράθυρο προγράμματος περιήγησης που φορτώνει ένα αρχείο:
|
||||
```javascript
|
||||
const { BrowserWindow } = require("electron")
|
||||
let win = new BrowserWindow()
|
||||
@ -32,7 +32,7 @@ let win = new BrowserWindow()
|
||||
//Open Renderer Process
|
||||
win.loadURL(`file://path/to/index.html`)
|
||||
```
|
||||
Οι ρυθμίσεις της **διαδικασίας απόδοσης** μπορούν να **ρυθμιστούν** στη **κύρια διαδικασία** μέσα στο αρχείο main.js. Ορισμένες από τις ρυθμίσεις θα **αποτρέψουν την εφαρμογή Electron να αποκτήσει RCE** ή άλλες ευπάθειες αν οι **ρυθμίσεις είναι σωστά διαμορφωμένες**.
|
||||
Οι ρυθμίσεις της **διαδικασίας απόδοσης** μπορούν να **ρυθμιστούν** στη **κύρια διαδικασία** μέσα στο αρχείο main.js. Ορισμένες από τις ρυθμίσεις θα **αποτρέψουν την εφαρμογή Electron να αποκτήσει RCE** ή άλλες ευπάθειες αν οι **ρυθμίσεις είναι σωστά ρυθμισμένες**.
|
||||
|
||||
Η εφαρμογή electron **μπορεί να έχει πρόσβαση στη συσκευή** μέσω των Node APIs, αν και μπορεί να ρυθμιστεί για να το αποτρέψει:
|
||||
|
||||
@ -152,16 +152,16 @@ runCalc()
|
||||
|
||||
## RCE: XSS + contextIsolation
|
||||
|
||||
Το _**contextIsolation**_ εισάγει **χωριστά συμφραζόμενα μεταξύ των σεναρίων της ιστοσελίδας και του εσωτερικού κώδικα JavaScript του Electron** έτσι ώστε η εκτέλεση JavaScript κάθε κώδικα να μην επηρεάζει το άλλο. Αυτή είναι μια απαραίτητη δυνατότητα για την εξάλειψη της πιθανότητας RCE.
|
||||
Το _**contextIsolation**_ εισάγει **χωριστά συμφραζόμενα μεταξύ των σεναρίων της ιστοσελίδας και του εσωτερικού κώδικα JavaScript του Electron** έτσι ώστε η εκτέλεση JavaScript κάθε κώδικα να μην επηρεάζει η μία την άλλη. Αυτή είναι μια απαραίτητη δυνατότητα για να εξαλειφθεί η πιθανότητα RCE.
|
||||
|
||||
Αν τα συμφραζόμενα δεν είναι απομονωμένα, ένας επιτιθέμενος μπορεί να:
|
||||
|
||||
1. Εκτελέσει **τυχαίο JavaScript στον renderer** (XSS ή πλοήγηση σε εξωτερικές τοποθεσίες)
|
||||
2. **Αντικαταστήσει τη встроμένη μέθοδο** που χρησιμοποιείται στον preload ή στον εσωτερικό κώδικα του Electron με τη δική του συνάρτηση
|
||||
3. **Ενεργοποιήσει** τη χρήση της **αντικατεστημένης συνάρτησης**
|
||||
2. **Επαναγράψει τη встроμένη μέθοδο** που χρησιμοποιείται στον preload ή στον εσωτερικό κώδικα του Electron σε δική του συνάρτηση
|
||||
3. **Ενεργοποιήσει** τη χρήση της **επαναγραμμένης συνάρτησης**
|
||||
4. RCE;
|
||||
|
||||
Υπάρχουν 2 μέρη όπου οι встроμένες μέθοδοι μπορούν να αντικατασταθούν: Στον κώδικα preload ή στον εσωτερικό κώδικα του Electron:
|
||||
Υπάρχουν 2 μέρη όπου οι встроμένες μέθοδοι μπορούν να επαναγραφούν: Στον κώδικα preload ή στον εσωτερικό κώδικα του Electron:
|
||||
|
||||
{{#ref}}
|
||||
electron-contextisolation-rce-via-preload-code.md
|
||||
@ -185,7 +185,7 @@ 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
|
||||
@ -200,7 +200,7 @@ webContents.on("will-navigate", function (event, url) {}
|
||||
|
||||
.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,11 +226,11 @@ window.open(
|
||||
```
|
||||
## Ανάγνωση Εσωτερικών Αρχείων: XSS + contextIsolation
|
||||
|
||||
**Η απενεργοποίηση του `contextIsolation` επιτρέπει τη χρήση των ετικετών `<webview>`**, παρόμοια με τις `<iframe>`, για την ανάγνωση και εξαγωγή τοπικών αρχείων. Ένα παράδειγμα που παρέχεται δείχνει πώς να εκμεταλλευτεί κανείς αυτήν την ευπάθεια για να διαβάσει το περιεχόμενο εσωτερικών αρχείων:
|
||||
**Η απενεργοποίηση του `contextIsolation` επιτρέπει τη χρήση των ετικετών `<webview>`**, παρόμοια με τις `<iframe>`, για την ανάγνωση και εξαγωγή τοπικών αρχείων. Ένα παράδειγμα που παρέχεται δείχνει πώς να εκμεταλλευτείτε αυτήν την ευπάθεια για να διαβάσετε το περιεχόμενο εσωτερικών αρχείων:
|
||||
|
||||
.png>)
|
||||
|
||||
Επιπλέον, μια άλλη μέθοδος για **την ανάγνωση ενός εσωτερικού αρχείου** κοινοποιείται, επισημαίνοντας μια κρίσιμη ευπάθεια ανάγνωσης τοπικών αρχείων σε μια εφαρμογή Electron desktop. Αυτό περιλαμβάνει την έγχυση ενός script για την εκμετάλλευση της εφαρμογής και την εξαγωγή δεδομένων:
|
||||
Επιπλέον, μια άλλη μέθοδος για **την ανάγνωση ενός εσωτερικού αρχείου** μοιράζεται, επισημαίνοντας μια κρίσιμη ευπάθεια ανάγνωσης τοπικών αρχείων σε μια εφαρμογή Electron desktop. Αυτό περιλαμβάνει την εισαγωγή ενός script για την εκμετάλλευση της εφαρμογής και την εξαγωγή δεδομένων:
|
||||
```html
|
||||
<br /><br /><br /><br />
|
||||
<h1>
|
||||
@ -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 μέσω παράκαμψης 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)
|
||||
@ -291,7 +291,7 @@ mainWindow = new BrowserWindow({
|
||||
})
|
||||
remoteMain.enable(mainWindow.webContents)
|
||||
```
|
||||
Στη συνέχεια, η διαδικασία απόδοσης μπορεί να εισάγει αντικείμενα από το module όπως:
|
||||
Τότε, η διαδικασία απόδοσης μπορεί να εισάγει αντικείμενα από το module όπως:
|
||||
```javascript
|
||||
import { dialog, getCurrentWindow } from '@electron/remote'
|
||||
```
|
||||
@ -300,11 +300,11 @@ import { dialog, getCurrentWindow } from '@electron/remote'
|
||||
- **`app.relaunch([options])`**
|
||||
- **Επαναλαμβάνει** την εφαρμογή **αποχωρώντας** από την τρέχουσα παρουσία και **εκκινώντας** μια νέα. Χρήσιμο για **ενημερώσεις εφαρμογής** ή σημαντικές **αλλαγές κατάστασης**.
|
||||
- **`app.setAppLogsPath([path])`**
|
||||
- **Ορίζει** ή **δημιουργεί** έναν φάκελο για την αποθήκευση **καταγραφών εφαρμογής**. Οι καταγραφές μπορούν να **ανακτηθούν** ή να **τροποποιηθούν** χρησιμοποιώντας **`app.getPath()`** ή **`app.setPath(pathName, newPath)`**.
|
||||
- **Ορίζει** ή **δημιουργεί** έναν φάκελο για την αποθήκευση των **καταγραφών εφαρμογής**. Οι καταγραφές μπορούν να **ανακτηθούν** ή να **τροποποιηθούν** χρησιμοποιώντας **`app.getPath()`** ή **`app.setPath(pathName, newPath)`**.
|
||||
- **`app.setAsDefaultProtocolClient(protocol[, path, args])`**
|
||||
- **Καταχωρεί** το τρέχον εκτελέσιμο ως τον **προεπιλεγμένο χειριστή** για ένα συγκεκριμένο **πρωτόκολλο**. Μπορείτε να παρέχετε μια **προσαρμοσμένη διαδρομή** και **παραμέτρους** αν χρειαστεί.
|
||||
- **Καταχωρεί** το τρέχον εκτελέσιμο ως τον **προεπιλεγμένο χειριστή** για έναν καθορισμένο **πρωτόκολλο**. Μπορείτε να παρέχετε μια **προσαρμοσμένη διαδρομή** και **παραμέτρους** αν χρειαστεί.
|
||||
- **`app.setUserTasks(tasks)`**
|
||||
- **Προσθέτει** εργασίες στην **κατηγορία Εργασιών** στη **Λίστα Γρήγορων Συνδέσμων** (σε Windows). Κάθε εργασία μπορεί να ελέγξει πώς η εφαρμογή **εκκινείται** ή ποιες **παράμετροι** περνούν.
|
||||
- **Προσθέτει** εργασίες στην **κατηγορία Εργασιών** στη **Λίστα Γρήγορων Συνδέσμων** (σε Windows). Κάθε εργασία μπορεί να ελέγξει πώς εκκινείται η εφαρμογή ή ποιες **παράμετροι** περνιούνται.
|
||||
- **`app.importCertificate(options, callback)`**
|
||||
- **Εισάγει** ένα **πιστοποιητικό PKCS#12** στο **κατάστημα πιστοποιητικών** του συστήματος (μόνο Linux). Ένα **callback** μπορεί να χρησιμοποιηθεί για να χειριστεί το αποτέλεσμα.
|
||||
- **`app.moveToApplicationsFolder([options])`**
|
||||
@ -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**
|
||||
|
||||
@ -354,14 +354,26 @@ console.log('Recent Places:', recentPlaces);
|
||||
|
||||
Αυτή η λειτουργία εμφανίζει το δεδομένο αρχείο σε έναν διαχειριστή αρχείων, ο οποίος **μπορεί να εκτελέσει αυτόματα το αρχείο**.
|
||||
|
||||
Για περισσότερες πληροφορίες ελέγξτε [https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)
|
||||
Για περισσότερες πληροφορίες δείτε [https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)
|
||||
|
||||
## Content Security Policy
|
||||
|
||||
Οι εφαρμογές Electron θα πρέπει να έχουν μια **Πολιτική Ασφαλείας Περιεχομένου (CSP)** για να **αποτρέπουν επιθέσεις XSS**. Η **CSP** είναι ένα **πρότυπο ασφαλείας** που βοηθά να **αποτραπεί** η **εκτέλεση** **μη αξιόπιστου κώδικα** στον περιηγητή.
|
||||
|
||||
Συνήθως **ρυθμίζεται** στο **`main.js`** αρχείο ή στο **`index.html`** πρότυπο με την CSP μέσα σε μια **meta tag**.
|
||||
|
||||
Για περισσότερες πληροφορίες δείτε:
|
||||
|
||||
{{#ref}}
|
||||
pentesting-web/content-security-policy-csp-bypass/
|
||||
{{#endref}}
|
||||
|
||||
## **Tools**
|
||||
|
||||
- [**Electronegativity**](https://github.com/doyensec/electronegativity) είναι ένα εργαλείο για την αναγνώριση κακών ρυθμίσεων και προτύπων ασφαλείας σε εφαρμογές βασισμένες σε Electron.
|
||||
- [**Electrolint**](https://github.com/ksdmitrieva/electrolint) είναι ένα ανοιχτού κώδικα plugin VS Code για εφαρμογές Electron που χρησιμοποιεί το Electronegativity.
|
||||
- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) για να ελέγξετε για ευάλωτες βιβλιοθήκες τρίτων.
|
||||
- [**Electro.ng**](https://electro.ng/): Πρέπει να το αγοράσετε.
|
||||
- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) για έλεγχο ευάλωτων τρίτων βιβλιοθηκών
|
||||
- [**Electro.ng**](https://electro.ng/): Πρέπει να το αγοράσετε
|
||||
|
||||
## Labs
|
||||
|
||||
@ -397,7 +409,7 @@ npm start
|
||||
- [https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=8](https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=8)
|
||||
- [https://www.youtube.com/watch?v=a-YnG3Mx-Tg](https://www.youtube.com/watch?v=a-YnG3Mx-Tg)
|
||||
- [https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s)
|
||||
- Περισσότερες έρευνες και αναλύσεις σχετικά με την ασφάλεια του Electron στο [https://github.com/doyensec/awesome-electronjs-hacking](https://github.com/doyensec/awesome-electronjs-hacking)
|
||||
- Περισσότερες έρευνες και αναφορές σχετικά με την ασφάλεια του Electron στο [https://github.com/doyensec/awesome-electronjs-hacking](https://github.com/doyensec/awesome-electronjs-hacking)
|
||||
- [https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81](https://www.youtube.com/watch?v=Tzo8ucHA5xw&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq&index=81)
|
||||
- [https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user