macOS Electron Applications Injection
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Αν δεν ξέρετε τι είναι το Electron, μπορείτε να βρείτε πολλές πληροφορίες εδώ. Αλλά προς το παρόν, απλά να ξέρετε ότι το Electron τρέχει node. Και το node έχει κάποιες παραμέτρους και μεταβλητές περιβάλλοντος που μπορούν να χρησιμοποιηθούν για να εκτελέσουν άλλο κώδικα εκτός από το υποδεικνυόμενο αρχείο.
Αυτές οι τεχνικές θα συζητηθούν στη συνέχεια, αλλά πρόσφατα το Electron έχει προσθέσει αρκετές σημαίες ασφαλείας για να τις αποτρέψει. Αυτές είναι οι Electron Fuses και αυτές είναι οι οποίες χρησιμοποιούνται για να αποτρέψουν τις εφαρμογές Electron στο macOS από το να φορτώνουν αυθαίρετο κώδικα:
RunAsNode
: Αν είναι απενεργοποιημένο, αποτρέπει τη χρήση της μεταβλητής περιβάλλοντος ELECTRON_RUN_AS_NODE
για την έγχυση κώδικα.
EnableNodeCliInspectArguments
: Αν είναι απενεργοποιημένο, παράμετροι όπως --inspect
, --inspect-brk
δεν θα γίνουν σεβαστοί. Αποφεύγοντας αυτόν τον τρόπο για να εγχυθεί κώδικας.
EnableEmbeddedAsarIntegrityValidation
: Αν είναι ενεργοποιημένο, το φορτωμένο asar
αρχείο θα επικυρωθεί από το macOS. Αποτρέποντας με αυτόν τον τρόπο την έγχυση κώδικα τροποποιώντας το περιεχόμενο αυτού του αρχείου.
OnlyLoadAppFromAsar
: Αν αυτό είναι ενεργοποιημένο, αντί να ψάχνει να φορτώσει με την εξής σειρά: app.asar
, app
και τελικά default_app.asar
. Θα ελέγξει και θα χρησιμοποιήσει μόνο το app.asar, διασφαλίζοντας έτσι ότι όταν συνδυάζεται με τη σημαία embeddedAsarIntegrityValidation
είναι αδύνατο να φορτωθεί μη επικυρωμένος κώδικας.
LoadBrowserProcessSpecificV8Snapshot
: Αν είναι ενεργοποιημένο, η διαδικασία του προγράμματος περιήγησης χρησιμοποιεί το αρχείο που ονομάζεται browser_v8_context_snapshot.bin
για το στιγμιότυπο V8.
Μια άλλη ενδιαφέρουσα σημαία που δεν θα αποτρέπει την έγχυση κώδικα είναι:
EnableCookieEncryption: Αν είναι ενεργοποιημένο, το αποθηκευτικό cookie στον δίσκο κρυπτογραφείται χρησιμοποιώντας κλειδιά κρυπτογράφησης επιπέδου OS.
Μπορείτε να ελέγξετε αυτές τις σημαίες από μια εφαρμογή με:
Όπως αναφέρουν οι τεκμηριώσεις, η διαμόρφωση των Electron Fuses είναι ρυθμισμένη μέσα στο Electron binary που περιέχει κάπου τη συμβολοσειρά dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX
.
Στις εφαρμογές macOS, αυτό είναι συνήθως στο application.app/Contents/Frameworks/Electron Framework.framework/Electron Framework
Μπορείτε να φορτώσετε αυτό το αρχείο στο https://hexed.it/ και να αναζητήσετε την προηγούμενη συμβολοσειρά. Μετά από αυτή τη συμβολοσειρά μπορείτε να δείτε σε ASCII έναν αριθμό "0" ή "1" που υποδεικνύει αν κάθε ασφάλεια είναι απενεργοποιημένη ή ενεργοποιημένη. Απλά τροποποιήστε τον κωδικό hex (0x30
είναι 0
και 0x31
είναι 1
) για να τροποποιήσετε τις τιμές ασφάλειας.
Σημειώστε ότι αν προσπαθήσετε να επικαλύψετε το Electron Framework
δυαδικό αρχείο μέσα σε μια εφαρμογή με αυτά τα bytes τροποποιημένα, η εφαρμογή δεν θα εκτελείται.
Μπορεί να υπάρχουν εξωτερικά αρχεία JS/HTML που χρησιμοποιεί μια εφαρμογή Electron, οπότε ένας επιτιθέμενος θα μπορούσε να εισάγει κώδικα σε αυτά τα αρχεία των οποίων η υπογραφή δεν θα ελεγχθεί και να εκτελέσει αυθαίρετο κώδικα στο πλαίσιο της εφαρμογής.
Ωστόσο, αυτή τη στιγμή υπάρχουν 2 περιορισμοί:
Η άδεια kTCCServiceSystemPolicyAppBundles
είναι απαραίτητη για να τροποποιήσετε μια εφαρμογή, οπότε από προεπιλογή αυτό δεν είναι πλέον δυνατό.
Το συμπιεσμένο αρχείο asap
συνήθως έχει τις ασφάλειες embeddedAsarIntegrityValidation
και
onlyLoadAppFromAsar
ενεργοποιημένες
Κάνοντάς το αυτό το μονοπάτι επίθεσης πιο περίπλοκο (ή αδύνατο).
Σημειώστε ότι είναι δυνατόν να παρακάμψετε την απαίτηση της kTCCServiceSystemPolicyAppBundles
αντιγράφοντας την εφαρμογή σε άλλο κατάλογο (όπως /tmp
), μετονομάζοντας τον φάκελο app.app/Contents
σε app.app/NotCon
, τροποποιώντας το αρχείο asar με τον κακόβουλο κώδικά σας, μετονομάζοντάς το ξανά σε app.app/Contents
και εκτελώντας το.
Μπορείτε να αποσυμπιέσετε τον κώδικα από το αρχείο asar με:
Και συσκευάστε το ξανά αφού το έχετε τροποποιήσει με:
ELECTRON_RUN_AS_NODE
Σύμφωνα με τα έγγραφα, αν αυτή η μεταβλητή περιβάλλοντος είναι ρυθμισμένη, θα ξεκινήσει τη διαδικασία ως κανονική διαδικασία Node.js.
Εάν η ασφάλεια RunAsNode
είναι απενεργοποιημένη, η μεταβλητή περιβάλλοντος ELECTRON_RUN_AS_NODE
θα αγνοηθεί και αυτό δεν θα λειτουργήσει.
Όπως προτείνεται εδώ, θα μπορούσατε να εκμεταλλευτείτε αυτή τη μεταβλητή περιβάλλοντος σε ένα plist για να διατηρήσετε την επιμονή:
NODE_OPTIONS
Μπορείτε να αποθηκεύσετε το payload σε ένα διαφορετικό αρχείο και να το εκτελέσετε:
Εάν η ασφάλεια EnableNodeOptionsEnvironmentVariable
είναι απενεργοποιημένη, η εφαρμογή θα αγνοήσει τη μεταβλητή περιβάλλοντος NODE_OPTIONS κατά την εκκίνηση, εκτός αν η μεταβλητή περιβάλλοντος ELECTRON_RUN_AS_NODE
είναι ρυθμισμένη, η οποία θα αγνοηθεί επίσης αν η ασφάλεια RunAsNode
είναι απενεργοποιημένη.
Εάν δεν ρυθμίσετε ELECTRON_RUN_AS_NODE
, θα βρείτε το σφάλμα: Most NODE_OPTIONs are not supported in packaged apps. See documentation for more details.
Μπορείτε να εκμεταλλευτείτε αυτή τη μεταβλητή περιβάλλοντος σε ένα plist για να διατηρήσετε την επιμονή προσθέτοντας αυτά τα κλειδιά:
Σύμφωνα με αυτό, αν εκτελέσετε μια εφαρμογή Electron με σημαίες όπως --inspect
, --inspect-brk
και --remote-debugging-port
, μια θύρα αποσφαλμάτωσης θα είναι ανοιχτή ώστε να μπορείτε να συνδεθείτε σε αυτή (για παράδειγμα από το Chrome στο chrome://inspect
) και θα μπορείτε να εισάγετε κώδικα σε αυτή ή ακόμα και να εκκινήσετε νέες διαδικασίες.
Για παράδειγμα:
Εάν η ασφάλεια EnableNodeCliInspectArguments
είναι απενεργοποιημένη, η εφαρμογή θα αγνοήσει τις παραμέτρους node (όπως --inspect
) κατά την εκκίνηση, εκτός αν η μεταβλητή περιβάλλοντος ELECTRON_RUN_AS_NODE
είναι ρυθμισμένη, η οποία θα αγνοηθεί επίσης αν η ασφάλεια RunAsNode
είναι απενεργοποιημένη.
Ωστόσο, μπορείτε να χρησιμοποιήσετε την παράμετρο electron --remote-debugging-port=9229
αλλά το προηγούμενο payload δεν θα λειτουργήσει για την εκτέλεση άλλων διαδικασιών.
Χρησιμοποιώντας την παράμετρο --remote-debugging-port=9222
είναι δυνατόν να κλέψετε κάποιες πληροφορίες από την εφαρμογή Electron όπως το ιστορικό (με εντολές GET) ή τα cookies του προγράμματος περιήγησης (καθώς είναι αποκρυπτογραφημένα μέσα στο πρόγραμμα περιήγησης και υπάρχει ένα json endpoint που θα τα δώσει).
Μπορείτε να μάθετε πώς να το κάνετε αυτό εδώ και εδώ και να χρησιμοποιήσετε το αυτόματο εργαλείο WhiteChocolateMacademiaNut ή ένα απλό script όπως:
In αυτή την ανάρτηση, αυτή η αποσφαλμάτωση κακοποιείται για να κάνει ένα headless chrome να κατεβάζει αυθαίρετα αρχεία σε αυθαίρετες τοποθεσίες.
Μπορείτε να κακοποιήσετε αυτή τη μεταβλητή περιβάλλοντος σε ένα plist για να διατηρήσετε την επιμονή προσθέτοντας αυτά τα κλειδιά:
Ο δαίμονας TCC από το macOS δεν ελέγχει την εκτελούμενη έκδοση της εφαρμογής. Έτσι, αν δεν μπορείτε να εισάγετε κώδικα σε μια εφαρμογή Electron με καμία από τις προηγούμενες τεχνικές, μπορείτε να κατεβάσετε μια προηγούμενη έκδοση της ΕΦΑΡΜΟΓΗΣ και να εισάγετε κώδικα σε αυτήν, καθώς θα αποκτήσει ακόμα τα δικαιώματα TCC (εκτός αν το Trust Cache το αποτρέψει).
Οι προηγούμενες τεχνικές θα σας επιτρέψουν να εκτελέσετε κώδικα JS μέσα στη διαδικασία της εφαρμογής electron. Ωστόσο, θυμηθείτε ότι οι παιδικές διαδικασίες εκτελούνται υπό το ίδιο προφίλ sandbox με την κύρια εφαρμογή και κληρονομούν τα δικαιώματα TCC τους. Επομένως, αν θέλετε να εκμεταλλευτείτε τα δικαιώματα για να αποκτήσετε πρόσβαση στην κάμερα ή το μικρόφωνο, για παράδειγμα, μπορείτε απλά να εκτελέσετε ένα άλλο δυαδικό από τη διαδικασία.
Το εργαλείο electroniz3r μπορεί να χρησιμοποιηθεί εύκολα για να βρείτε ευάλωτες εφαρμογές electron που είναι εγκατεστημένες και να εισάγετε κώδικα σε αυτές. Αυτό το εργαλείο θα προσπαθήσει να χρησιμοποιήσει την τεχνική --inspect
:
Πρέπει να το συντάξετε μόνοι σας και μπορείτε να το χρησιμοποιήσετε έτσι:
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)