From dbb0551526d2a46f665c5718b033d87d17e61ef1 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 7 Jan 2025 18:30:49 +0000 Subject: [PATCH] Translated ['src/network-services-pentesting/pentesting-web/electron-des --- .../electron-desktop-apps/README.md | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md index 7b4a8c0d2..e7a918414 100644 --- a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md +++ b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md @@ -17,7 +17,7 @@ No código-fonte de um aplicativo Electron, dentro de `packet.json`, você pode "name": "standard-notes", "main": "./app/index.js", ``` -O Electron tem 2 tipos de processos: +Electron tem 2 tipos de processos: - Processo Principal (tem acesso completo ao NodeJS) - Processo de Renderização (deve ter acesso restrito ao NodeJS por razões de segurança) @@ -32,9 +32,9 @@ let win = new BrowserWindow() //Open Renderer Process win.loadURL(`file://path/to/index.html`) ``` -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 **impedir que o aplicativo Electron obtenha RCE** ou outras vulnerabilidades se as **configurações estiverem corretamente configuradas**. +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**. -O aplicativo Electron **pode acessar o dispositivo** via APIs Node, embora possa ser configurado para impedir isso: +A aplicação Electron **pode acessar o dispositivo** via APIs Node, embora possa ser configurada para impedir isso: - **`nodeIntegration`** - está `desligado` por padrão. Se ativado, permite acessar recursos do Node a partir do processo de renderização. - **`contextIsolation`** - está `ativado` por padrão. Se desligado, os processos principal e de renderização não estão isolados. @@ -42,7 +42,7 @@ O aplicativo Electron **pode acessar o dispositivo** via APIs Node, embora possa - [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - está desligado por padrão. Isso restringirá as ações que o NodeJS pode realizar. - Integração do Node em Workers - **`nodeIntegrationInSubframes`** - está `desligado` por padrão. -- Se **`nodeIntegration`** estiver **ativado**, isso permitiria o uso de **APIs Node.js** em páginas da web que estão **carregadas em iframes** dentro de um aplicativo Electron. +- Se **`nodeIntegration`** estiver **ativado**, isso permitiria o uso de **APIs Node.js** em páginas da web que estão **carregadas em iframes** dentro de uma aplicação Electron. - Se **`nodeIntegration`** estiver **desativado**, então os pré-carregamentos serão carregados no iframe. Exemplo de configuração: @@ -95,7 +95,7 @@ onerror="alert(require('child_process').execSync('ls -l').toString());" /> src="x" onerror="alert(require('child_process').execSync('uname -a').toString());" /> ``` -### Capturar tráfego +### Captura de tráfego Modifique a configuração start-main e adicione o uso de um proxy como: ```javascript @@ -103,7 +103,7 @@ Modifique a configuração start-main e adicione o uso de um proxy como: ``` ## Injeção de Código Local do Electron -Se você puder executar localmente um aplicativo Electron, é possível que você consiga fazer com que ele execute código JavaScript arbitrário. Confira como em: +Se você puder executar localmente um aplicativo Electron, é possível que você consiga fazer com que ele execute código javascript arbitrário. Confira como em: {{#ref}} ../../../macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md @@ -177,7 +177,7 @@ electron-contextisolation-rce-via-ipc.md ### Bypass do evento de clique -Se houver restrições aplicadas ao clicar em um link, você pode ser capaz de contorná-las **fazendo um clique do meio** em vez de um clique esquerdo regular. +Se houver restrições aplicadas ao clicar em um link, você pode ser capaz de contorná-las **fazendo um clique do meio** em vez de um clique esquerdo normal. ```javascript window.addEventListener('click', (e) => { ``` @@ -185,7 +185,7 @@ window.addEventListener('click', (e) => { Para mais informações sobre esses 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/) -Ao implantar um aplicativo de desktop Electron, garantir as configurações corretas para `nodeIntegration` e `contextIsolation` é crucial. Está estabelecido que **execução remota de código (RCE)** do lado do cliente direcionando scripts de preload ou o código nativo do Electron a partir do processo principal é efetivamente prevenido com essas configurações em vigor. +Ao implantar um aplicativo de desktop Electron, garantir as configurações corretas para `nodeIntegration` e `contextIsolation` é crucial. Está estabelecido que **execução remota de código do lado do cliente (RCE)** direcionando scripts de preload ou o código nativo do Electron a partir do processo principal é efetivamente prevenido com essas configurações em vigor. Quando um usuário interage com links ou abre novas janelas, ouvintes de eventos específicos são acionados, os quais são cruciais para a segurança e funcionalidade do aplicativo: ```javascript @@ -202,7 +202,7 @@ Esses listeners são **substituídos pelo aplicativo de desktop** para implement As melhores práticas de segurança do Electron JS desaconselham aceitar conteúdo não confiável com a função `openExternal`, pois isso pode levar a RCE através de vários protocolos. Sistemas operacionais suportam diferentes protocolos que podem acionar RCE. Para exemplos detalhados e mais explicações sobre este tópico, pode-se consultar [este recurso](https://positive.security/blog/url-open-rce#windows-10-19042), que inclui exemplos de protocolos do Windows capazes de explorar essa vulnerabilidade. -No macOS, a função `openExternal` pode ser explorada para executar comandos arbitrários, como em `shell.openExternal('file:///System/Applications/Calculator.app')`. +No macos, a função `openExternal` pode ser explorada para executar comandos arbitrários, como em `shell.openExternal('file:///System/Applications/Calculator.app')`. **Exemplos de exploits de protocolos do Windows incluem:** ```html @@ -248,19 +248,19 @@ frames[0].document.body.innerText ``` ## **RCE: XSS + Old Chromium** -Se o **chromium** usado pelo aplicativo é **antigo** e há **vulnerabilidades conhecidas** nele, pode ser possível **explorá-lo e obter RCE através de um XSS**.\ +Se o **chromium** usado pela aplicação é **antigo** e há **vulnerabilidades conhecidas** nele, pode ser possível **explorá-lo e obter RCE através de um XSS**.\ Você pode ver um exemplo neste **writeup**: [https://blog.electrovolt.io/posts/discord-rce/](https://blog.electrovolt.io/posts/discord-rce/) ## **XSS Phishing via Internal URL regex bypass** Supondo que você encontrou um XSS, mas **não consegue acionar RCE ou roubar arquivos internos**, você poderia tentar usá-lo para **roubar credenciais via phishing**. -Primeiro de tudo, você precisa saber o que acontece quando tenta abrir uma nova URL, verificando o código JS no front-end: +Primeiramente, você precisa saber o que acontece quando tenta abrir uma nova URL, verificando o código JS no front-end: ```javascript webContents.on("new-window", function (event, url, disposition, options) {} // opens the custom openInternally function (it is declared below) webContents.on("will-navigate", function (event, url) {} // opens the custom openInternally function (it is declared below) ``` -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 3ª parte**. +A chamada para **`openInternally`** decidirá se o **link** será **aberto** na **janela do desktop**, pois é um link pertencente à plataforma, **ou** se será aberto no **navegador como um recurso de 3ª parte**. 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: ```html @@ -276,7 +276,7 @@ O módulo Remote do Electron permite que **processos de renderização acessem A > Embora o módulo **remote** exponha algumas APIs do principal para os processos de renderização, não é simples obter RCE apenas abusando dos componentes. No entanto, os componentes podem expor informações sensíveis. > [!WARNING] -> Muitos aplicativos que ainda usam o módulo remoto o fazem de uma maneira que **exige que o NodeIntegration esteja habilitado** no processo de renderização, o que é um **grande risco de segurança**. +> Muitos aplicativos que ainda usam o módulo remoto o fazem de uma maneira que **exige que o NodeIntegration esteja habilitado** no processo de renderização, o que é um **enorme risco de segurança**. Desde o Electron 14, o módulo `remote` do Electron pode ser habilitado em várias etapas, pois, por razões de segurança e desempenho, é **recomendado não usá-lo**. @@ -308,7 +308,7 @@ O **[blog post](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)* - **`app.importCertificate(options, callback)`** - **Importa** um **certificado PKCS#12** para o **armazenamento de certificados** do sistema (apenas Linux). Um **callback** pode ser usado para lidar com o resultado. - **`app.moveToApplicationsFolder([options])`** -- **Move** a aplicação para a **pasta Aplicativos** (no macOS). Ajuda a garantir uma **instalação padrão** para usuários de Mac. +- **Move** a aplicação para a **pasta de Aplicativos** (no macOS). Ajuda a garantir uma **instalação padrão** para usuários de Mac. - **`app.setJumpList(categories)`** - **Define** ou **remove** uma **Jump List personalizada** no **Windows**. Você pode especificar **categorias** para organizar como as tarefas aparecem para o usuário. - **`app.setLoginItemSettings(settings)`** @@ -367,7 +367,7 @@ Para mais informações, consulte [https://blog.doyensec.com/2021/02/16/electron 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 aplicativos Electron vulneráveis. -Alguns comandos que ajudarão você no laboratório: +Alguns comandos que irão te ajudar no laboratório: ```bash # Download apps from these URls # Vuln to nodeIntegration