Node inspector/CEF debug abuse
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)
Από τα έγγραφα: Όταν ξεκινά με την επιλογή --inspect
, μια διαδικασία Node.js ακούει για έναν πελάτη αποσφαλμάτωσης. Από προεπιλογή, θα ακούει στη διεύθυνση και την θύρα 127.0.0.1:9229
. Κάθε διαδικασία έχει επίσης ανατεθεί μια μοναδική UUID.
Οι πελάτες αποσφαλμάτωσης πρέπει να γνωρίζουν και να καθορίσουν τη διεύθυνση του διακομιστή, την θύρα και την UUID για να συνδεθούν. Μια πλήρης διεύθυνση URL θα μοιάζει κάπως έτσι: ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e
.
Δεδομένου ότι ο αποσφαλματωτής έχει πλήρη πρόσβαση στο περιβάλλον εκτέλεσης Node.js, ένας κακόβουλος παράγοντας που μπορεί να συνδεθεί σε αυτήν την θύρα μπορεί να είναι σε θέση να εκτελέσει αυθαίρετο κώδικα εκ μέρους της διαδικασίας Node.js (πιθανή κλιμάκωση προνομίων).
Υπάρχουν αρκετοί τρόποι για να ξεκινήσει ένας αποσφαλματωτής:
Όταν ξεκινάτε μια διαδικασία που επιθεωρείται, κάτι τέτοιο θα εμφανιστεί:
Διεργασίες που βασίζονται στο CEF (Chromium Embedded Framework) χρειάζονται να χρησιμοποιήσουν την παράμετρο: --remote-debugging-port=9222
για να ανοίξουν τον debugger (οι προστασίες SSRF παραμένουν πολύ παρόμοιες). Ωστόσο, αντί να παραχωρήσουν μια NodeJS debug συνεδρία, θα επικοινωνήσουν με τον περιηγητή χρησιμοποιώντας το Chrome DevTools Protocol, αυτή είναι μια διεπαφή για τον έλεγχο του περιηγητή, αλλά δεν υπάρχει άμεσο RCE.
Όταν ξεκινάτε έναν περιηγητή που αποσφαλματώνεται, κάτι τέτοιο θα εμφανιστεί:
Οι ιστότοποι που ανοίγουν σε έναν web-browser μπορούν να κάνουν WebSocket και HTTP αιτήματα υπό το μοντέλο ασφάλειας του browser. Μια αρχική σύνδεση HTTP είναι απαραίτητη για να αποκτήσετε ένα μοναδικό id συνεδρίας debugger. Η πολιτική same-origin αποτρέπει τους ιστότοπους από το να μπορούν να κάνουν αυτή τη σύνδεση HTTP. Για επιπλέον ασφάλεια κατά των επιθέσεων DNS rebinding, το Node.js επαληθεύει ότι οι κεφαλίδες 'Host' για τη σύνδεση είτε καθορίζουν μια διεύθυνση IP είτε localhost
ή localhost6
ακριβώς.
Αυτά τα μέτρα ασφαλείας αποτρέπουν την εκμετάλλευση του inspector για να εκτελέσετε κώδικα απλά στέλνοντας ένα HTTP αίτημα (το οποίο θα μπορούσε να γίνει εκμεταλλευόμενοι μια ευπάθεια SSRF).
Μπορείτε να στείλετε το σήμα SIGUSR1 σε μια τρέχουσα διαδικασία nodejs για να ξεκινήσει τον inspector στην προεπιλεγμένη θύρα. Ωστόσο, σημειώστε ότι πρέπει να έχετε αρκετά δικαιώματα, οπότε αυτό μπορεί να σας δώσει προνομιακή πρόσβαση σε πληροφορίες μέσα στη διαδικασία αλλά όχι άμεση κλιμάκωση δικαιωμάτων.
Αυτό είναι χρήσιμο σε κοντέινερ γιατί η διακοπή της διαδικασίας και η εκκίνηση μιας νέας με --inspect
δεν είναι επιλογή γιατί το κοντέινερ θα σκοτωθεί μαζί με τη διαδικασία.
Για να συνδεθείτε με έναν browser βασισμένο σε Chromium, μπορείτε να αποκτήσετε πρόσβαση στα URLs chrome://inspect
ή edge://inspect
για το Chrome ή το Edge, αντίστοιχα. Κάνοντας κλικ στο κουμπί Ρύθμιση, θα πρέπει να διασφαλιστεί ότι ο στόχος και η θύρα είναι σωστά καταχωρημένα. Η εικόνα δείχνει ένα παράδειγμα Remote Code Execution (RCE):
Χρησιμοποιώντας τη γραμμή εντολών μπορείτε να συνδεθείτε με έναν αποσφαλματωτή/επιθεωρητή με:
Το εργαλείο https://github.com/taviso/cefdebug επιτρέπει να βρείτε επιθεωρητές που εκτελούνται τοπικά και να εισάγετε κώδικα σε αυτούς.
Σημειώστε ότι οι εκμεταλλεύσεις RCE του NodeJS δεν θα λειτουργήσουν αν συνδεθείτε σε έναν περιηγητή μέσω του Chrome DevTools Protocol (πρέπει να ελέγξετε το API για να βρείτε ενδιαφέροντα πράγματα να κάνετε με αυτό).
Αν ήρθατε εδώ ψάχνοντας πώς να αποκτήσετε RCE από μια XSS σε Electron παρακαλώ ελέγξτε αυτή τη σελίδα.
Ορισμένοι κοινοί τρόποι για να αποκτήσετε RCE όταν μπορείτε να συνδεθείτε σε έναν Node inspector είναι η χρήση κάποιου όπως (φαίνεται ότι αυτό δεν θα λειτουργήσει σε σύνδεση με το Chrome DevTools protocol):
You can check the API here: https://chromedevtools.github.io/devtools-protocol/ In this section I will just list interesting things I find people have used to exploit this protocol.
In the CVE-2021-38112 Η Rhino security ανακάλυψε ότι μια εφαρμογή βασισμένη σε CEF καταχώρησε μια προσαρμοσμένη URI στο σύστημα (workspaces://) που έλαβε την πλήρη URI και στη συνέχεια εκκίνησε την εφαρμογή βασισμένη σε CEF με μια ρύθμιση που κατασκευαζόταν εν μέρει από αυτήν την URI.
Ανακαλύφθηκε ότι οι παράμετροι URI αποκωδικοποιούνταν URL και χρησιμοποιούνταν για να εκκινήσουν την βασική εφαρμογή CEF, επιτρέποντας σε έναν χρήστη να εισάγει τη σημαία --gpu-launcher
στη γραμμή εντολών και να εκτελέσει αυθαίρετα πράγματα.
So, a payload like:
Θα εκτελέσει ένα calc.exe.
Αλλάξτε τον φάκελο όπου θα αποθηκευτούν τα κατεβασμένα αρχεία και κατεβάστε ένα αρχείο για να εγγράψετε τον συχνά χρησιμοποιούμενο κώδικα πηγής της εφαρμογής με τον κακόβουλο κώδικά σας.
Σύμφωνα με αυτή την ανάρτηση: https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148 είναι δυνατό να αποκτηθεί RCE και να εξαχθούν εσωτερικές σελίδες από τον ποταμό.
Σε ένα πραγματικό περιβάλλον και μετά την παραβίαση ενός υπολογιστή χρήστη που χρησιμοποιεί πρόγραμμα περιήγησης βασισμένο σε Chrome/Chromium, θα μπορούσατε να εκκινήσετε μια διαδικασία Chrome με την αποσφαλμάτωση ενεργοποιημένη και να προωθήσετε την θύρα αποσφαλμάτωσης ώστε να μπορείτε να έχετε πρόσβαση σε αυτήν. Με αυτόν τον τρόπο θα είστε σε θέση να εξετάσετε τα πάντα που κάνει το θύμα με το Chrome και να κλέψετε ευαίσθητες πληροφορίες.
Ο κρυφός τρόπος είναι να τερματίσετε κάθε διαδικασία Chrome και στη συνέχεια να καλέσετε κάτι σαν
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)