Node inspector/CEF debug abuse
Βασικές Πληροφορίες
Από τα έγγραφα: Όταν ξεκινά με τον διακόπτη --inspect
, ένα διεργασία Node.js ακούει για έναν πελάτη αποσφαλμάτωσης. Από προεπιλογή, θα ακούσει στη διεύθυνση και θύρα 127.0.0.1:9229
. Κάθε διεργασία έχει επίσης ανατεθεί ένα μοναδικό UUID.
Οι πελάτες του Inspector πρέπει να γνωρίζουν και να καθορίζουν τη διεύθυνση του κεντρικού υπολογιστή, τη θύρα και το 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
για να ανοίξουν τον αποσφαλματωτή (οι προστασίες SSRF παραμένουν πολύ παρόμοιες). Ωστόσο, αντί να παρέχουν μια συνεδρία αποσφαλμάτωσης του NodeJS, θα επικοινωνήσουν με τον περιηγητή χρησιμοποιώντας το Chrome DevTools Protocol, που είναι μια διεπαφή για τον έλεγχο του περιηγητή, αλλά δεν υπάρχει άμεση ευπάθεια RCE.
Όταν ξεκινάτε έναν αποσφαλματωμένο περιηγητή, κάτι τέτοιο θα εμφανιστεί:
Προγράμματα περιήγησης, WebSockets και πολιτική ίδιας προέλευσης
Οι ιστότοποι που ανοίγουν σε έναν πρόγραμμα περιήγησης μπορούν να κάνουν αιτήσεις WebSocket και HTTP σύμφωνα με το μοντέλο ασφαλείας του προγράμματος περιήγησης. Μια αρχική σύνδεση HTTP είναι απαραίτητη για να λάβετε ένα μοναδικό αναγνωριστικό συνεδρίας του εργαλείου αποσφαλμάτωσης. Η πολιτική ίδιας προέλευσης αποτρέπει τους ιστότοπους από το να μπορούν να κάνουν αυτήν τη σύνδεση HTTP. Για επιπλέον ασφάλεια ενάντια σε επιθέσεις DNS rebinding, το Node.js επαληθεύει ότι οι κεφαλίδες 'Host' για τη σύνδεση καθορίζουν είτε μια διεύθυνση IP είτε το localhost
ή το localhost6
ακριβώς.
Αυτά τα μέτρα ασφαλείας αποτρέπουν την εκμετάλλευση του εργαλείου αποσφαλμάτωσης για να εκτελέσει κώδικα απλά αποστέλλοντας μια αίτηση HTTP (που θα μπορούσε να γίνει εκμεταλλευόμενη μια ευπάθεια SSRF).
Έναρξη του εργαλείου αποσφαλμάτωσης σε εκτελούμενες διεργασίες
Μπορείτε να στείλετε το σήμα SIGUSR1 σε μια εκτελούμενη διεργασία nodejs για να την κάνετε να ξεκινήσει το εργαλείο αποσφαλμάτωσης στην προεπιλεγμένη θύρα. Ωστόσο, σημειώστε ότι χρειάζεστε επαρκή δικαιώματα, οπότε αυτό μπορεί να σας παράσχει προνομιούχη πρόσβαση σε πληροφορίες μέσα στη διεργασία αλλά όχι μια άμεση ανέλιξη προνομιών.
Αυτό είναι χρήσιμο σε containers επειδή δεν είναι εφικτό να τερματίσετε τη διεργασία και να ξεκινήσετε μια νέα με την παράμετρο --inspect
, καθώς το container θα τερματιστεί μαζί με τη διεργασία.
Σύνδεση με τον inspector/debugger
Για να συνδεθείτε σε έναν περιηγητή βασισμένο σε Chromium, μπορείτε να αποκτήσετε πρόσβαση στις διευθύνσεις URL chrome://inspect
ή edge://inspect
για το Chrome ή το Edge αντίστοιχα. Κάνοντας κλικ στο κουμπί Configure, βεβαιωθείτε ότι οι στόχοι (host) και θύρες είναι σωστά καταχωρημένοι. Η εικόνα παρουσιάζει ένα παράδειγμα Remote Code Execution (RCE):
Χρησιμοποιώντας τη γραμμή εντολών, μπορείτε να συνδεθείτε σε έναν debugger/inspector με την εντολή:
Το εργαλείο https://github.com/taviso/cefdebug, επιτρέπει να βρεθούν οι επιθεωρητές που τρέχουν τοπικά και να εισαχθεί κώδικας σε αυτούς.
Σημείωση ότι τα εκμεταλλεύματα NodeJS RCE δεν θα λειτουργήσουν αν είστε συνδεδεμένοι σε ένα πρόγραμμα περιήγησης μέσω Chrome DevTools Protocol (πρέπει να ελέγξετε το API για να βρείτε ενδιαφέροντα πράγματα που μπορείτε να κάνετε με αυτό).
RCE στον επιθετή NodeJS Debugger/Inspector
Αν ήρθατε εδώ ψάχνοντας πώς να πάρετε RCE από ένα XSS στο Electron, παρακαλούμε ελέγξτε αυτήν τη σελίδα.
Ορισμένοι συνηθισμένοι τρόποι για να αποκτήσετε RCE όταν μπορείτε να συνδεθείτε σε έναν επιθετή Node είναι να χρησιμοποιήσετε κάτι όπως (φαίνεται ότι αυτό δεν θα λειτουργήσει σε μια σύνδεση με το Chrome DevTools protocol):
Πληροφορίες Πακέτου Chrome DevTools
Μπορείτε να ελέγξετε το API εδώ: https://chromedevtools.github.io/devtools-protocol/ Σε αυτήν την ενότητα θα απαριθμήσω απλώς ενδιαφέρουσες πράξεις που έχουν χρησιμοποιηθεί για να εκμεταλλευτούν αυτό το πρωτόκολλο.
Έγχυση Παραμέτρων μέσω Deep Links
Στο CVE-2021-38112, η Rhino Security ανακάλυψε ότι μια εφαρμογή βασισμένη στο CEF καταχώρησε ένα προσαρμοσμένο URI στο σύστημα (workspaces://) που λάμβανε το πλήρες URI και στη συνέχεια εκκινούσε την εφαρμογή βασισμένη στο CEF με μια διαμόρφωση που κατασκευάστηκε εν μέρει από αυτό το URI.
Ανακαλύφθηκε ότι οι παράμετροι του URI αποκωδικοποιούνταν και χρησιμοποιούνταν για να εκκινήσουν τη βασική εφαρμογή CEF, επιτρέποντας σε έναν χρήστη να εισαγάγει τη σημαία --gpu-launcher
στη γραμμή εντολών και να εκτελέσει αυθαίρετες ενέργειες.
Έτσι, ένα πακέτο όπως:
Θα εκτελέσει ένα calc.exe.
Αντικατάσταση Αρχείων
Αλλάξτε τον φάκελο όπου θα αποθηκεύονται τα κατεβασμένα αρχεία και κατεβάστε ένα αρχείο για να αντικαταστήσετε το συχνά χρησιμοποιούμενο πηγαίο κώδικα της εφαρμογής με τον κακόβουλο κώδικά σας.
Webdriver RCE και εξαγωγή δεδομένων
Σύμφωνα με αυτήν την ανάρτηση: https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148 είναι δυνατόν να αποκτηθεί RCE και να εξαχθούν εσωτερικές σελίδες από τον οδηγό.
Μετά την εκμετάλλευση
Σε ένα πραγματικό περιβάλλον και μετά την διάβρωση ενός υπολογιστή χρήστη που χρησιμοποιεί πρόγραμμα περιήγησης βασισμένο σε Chrome/Chromium, μπορείτε να ξεκινήσετε ένα διεργασία Chrome με την ενεργοποίηση της αποσφαλμάτωσης και την προώθηση της θύρας αποσφαλμάτωσης έτσι ώστε να έχετε πρόσβαση σε αυτήν. Με αυτόν τον τρόπο θα μπορείτε να επιθεωρήσετε όλες τις ενέργειες που κάνει ο θύμα με το Chrome και να κλέψετε ευαίσθητες πληροφορίες.
Ο αόρατος τρόπος είναι να τερματίσετε κάθε διεργασία Chrome και στη συνέχεια να καλέσετε κάτι όπως
Αναφορές
Last updated