NishantIyer/CVE-2020-15215-Discord-POC
GitHub: NishantIyer/CVE-2020-15215-Discord-POC
针对 Discord 桌面端 Electron 架构的防御性安全研究工具,建模并验证上下文隔离绕过与导航保护失效场景下的进程边界强度。
Stars: 17 | Forks: 14
# Discord Electron ISO 边界验证 PoC
## 范围
本仓库是一个针对 Discord 风格桌面架构中 Electron 边界强化的概念验证测试工具。它对渲染器/主进程分离、预加载桥接策略、IPC 通道暴露、导航控制和运行时监控进行建模,以研究错误配置如何削弱应用程序的隔离保证。
参考案例详情追踪于:
[https://bugbounty.com/211356433](https://bugbounty.com/211356433)
## 漏洞背景
本案例研究基于 2020 年 Discord 桌面应用程序的漏洞链,涉及 Electron CVE-2020-15215(上下文隔离绕过)和 CVE-2020-15174(导航 / framebusting 保护失效),并结合了嵌入式第三方内容 [web:5][web:19][web:20] 中的上游 XSS 条件。
该测试工具重点关注以下与安全相关的条件:
- 渲染器到主进程的命令路由
- 预加载桥接暴露与策略执行
- IPC 允许/拒绝映射
- 导航和顶层框架转换处理
- 随机工作负载下的会话状态转换
- 运行时队列调度与进程监控
- 特定平台的集成路径
## 仓库拓扑
### 核心运行时
- `src/main/`
- 生命周期构建
- 窗口偏好设置合成
- 进程监控状态
- 电源事件转换
- `src/runtime/`
- 作业注册表
- 优先级队列建模
- tick 调度器流程
### IPC 与权限边界
- `src/ipc/`
- 通道注册
- 路由解析
- `src/preload/`
- 桥接面映射
- 桥接策略评估
- `src/security/guards/`
- 调用过滤
- payload 整形
- `src/security/policies/`
- 窗口策略组合
### 网络与协议
- `src/network/rest/`
- REST 路由构建与请求结构辅助工具
- `src/network/gateway/`
- gateway 事件状态转换
- `src/network/rpc/`
- RPC 帧构建与进行中跟踪
### 领域状态模块
- `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/`
### 扩展子系统
- `src/rendering/` 用于布局/主题/画布表面
- `src/media/` 用于音频/图像/视频 pipeline 阶段
- `src/search/` 用于索引/查询/排名存储
- `src/ml/` 用于特征/推理/pipeline 图
- `src/billing/` 用于计划/发票/账本路径
- `src/moderation/` 用于过滤/报告/操作
- `src/compliance/` 用于策略目录和审计追踪
- `src/bots/` 用于 bot 运行时/存储/gateway 状态
- `src/platform/` 用于 linux/windows/mac 适配器
## 验证功能
该 PoC 为边界分析验证提供了确定性和随机性路径:
1. 具有角色分离的作者元数据和时间线进展的 Git 日期历史模拟 (`scripts/simulate-history.ps1`)。
2. 用于重复对象标识种子设定的 Fixture 生成 (`scripts/generate-fixture.js`)。
3. 通道注册以及授权映射解析和查找。
4. 用于权限路径分析的窗口策略和预加载策略耦合。
5. 针对高频变动命令工作负载的 Reducer 链和会话注册表转换。
6. 在序列化状态快照下的队列/作业/调度器生命周期移动。
7. 结构化的模块导出,将每个有状态子系统隔离为纯函数表面。
## 构建与执行
### 环境要求
- Node.js 18+
- npm 9+
- Git 2.30+
- PowerShell 7+ (用于时间线模拟脚本)
### 安装
```
npm install
```
### 生成 Fixture Payload
```
node scripts/generate-fixture.js
```
### 验证整个源代码树的模块加载
```
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');"
```
### 可选的分支/引导
```
git checkout -B main
node scripts/generate-fixture.js > fixtures/generated.json
```
## 工程说明
- 所有模块均围绕 `create*`、`set*`、`get*` 和分阶段的 worker 转换进行结构化,以简化跨子系统边界的差异跟踪。
- 文件布局保持严格的领域分割,使得每个表面的检测变得简单直接。
- IPC、预加载、安全、运行时和网络层保持正交,以便可以在不发生跨域修改的情况下启用检测。
- 本 README 有意记录了一个防御性的复现测试工具,而不是一个有效的漏洞利用链。
## 贡献者
Nishant
作者:
- Arjun Mehta
- Sofia Alvarez
标签:AI合规, Bug Bounty, CVE-2020-15174, CVE-2020-15215, Discord, Electron, Go语言工具, IPC安全, MITM代理, PoC, Web报告查看器, XSS, 上下文隔离绕过, 可自定义解析器, 安全策略, 客户端安全, 导航控制, 提示词设计, 数据可视化, 暴力破解, 桌面应用安全, 漏洞情报, 漏洞验证框架, 网络安全, 自定义脚本, 足迹探测, 进程间通信, 隐私保护, 隔离边界验证, 预加载桥接