Electron Desktop Apps
Last updated
Last updated
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Το Electron συνδυάζει ένα τοπικό backend (με NodeJS) και ένα frontend (Chromium), αν και του λείπουν μερικοί από τους μηχανισμούς ασφαλείας των σύγχρονων προγραμμάτων περιήγησης.
Συνήθως μπορείτε να βρείτε τον κώδικα της εφαρμογής electron μέσα σε μια εφαρμογή .asar
, προκειμένου να αποκτήσετε τον κώδικα πρέπει να τον εξαγάγετε:
Στον πηγαίο κώδικα μιας εφαρμογής Electron, μέσα στο packet.json
, μπορείτε να βρείτε καθορισμένο το αρχείο main.js
όπου έχουν ρυθμιστεί οι ρυθμίσεις ασφαλείας.
Electron έχει 2 τύπους διαδικασιών:
Κύρια Διαδικασία (έχει πλήρη πρόσβαση στο NodeJS)
Διαδικασία Απόδοσης (θα πρέπει να έχει περιορισμένη πρόσβαση στο NodeJS για λόγους ασφαλείας)
Μια διαδικασία απόδοσης θα είναι ένα παράθυρο προγράμματος περιήγησης που φορτώνει ένα αρχείο:
Ρυθμίσεις της διαδικασίας απόδοσης μπορούν να ρυθμιστούν στη κύρια διαδικασία μέσα στο αρχείο main.js. Ορισμένες από τις ρυθμίσεις θα αποτρέψουν την εφαρμογή Electron να αποκτήσει RCE ή άλλες ευπάθειες αν οι ρυθμίσεις είναι σωστά ρυθμισμένες.
Η εφαρμογή electron μπορεί να έχει πρόσβαση στη συσκευή μέσω των Node APIs αν και μπορεί να ρυθμιστεί για να το αποτρέψει:
nodeIntegration
- είναι off
από προεπιλογή. Αν είναι ενεργοποιημένο, επιτρέπει την πρόσβαση σε χαρακτηριστικά του node από τη διαδικασία απόδοσης.
contextIsolation
- είναι on
από προεπιλογή. Αν είναι απενεργοποιημένο, οι κύριες και οι διαδικασίες απόδοσης δεν είναι απομονωμένες.
preload
- κενό από προεπιλογή.
sandbox
- είναι απενεργοποιημένο από προεπιλογή. Θα περιορίσει τις ενέργειες που μπορεί να εκτελέσει το NodeJS.
Ενοποίηση Node σε Εργάτες
nodeIntegrationInSubframes
- είναι off
από προεπιλογή.
Αν η nodeIntegration
είναι ενεργοποιημένη, αυτό θα επιτρέψει τη χρήση των Node.js APIs σε ιστοσελίδες που είναι φορτωμένες σε iframes μέσα σε μια εφαρμογή Electron.
Αν η nodeIntegration
είναι απενεργοποιημένη, τότε τα preload θα φορτωθούν στο iframe.
Παράδειγμα ρύθμισης:
Ορισμένα RCE payloads από εδώ:
Τροποποιήστε τη ρύθμιση start-main και προσθέστε τη χρήση ενός proxy όπως:
Αν μπορείτε να εκτελέσετε το Electron App τοπικά, είναι πιθανό να μπορέσετε να το κάνετε να εκτελεί αυθαίρετο κώδικα javascript. Ελέγξτε πώς στο:
macOS Electron Applications InjectionΑν το nodeIntegration είναι ρυθμισμένο σε on, το JavaScript μιας ιστοσελίδας μπορεί να χρησιμοποιήσει εύκολα τις δυνατότητες του Node.js απλά καλώντας το require()
. Για παράδειγμα, ο τρόπος εκτέλεσης της εφαρμογής calc στα Windows είναι:
Το σενάριο που υποδεικνύεται σε αυτή τη ρύθμιση είναι φορτωμένο πριν από άλλα σενάρια στον renderer, έτσι έχει απεριόριστη πρόσβαση στα Node APIs:
Επομένως, το σενάριο μπορεί να εξάγει node-features σε σελίδες:
Αν το contextIsolation
είναι ενεργό, αυτό δεν θα λειτουργήσει
Η contextIsolation εισάγει τους χωριστούς χώρους μεταξύ των σεναρίων της ιστοσελίδας και του εσωτερικού κώδικα JavaScript του Electron έτσι ώστε η εκτέλεση JavaScript κάθε κώδικα να μην επηρεάζει η μία την άλλη. Αυτή είναι μια απαραίτητη δυνατότητα για την εξάλειψη της πιθανότητας RCE.
Αν οι χώροι δεν είναι απομονωμένοι, ένας επιτιθέμενος μπορεί να:
Εκτελέσει τυχαίο JavaScript στον renderer (XSS ή πλοήγηση σε εξωτερικές τοποθεσίες)
Αντικαταστήσει τη встроμένη μέθοδο που χρησιμοποιείται στον preload ή στον εσωτερικό κώδικα του Electron με τη δική του συνάρτηση
Ενεργοποιήσει τη χρήση της αντικατεστημένης συνάρτησης
RCE;
Υπάρχουν 2 μέρη όπου οι встроμένες μέθοδοι μπορούν να αντικατασταθούν: Στον κώδικα preload ή στον εσωτερικό κώδικα του Electron:
Electron contextIsolation RCE via preload codeElectron contextIsolation RCE via Electron internal codeElectron contextIsolation RCE via IPCΑν υπάρχουν περιορισμοί που εφαρμόζονται όταν κάνετε κλικ σε έναν σύνδεσμο, μπορεί να είστε σε θέση να τους παρακάμψετε κάνοντας μεσαίο κλικ αντί για κανονικό αριστερό κλικ.
Για περισσότερες πληροφορίες σχετικά με αυτά τα παραδείγματα, ελέγξτε https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8 και https://benjamin-altpeter.de/shell-openexternal-dangers/
Κατά την ανάπτυξη μιας εφαρμογής Electron desktop, η διασφάλιση των σωστών ρυθμίσεων για το nodeIntegration
και το contextIsolation
είναι κρίσιμη. Είναι αποδεδειγμένο ότι η εκτέλεση απομακρυσμένου κώδικα (RCE) από την πλευρά του πελάτη που στοχεύει σε preload scripts ή στον εγγενή κώδικα του Electron από τη βασική διαδικασία αποτρέπεται αποτελεσματικά με αυτές τις ρυθμίσεις σε εφαρμογή.
Κατά την αλληλεπίδραση ενός χρήστη με συνδέσμους ή το άνοιγμα νέων παραθύρων, ενεργοποιούνται συγκεκριμένοι ακροατές γεγονότων, οι οποίοι είναι κρίσιμοι για την ασφάλεια και τη λειτουργικότητα της εφαρμογής:
Αυτοί οι ακροατές είναι υπερκαλυμμένοι από την επιτραπέζια εφαρμογή για να υλοποιήσουν τη δική τους επιχειρηματική λογική. Η εφαρμογή αξιολογεί αν ένας πλοηγημένος σύνδεσμος θα πρέπει να ανοιχτεί εσωτερικά ή σε έναν εξωτερικό φυλλομετρητή ιστού. Αυτή η απόφαση συνήθως λαμβάνεται μέσω μιας συνάρτησης, openInternally
. Αν αυτή η συνάρτηση επιστρέψει false
, υποδεικνύει ότι ο σύνδεσμος θα πρέπει να ανοιχτεί εξωτερικά, χρησιμοποιώντας τη συνάρτηση shell.openExternal
.
Εδώ είναι ένας απλοποιημένος ψευδοκώδικας:
Οι καλύτερες πρακτικές ασφαλείας του Electron JS προειδοποιούν κατά της αποδοχής μη αξιόπιστου περιεχομένου με τη συνάρτηση openExternal
, καθώς αυτό θα μπορούσε να οδηγήσει σε RCE μέσω διαφόρων πρωτοκόλλων. Τα λειτουργικά συστήματα υποστηρίζουν διαφορετικά πρωτόκολλα που μπορεί να προκαλέσουν RCE. Για λεπτομερείς παραδείγματα και περαιτέρω εξήγηση σχετικά με αυτό το θέμα, μπορεί κανείς να ανατρέξει σε αυτή την πηγή, η οποία περιλαμβάνει παραδείγματα πρωτοκόλλων Windows ικανά να εκμεταλλευτούν αυτή την ευπάθεια.
Παραδείγματα εκμετάλλευσης πρωτοκόλλων Windows περιλαμβάνουν:
Η απενεργοποίηση του contextIsolation
επιτρέπει τη χρήση των <webview>
tags, παρόμοια με τα <iframe>
, για την ανάγνωση και εξαγωγή τοπικών αρχείων. Ένα παράδειγμα που παρέχεται δείχνει πώς να εκμεταλλευτεί κανείς αυτήν την ευπάθεια για να διαβάσει το περιεχόμενο εσωτερικών αρχείων:
Επιπλέον, μια άλλη μέθοδος για την ανάγνωση ενός εσωτερικού αρχείου μοιράζεται, επισημαίνοντας μια κρίσιμη ευπάθεια ανάγνωσης τοπικών αρχείων σε μια εφαρμογή Electron desktop. Αυτό περιλαμβάνει την έγχυση ενός script για την εκμετάλλευση της εφαρμογής και την εξαγωγή δεδομένων:
Αν ο chromium που χρησιμοποιείται από την εφαρμογή είναι παλιός και υπάρχουν γνωστές ευπάθειες σε αυτόν, μπορεί να είναι δυνατό να εκμεταλλευτείτε και να αποκτήσετε RCE μέσω ενός XSS. Μπορείτε να δείτε ένα παράδειγμα σε αυτήν την αναφορά: https://blog.electrovolt.io/posts/discord-rce/
Υποθέτοντας ότι βρήκατε ένα XSS αλλά δεν μπορείτε να ενεργοποιήσετε RCE ή να κλέψετε εσωτερικά αρχεία, θα μπορούσατε να προσπαθήσετε να το χρησιμοποιήσετε για να κλέψετε διαπιστευτήρια μέσω phishing.
Πρώτα απ' όλα, πρέπει να γνωρίζετε τι συμβαίνει όταν προσπαθείτε να ανοίξετε μια νέα διεύθυνση URL, ελέγχοντας τον κωδικό JS στο front-end:
Η κλήση στο openInternally
θα αποφασίσει αν το link θα ανοίξει στο παράθυρο επιφάνειας εργασίας καθώς είναι ένα link που ανήκει στην πλατφόρμα, ή αν θα ανοίξει στον φυλλομετρητή ως πόρος τρίτου μέρους.
Στην περίπτωση που η regex που χρησιμοποιείται από τη συνάρτηση είναι ευάλωτη σε παρακάμψεις (για παράδειγμα, μη διαφεύγοντας τα σημεία των υποτομέων) ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί το XSS για να ανοίξει ένα νέο παράθυρο το οποίο θα βρίσκεται στην υποδομή του επιτιθέμενου ζητώντας διαπιστευτήρια από τον χρήστη:
Electronegativity είναι ένα εργαλείο για την αναγνώριση κακών ρυθμίσεων και αντιανασφαλιστικών προτύπων σε εφαρμογές βασισμένες σε Electron.
Electrolint είναι ένα ανοιχτού κώδικα πρόσθετο για το VS Code για εφαρμογές Electron που χρησιμοποιεί το Electronegativity.
nodejsscan για να ελέγξετε ευάλωτες βιβλιοθήκες τρίτων.
Electro.ng: Πρέπει να το αγοράσετε.
Στο https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s μπορείτε να βρείτε ένα εργαστήριο για την εκμετάλλευση ευάλωτων εφαρμογών Electron.
Ορισμένες εντολές που θα σας βοηθήσουν με το εργαστήριο:
Περισσότερες έρευνες και αναφορές σχετικά με την ασφάλεια του Electron στο https://github.com/doyensec/awesome-electronjs-hacking
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)