Translated ['src/network-services-pentesting/pentesting-web/electron-des

This commit is contained in:
Translator 2025-01-07 18:43:56 +00:00
parent dfd4d0215d
commit 72be85fc36

View File

@ -32,11 +32,11 @@ let win = new BrowserWindow()
//Open Renderer Process
win.loadURL(`file://path/to/index.html`)
```
Les paramètres du **renderer process** peuvent être **configurés** dans le **main process** à l'intérieur du fichier main.js. Certaines des configurations **empêcheront l'application Electron d'obtenir RCE** ou d'autres vulnérabilités si les **paramètres sont correctement configurés**.
Les paramètres du **renderer process** peuvent être **configurés** dans le **main process** à l'intérieur du fichier main.js. Certaines des configurations **empêcheront l'application Electron d'obtenir un RCE** ou d'autres vulnérabilités si les **paramètres sont correctement configurés**.
L'application Electron **pourrait accéder à l'appareil** via les API Node bien qu'elle puisse être configurée pour l'en empêcher :
- **`nodeIntegration`** - est `off` par défaut. S'il est activé, permet d'accéder aux fonctionnalités de Node depuis le renderer process.
- **`nodeIntegration`** - est `off` par défaut. S'il est activé, permet d'accéder aux fonctionnalités Node depuis le renderer process.
- **`contextIsolation`** - est `on` par défaut. S'il est désactivé, les processus principal et renderer ne sont pas isolés.
- **`preload`** - vide par défaut.
- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - est désactivé par défaut. Cela restreindra les actions que NodeJS peut effectuer.
@ -71,7 +71,7 @@ spellcheck: true,
},
}
```
Quelques **payloads RCE** de [ici](https://7as.es/electron/nodeIntegration_rce.txt) :
Quelques **payloads RCE** provenant de [ici](https://7as.es/electron/nodeIntegration_rce.txt) :
```html
Example Payloads (Windows):
<img
@ -152,7 +152,7 @@ runCalc()
## RCE : XSS + contextIsolation
Le _**contextIsolation**_ introduit les **contextes séparés entre les scripts de la page web et le code interne JavaScript d'Electron**, de sorte que l'exécution JavaScript de chaque code n'affecte pas l'autre. C'est une fonctionnalité nécessaire pour éliminer la possibilité de RCE.
Le _**contextIsolation**_ introduit les **contextes séparés entre les scripts de la page web et le code interne JavaScript d'Electron** afin que l'exécution JavaScript de chaque code n'affecte pas l'autre. C'est une fonctionnalité nécessaire pour éliminer la possibilité de RCE.
Si les contextes ne sont pas isolés, un attaquant peut :
@ -185,7 +185,7 @@ window.addEventListener('click', (e) => {
Pour plus d'informations sur ces exemples, consultez [https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8](https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8) et [https://benjamin-altpeter.de/shell-openexternal-dangers/](https://benjamin-altpeter.de/shell-openexternal-dangers/)
Lors du déploiement d'une application de bureau Electron, il est crucial de garantir les paramètres corrects pour `nodeIntegration` et `contextIsolation`. Il est établi que **l'exécution de code à distance côté client (RCE)** ciblant les scripts de préchargement ou le code natif d'Electron depuis le processus principal est efficacement empêchée avec ces paramètres en place.
Lors du déploiement d'une application de bureau Electron, il est crucial de s'assurer que les paramètres pour `nodeIntegration` et `contextIsolation` sont corrects. Il est établi que **l'exécution de code à distance côté client (RCE)** ciblant les scripts de préchargement ou le code natif d'Electron depuis le processus principal est efficacement empêchée avec ces paramètres en place.
Lorsqu'un utilisateur interagit avec des liens ou ouvre de nouvelles fenêtres, des écouteurs d'événements spécifiques sont déclenchés, qui sont cruciaux pour la sécurité et la fonctionnalité de l'application :
```javascript
@ -204,7 +204,7 @@ Les meilleures pratiques de sécurité d'Electron JS déconseillent d'accepter d
Sur macOS, la fonction `openExternal` peut être exploitée pour exécuter des commandes arbitraires comme dans `shell.openExternal('file:///System/Applications/Calculator.app')`.
**Exemples d'exploits de protocoles Windows incluent :**
**Les exemples d'exploits de protocoles Windows incluent :**
```html
<script>
window.open(
@ -270,7 +270,7 @@ window.open("<http://subdomainagoogleq.com/index.html>")
```
## Module distant
Le module distant d'Electron permet aux **processus de rendu d'accéder aux API du processus principal**, facilitant la communication au sein d'une application Electron. Cependant, l'activation de ce module introduit des risques de sécurité significatifs. Il élargit la surface d'attaque de l'application, la rendant plus susceptible aux vulnérabilités telles que les attaques par script intersite (XSS).
Le module distant d'Electron permet aux **processus de rendu d'accéder aux API du processus principal**, facilitant la communication au sein d'une application Electron. Cependant, l'activation de ce module introduit des risques de sécurité significatifs. Il élargit la surface d'attaque de l'application, la rendant plus susceptible aux vulnérabilités telles que les attaques de type cross-site scripting (XSS).
> [!TIP]
> Bien que le module **remote** expose certaines API du principal aux processus de rendu, il n'est pas simple d'obtenir un RCE uniquement en abusant des composants. Cependant, les composants peuvent exposer des informations sensibles.
@ -278,7 +278,7 @@ Le module distant d'Electron permet aux **processus de rendu d'accéder aux API
> [!WARNING]
> De nombreuses applications qui utilisent encore le module distant le font d'une manière qui **requiert que NodeIntegration soit activé** dans le processus de rendu, ce qui représente un **énorme risque de sécurité**.
Depuis Electron 14, le module `remote` d'Electron peut être activé en plusieurs étapes en raison de raisons de sécurité et de performance, il est **recommandé de ne pas l'utiliser**.
Depuis Electron 14, le module `remote` d'Electron peut être activé en plusieurs étapes en raison de raisons de sécurité et de performance, il est donc **recommandé de ne pas l'utiliser**.
Pour l'activer, il faut d'abord **l'activer dans le processus principal** :
```javascript
@ -336,13 +336,13 @@ console.log('Recent Places:', recentPlaces);
```
### **subscribeNotification / subscribeWorkspaceNotification**
* **Écoute** les **notifications natives macOS** en utilisant NSDistributedNotificationCenter.
* **Écoute** les **notifications macOS natives** en utilisant NSDistributedNotificationCenter.
* Avant **macOS Catalina**, vous pouviez intercepter **toutes** les notifications distribuées en passant **nil** à CFNotificationCenterAddObserver.
* Après **Catalina / Big Sur**, les applications en bac à sable peuvent toujours **s'abonner** à **de nombreux événements** (par exemple, **verrouillages/déverrouillages d'écran**, **montages de volume**, **activité réseau**, etc.) en enregistrant des notifications **par nom**.
### **getUserDefault / setUserDefault**
* **Interagit** avec **NSUserDefaults**, qui stocke les **préférences** d'application ou **globales** sur macOS.
* **Interagit** avec **NSUserDefaults**, qui stocke les **préférences** d'**application** ou **globales** sur macOS.
* **getUserDefault** peut **récupérer** des informations sensibles, telles que **les emplacements de fichiers récents** ou **la localisation géographique de l'utilisateur**.
@ -356,12 +356,25 @@ Cette fonction affiche le fichier donné dans un gestionnaire de fichiers, ce qu
Pour plus d'informations, consultez [https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)
## Content Security Policy
Les applications Electron devraient avoir une **Content Security Policy (CSP)** pour **prévenir les attaques XSS**. La **CSP** est une **norme de sécurité** qui aide à **prévenir** l'**exécution** de **code non fiable** dans le navigateur.
Elle est généralement **configurée** dans le fichier **`main.js`** ou dans le modèle **`index.html`** avec la CSP à l'intérieur d'une **balise meta**.
Pour plus d'informations, consultez :
{{#ref}}
pentesting-web/content-security-policy-csp-bypass/
{{#endref}}
## **Outils**
- [**Electronegativity**](https://github.com/doyensec/electronegativity) est un outil pour identifier les erreurs de configuration et les anti-modèles de sécurité dans les applications basées sur Electron.
- [**Electrolint**](https://github.com/ksdmitrieva/electrolint) est un plugin open source pour VS Code pour les applications Electron qui utilise Electronegativity.
- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) pour vérifier les bibliothèques tierces vulnérables.
- [**Electro.ng**](https://electro.ng/): Vous devez l'acheter.
- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) pour vérifier les bibliothèques tierces vulnérables
- [**Electro.ng**](https://electro.ng/): Vous devez l'acheter
## Labs