<summary><strong>Aprenda hacking no AWS do zero ao herói com</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios github do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
Electron é **baseado no Chromium**, mas não é um navegador. Certos princípios e mecanismos de segurança implementados pelos navegadores modernos não estão presentes.\
Você pode ver o Electron como um aplicativo local de backend+frontend onde **NodeJS** é o **backend** e **chromium** é o **frontend**.
npx asar extract app.asar destfolder #Extract everything
npx asar extract-file app.asar main.js #Extract just a file
```
No código-fonte de um aplicativo Electron, dentro de `packet.json`, você pode encontrar especificado o arquivo `main.js` onde as configurações de segurança são definidas.
As configurações do **processo de renderização** podem ser **configuradas** no **processo principal** dentro do arquivo main.js. Algumas das configurações irão **prevenir que a aplicação Electron obtenha RCE** ou outras vulnerabilidades se as **configurações estiverem corretamente configuradas**.
A aplicação desktop pode ter acesso ao dispositivo do usuário através das APIs Node. As seguintes duas configurações são responsáveis por fornecer mecanismos para **prevenir que o JavaScript da aplicação tenha acesso direto ao dispositivo do usuário** e comandos a nível de sistema.
* [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - está desligado por padrão. Ele restringirá as ações que o NodeJS pode executar.
* **`nodeIntegrationInSubframes`**- está `desligado` por padrão.
* Se **`nodeIntegration`** estiver **habilitado**, isso permitiria o uso das APIs **Node.js** em páginas web que são **carregadas em iframes** dentro de uma aplicação Electron.
* Se **`nodeIntegration`** estiver **desabilitado**, então os preloads serão carregados no iframe
Se o **nodeIntegration** estiver configurado como **on**, o JavaScript de uma página web pode usar facilmente os recursos do Node.js apenas chamando o `require()`. Por exemplo, a maneira de executar o aplicativo calc no Windows é:
O _**contextIsolation**_ introduz **contextos separados entre os scripts da página web e o código interno do JavaScript do Electron** de modo que a execução do JavaScript de cada código não afete o outro. Esta é uma característica necessária para eliminar a possibilidade de RCE.
Se houver restrições aplicadas quando você clica em um link, você pode ser capaz de contorná-las **fazendo um clique com o botão do meio** em vez de um clique esquerdo regular
Se a aplicação desktop Electron for implantada com as configurações adequadas de `nodeIntegration`, `contextIsolation`; isso simplesmente significa que **RCE do lado do cliente, visando scripts de pré-carregamento ou código nativo do Electron a partir do processo principal, não pode ser alcançado**.
O aplicativo de desktop **sobrepõe esses listeners** para implementar a própria **lógica de negócios** do aplicativo de desktop. Durante a criação de novas janelas, o aplicativo verifica se o link navegado deve ser aberto em uma janela ou aba do aplicativo de desktop, ou se deve ser aberto no navegador web. Em nosso exemplo, a verificação é implementada com a função `openInternally`, se ela retornar `false`, o aplicativo assumirá que o link deve ser aberto no navegador web usando a função `shell.openExternal`.
De acordo com as melhores práticas de segurança do Electron JS, a função `openExternal`**não deve aceitar conteúdo não confiável****porque isso poderia levar a RCE abusando de diferentes protocolos** se o aplicativo não limitar a navegação dos usuários através de protocolos como https:// ou http://.
Diferentes sistemas operacionais suportam diferentes protocolos que podem desencadear RCE, para mais informações sobre eles, confira [https://positive.security/blog/url-open-rce](https://positive.security/blog/url-open-rce#windows-10-19042), mas aqui estão alguns exemplos do Windows:
Para mais informações sobre estes exemplos, consulte [https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8](https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8) e [https://benjamin-altpeter.de/shell-openexternal-dangers/](https://benjamin-altpeter.de/shell-openexternal-dangers/)
Se `contextIsolation` estiver definido como false, você pode tentar usar \<webview> (similar a \<iframe>, mas pode carregar arquivos locais) para ler arquivos locais e exfiltrá-los: usando algo como **\<webview src=”file:///etc/passwd”>\</webview>:**
Outra maneira de **ler um arquivo interno** a partir deste [**relatório**](https://bugcrowd.com/disclosures/f7ce8504-0152-483b-bbf3-fb9b759f9f89/critical-local-file-read-in-electron-desktop-app):
Se o **chromium** usado pela aplicação for **antigo** e houver **vulnerabilidades conhecidas** nele, pode ser possível **explorá-lo e obter RCE através de um XSS**.\
Supondo que você encontrou um XSS mas **não pode disparar RCE ou roubar arquivos internos**, você poderia tentar usá-lo para **roubar credenciais via phishing**.
A chamada para **`openInternally`** decidirá se o **link** será **aberto** na **janela do desktop** como um link pertencente à plataforma, **ou** se será aberto no **navegador como um recurso de terceiros**.
No caso de a **regex** usada pela função ser **vulnerável a bypasses** (por exemplo, por **não escapar os pontos dos subdomínios**), um atacante poderia abusar do XSS para **abrir uma nova janela que** estará localizada na infraestrutura do atacante **solicitando credenciais** ao usuário:
* [**Electronegativity**](https://github.com/doyensec/electronegativity) é uma ferramenta para identificar má configurações e anti-padrões de segurança em aplicações baseadas em Electron.
* [**Electrolint**](https://github.com/ksdmitrieva/electrolint) é um plugin de código aberto para VS Code para aplicações Electron que utiliza Electronegativity.
* [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) para verificar bibliotecas de terceiros vulneráveis
* [**Electro.ng**](https://electro.ng/): É necessário comprar
Em [https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s) você pode encontrar um laboratório para explorar aplicações Electron vulneráveis.
* Mais pesquisas e artigos sobre segurança do Electron em [https://github.com/doyensec/awesome-electronjs-hacking](https://github.com/doyensec/awesome-electronjs-hacking)
<summary><strong>Aprenda hacking no AWS do zero ao herói com</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios github do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).