Electron contextIsolation RCE via preload code
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Ejemplo 1
Este código abre enlaces http(s) con el navegador predeterminado:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2730383215-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FOGiU7XValBchYYDg6h1H%252Fuploads%252Fgit-blob-794f5c4c2e6f4aa98087152c80f3c5f9813212c3%252Fimage%2520%28768%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=716dad77&sv=1)
Algo como file:///C:/Windows/systemd32/calc.exe
podría usarse para ejecutar una calculadora, el 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 arbitraria de páginas:
Como la llamada a SAFE_PROTOCOLS.indexOf
siempre devolverá 1337, el atacante puede eludir la protección y ejecutar el calc. Exploit final:
Revisa las diapositivas originales para otras formas de ejecutar programas sin que aparezca un aviso pidiendo permisos.
Aparentemente, otra forma de cargar y ejecutar código es acceder a algo como file://127.0.0.1/electron/rce.jar
Ejemplo 2: RCE de la aplicación Discord
Ejemplo de https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1
Al revisar los scripts de precarga, descubrí que Discord expone la función, que permite que algunos módulos permitidos sean llamados a través de DiscordNative.nativeModules.requireModule('MODULE-NAME')
, en la página web.
Aquí, no pude usar módulos que se pueden utilizar para RCE directamente, como el módulo child_process, pero encontré un código donde se puede lograr RCE al sobrescribir los métodos incorporados de JavaScript e interferir con la ejecución del módulo expuesto.
Lo siguiente es la 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 sobrescribo RegExp.prototype.test
y Array.prototype.join
.
La función getGPUDriverVersions
intenta ejecutar el programa utilizando la biblioteca "execa", como se muestra a continuación:
Normalmente, el execa intenta ejecutar "nvidia-smi.exe", que está especificado en la variable nvidiaSmiPath
, sin embargo, debido a la sobreescritura de RegExp.prototype.test
y Array.prototype.join
, el argumento se reemplaza por "calc" en el procesamiento interno de _execa_**.
Específicamente, el argumento se reemplaza cambiando las siguientes dos partes.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated