Discord Electron ISO Boundary Validation PoC
Périmètre
Ce dépôt est un harnais de validation proof-of-concept pour le durcissement des frontières Electron dans les architectures de bureau de type Discord. Il modélise la séparation renderer/processus principal, la politique de pont preload, l'exposition des canaux IPC, les contrôles de navigation et la supervision de l'exécution afin d'étudier comment une mauvaise configuration peut affaiblir les garanties d'isolation d'une application.
Les détails du cas de référence sont suivis à l'adresse :
https://bugbounty.com/211356433
Contexte de la vulnérabilité
L'étude de cas repose sur la chaîne de vulnérabilités de l'application de bureau Discord de 2020 impliquant Electron CVE-2020-15215 (contournement de l'isolation de contexte) et CVE-2020-15174 (échec de la protection de navigation / anti-framebusting), combinée à une condition XSS en amont dans le contenu tiers embarqué [web:5][web:19][web:20].
Le harnais se concentre sur des conditions liées à la sécurité, telles que :
- routage des commandes du renderer vers le processus principal
- exposition du pont preload et application de sa politique
- mappage autorisation/refus IPC
- gestion de la navigation et des transitions de frame racine
- transitions d'état de session sous charges de travail aléatoires
- ordonnancement des files d'attente du runtime et supervision des processus
- chemins d'intégration spécifiques à la plateforme
Topologie du dépôt
Runtime principal
src/main/
- construction du cycle de vie
- synthèse des préférences de fenêtre
- état de supervision des processus
- transitions des événements d'alimentation
src/runtime/
- registre des jobs
- modélisation de la file de priorité
- flux du planificateur par ticks
Frontières IPC et privilèges
src/ipc/
- enregistrement des canaux
- résolution des routes
src/preload/
- mappage de la surface du pont
- évaluation de la politique du pont
src/security/guards/
- filtrage des invocations
- mise en forme des charges utiles
src/security/policies/
- composition de la politique de fenêtre
Réseau et protocole
src/network/rest/
- construction des routes REST et helpers de mise en forme des requêtes
src/network/gateway/
- transitions d'état des événements de la passerelle
src/network/rpc/
- construction des trames RPC et suivi des trames en cours
Modules d'état du domaine
src/modules/guilds/, src/modules/channels/, src/modules/voice/
src/modules/auth/, src/modules/presence/, src/modules/experiments/
src/cache/, src/database/, src/commands/, src/sessions/, src/state/
Sous-systèmes étendus
src/rendering/ pour les surfaces de mise en page/thème/canvas
src/media/ pour les étapes de pipeline audio/image/vidéo
src/search/ pour les magasins d'index/requête/classement
src/ml/ pour les graphes de caractéristiques/inférence/pipeline
src/billing/ pour les chemins plan/facture/grand livre
src/moderation/ pour les filtres/signalements/actions
src/compliance/ pour les catalogues de politiques et les pistes d'audit
src/bots/ pour l'état runtime/magasin/gateway des bots
src/platform/ pour les adaptateurs linux/windows/mac
Fonctionnalité de validation
Le PoC fournit des chemins déterministes et stochastiques pour la validation de l'analyse des frontières :
- Simulation d'historique daté Git avec métadonnées d'auteur séparées par rôle et progression de la chronologie (
scripts/simulate-history.ps1).
- Génération de fixtures pour l'amorçage répété d'identités d'objets (
scripts/generate-fixture.js).
- Enregistrement des canaux, plus résolution et consultation de la carte d'autorisation.
- Couplage politique de fenêtre et politique de preload pour l'analyse des chemins de privilèges.
- Transitions de chaîne de réducteurs et de registre de sessions pour les charges de commandes à forte rotation.
- Mouvement du cycle de vie file/job/planificateur sous instantanés d'état sérialisés.
- Exports de modules structurés qui isolent chaque sous-système avec état comme surfaces de fonctions pures.
Construction et exécution
Prérequis
- Node.js 18+
- npm 9+
- Git 2.30+
- PowerShell 7+ (pour le script de simulation de chronologie)
Installation
Générer la charge utile de fixture
node scripts/generate-fixture.js
Valider le chargement des modules sur l'ensemble de l'arborescence source
node -e "const fs=require('fs');const path=require('path');function walk(d){for(const e of fs.readdirSync(d)){const p=path.join(d,e);const s=fs.statSync(p);if(s.isDirectory())walk(p);else if(p.endsWith('.js')) require('./'+p);}} walk('src'); console.log('ok');"
Branche/amorçage optionnel
git checkout -B main
node scripts/generate-fixture.js > fixtures/generated.json
Notes d'ingénierie
- Tous les modules sont structurés autour de
create*, set*, get* et de transitions de worker par étapes afin de simplifier le traçage différentiel à travers les frontières des sous-systèmes.
- L'organisation des fichiers préserve une segmentation stricte par domaine afin de rendre l'instrumentation par surface simple à mettre en œuvre.
- Les couches IPC, preload, sécurité, runtime et réseau sont maintenues orthogonales afin que l'instrumentation puisse être activée sans mutation inter-domaines.
- Ce README documente volontairement un harnais de reproduction défensif, et non une chaîne d'exploitation fonctionnelle.
Attribution
Nishant
Auteurs :
- Arjun Mehta
- Sofia Alvarez