mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/pentesting-web/electron-des
This commit is contained in:
parent
11f658d2de
commit
dbb0551526
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user