PoC de Validación de Límites ISO de Discord Electron
Alcance
Este repositorio es un banco de pruebas de validación de prueba de concepto para el endurecimiento de límites de Electron en arquitecturas de escritorio estilo Discord. Modela la separación renderer/proceso principal, la política del puente de preload, la exposición de canales IPC, los controles de navegación y la supervisión en tiempo de ejecución para estudiar cómo una mala configuración puede debilitar las garantías de aislamiento de una aplicación.
Los detalles del caso de referencia se registran en:
https://bugbounty.com/211356433
Contexto de vulnerabilidad
El caso de estudio se basa en la cadena de vulnerabilidades de la aplicación de escritorio de Discord de 2020 que involucra a Electron CVE-2020-15215 (omisión del aislamiento de contexto) y CVE-2020-15174 (fallo de protección de navegación / framebusting), combinado con una condición XSS aguas arriba en contenido incrustado de terceros [web:5][web:19][web:20].
El banco de pruebas se centra en condiciones relevantes para la seguridad, tales como:
- enrutamiento de comandos de renderer a main
- exposición del puente de preload y aplicación de políticas
- mapeo de permiso/denegación de IPC
- manejo de navegación y transiciones de marco superior
- transiciones de estado de sesión bajo cargas de trabajo aleatorizadas
- programación de colas en tiempo de ejecución y supervisión de procesos
- rutas de integración específicas de la plataforma
Topología del repositorio
Núcleo del runtime
src/main/
- construcción del ciclo de vida
- síntesis de preferencias de ventana
- estado de supervisión de procesos
- transiciones de eventos de energía
src/runtime/
- registro de trabajos
- modelado de colas de prioridad
- flujos del programador de ticks
Límites de IPC y privilegios
src/ipc/
- registro de canales
- resolución de rutas
src/preload/
- mapeo de la superficie del puente
- evaluación de la política del puente
src/security/guards/
- filtrado de invocaciones
- modelado de cargas útiles
src/security/policies/
- composición de políticas de ventana
Red y protocolo
src/network/rest/
- construcción de rutas REST y asistentes de forma de solicitudes
src/network/gateway/
- transiciones de estado de eventos del gateway
src/network/rpc/
- construcción de tramas RPC y seguimiento de solicitudes en curso
Módulos de estado de dominio
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/
Subsistemas extendidos
src/rendering/ para superficies de diseño/tema/lienzo
src/media/ para etapas del pipeline de audio/imagen/video
src/search/ para almacenes de índice/consulta/ranking
src/ml/ para gráficos de características/inferencia/pipeline
src/billing/ para rutas de plan/factura/libro mayor
src/moderation/ para filtros/informes/acciones
src/compliance/ para catálogos de políticas y pistas de auditoría
src/bots/ para el estado de runtime/almacén/gateway de bots
src/platform/ para adaptadores linux/windows/mac
Funcionalidad de validación
El PoC proporciona rutas deterministas y estocásticas para la validación del análisis de límites:
- Simulación de historial fechado con Git con metadatos de autor separados por rol y progresión de línea de tiempo (
scripts/simulate-history.ps1).
- Generación de fixtures para la siembra repetida de identidad de objetos (
scripts/generate-fixture.js).
- Registro de canales y resolución/búsqueda del mapa de autorización.
- Acoplamiento de política de ventana y política de preload para el análisis de rutas de privilegios.
- Transiciones de cadena de reducers y registro de sesiones para cargas de trabajo de comandos de alta rotación.
- Movimiento del ciclo de vida de cola/trabajo/programador bajo instantáneas de estado serializadas.
- Exportaciones de módulos estructurados que aíslan cada subsistema con estado como superficies de funciones puras.
Compilación y ejecución
Requisitos
- Node.js 18+
- npm 9+
- Git 2.30+
- PowerShell 7+ (para el script de simulación de línea de tiempo)
Instalación
Generar el payload del fixture
node scripts/generate-fixture.js
Validar la carga de módulos en todo el árbol de fuentes
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');"
Rama/arranque opcional
git checkout -B main
node scripts/generate-fixture.js > fixtures/generated.json
Notas de ingeniería
- Todos los módulos están estructurados en torno a
create*, set*, get* y transiciones de trabajadores por etapas para simplificar el trazado diferencial a través de los límites de los subsistemas.
- La estructura de archivos preserva una segmentación estricta por dominio para que la instrumentación por superficie sea sencilla.
- Las capas de IPC, preload, seguridad, runtime y red se mantienen ortogonales para que la instrumentación pueda habilitarse sin mutación entre dominios.
- Este README documenta intencionalmente un banco de reproducción defensivo, no una cadena de explotación funcional.
Atribución
Nishant
Autores:
- Arjun Mehta
- Sofia Alvarez