
Discord Activity RCE 实战Exploitarium 如何用 WASM 模块构造客户端代码执行【免费下载链接】exploitariumA single archive of public exploit PoCs and vulnerability research writeups. At the time I post these, none have been reported. Feel free to report them yourself and take credit for the CVE if handed out lulz. Please do not abuse these. I do this so to allure people into the field, and Ive always found this is the most efficient way.项目地址: https://gitcode.com/GitHub_Trending/ex/exploitariumDiscord Activity RCE 是 Exploitarium 漏洞研究仓库中一条完整的客户端代码执行演示链针对 Discord 1.0.9245Electron 37.6.0的桌面客户端攻击者通过一个自定义 Activity 页面获得 V8 内存原语经 WASM 模块构造类型混淆、修补弹窗策略、伪造 Electron IPC 调用并持久化临时端点最终重启客户端并调用CreateProcessW启动 Windows 计算器。下文带你读懂这条从沙箱网页到任意程序执行的完整链路。 漏洞演示效果计算器从哪里来验证结果以 Windows 事件日志为锚点微软 AppModel-Runtime 事件201记录了计算器的启动窗口标题为Calculator且可见、处于激活状态。脱敏后的实测记录保存在 evidence/verified-stock-run.json完整说明见 README.md。目标属性实测值操作系统Windows 11 x6410.0.26200Discord 版本1.0.9245Stable 渠道Electron / Chromium / V837.6.0 / 138.0.7204.251 / 13.8.258.32-electron.0入口自定义 Activity启用沙箱的渲染器突破边界伪造 Electron IPC 持久化 WebApp 端点 请求重启原生调用CreateProcessW启动C:\Windows\System32\calc.exe事后恢复设置文件按 SHA-256 校验恢复Discord 回到原端点 关键点整条链的入口只是一个沙箱化的网页。它证明内存损坏原语在真实桌面客户端里可以被逐级放大为任意程序执行。 PoC 文件地图5 个模块各司其职文件作用exploit.html渲染器内存原语与生成的原生载荷构建wasm-module-builder.jsWebAssembly 字节码构造支持类型混淆的引信server.js一次性 Activity 服务器、载荷协调与完成信号收集run.ps1启动器校验目标哈希、备份设置、观察完成、恢复现场SHA256SUMS.txt各产物文件的哈希校验清单复现前提摘自 README 的 Requirements 一节Windows 11 x64、指定版本的 Discord 安装在%LOCALAPPDATA%\Discord\app-1.0.9245\、PATH 中有node、PowerShell 5.1、一条转发到本地 3077 端口的 HTTPS 隧道并且启动前必须关闭计算器。启动器会强制校验目标执行文件 SHA-256 一致、仅存在一个标准 Discord 浏览器进程、端口未被占用否则直接拒绝运行——这也是它能被称为针对原版stock客户端证明的原因。⛓️ 攻击链全景从沙箱页面到原生执行整个流程可概括为 17 步核心是四个阶段第一阶段V8 类型混淆 → 内存原语。Activity 渲染器带--enable-sandbox内载荷先通过精心设计的属性访问模式训练优化器再借助 WASM 引用回调改变值的内部表示触发类型混淆。由此得到一个笼内原语包恢复压缩对象地址构造伪造对象V8 指针压缩笼pointer compression cage内任意读/写通过生成代码与分派表结构取回完整原生指针。第二阶段内存补丁绕过弹窗策略。Activity 的 iframe 默认没有弹窗权限。载荷定位到 Discord 进程中拒绝辅助窗口的条件分支与相邻的沙箱标志传播分支将指令页临时改为可写改写这两条指令刷新指令缓存后恢复页保护再经由签名校验过的 V8 尾声正常返回。随后window.open()得以创建辅助 Discord 窗口并把第二阶段文档CSP nonce 已逐脚本改写注入其中。第三阶段伪造 Electron IPC持久化攻击端点。第二渲染器重建内存原语在加载的 Discord 映像中定位 Electron IPC 实现直接构造 V8 字符串与参数数组依次发起三个原生 IPC 调用DISCORD_SETTINGS_SET(WEBAPP_ENDPOINT, 活动代理源)DISCORD_SETTINGS_SET(WEBAPP_PATH, /native-proof)DISCORD_APP_RELAUNCH()两次设置写入与重启之间刻意保留 3 秒因为 IPC 通道是异步完成的——时序差一步链就断。第四阶段原生 Windows 启动。重启后的主渲染器加载临时端点的/native-proof页面在同一渲染器中再次运行引擎原语并换一个原生载荷它遍历标准可执行文件的导入表解析出CreateProcessW、Sleep、ExitProcess在合法的 Win64 调用帧上准备STARTUPINFOW与PROCESS_INFORMATION把计算器绝对路径写入生成的可执行内存并跳转。返回后渲染器刻意存活 10 秒确保计算器激活被 Windows 事件日志事件 201完整记录。 WASM 模块与内存原语为什么是 WebAssembly这条 PoC 最精彩的地方在于把 WASM 当成精确可控的触发器。wasm-module-builder.js 与 exploit.html 中内嵌了一小段 WASM 字节码模块导入一个env.callback引用类型回调渲染器在优化循环运行到第 90000 次迭代附近时切换回调行为令优化器把某个值的类型表示改错——混淆存储confused store随即将伪造的 map 与 elements 字段种进假的双精度数组全程不需要 JavaScript 主动检查那个瞬时 map 对象。几个工程细节值得新手留意金丝雀读取原生地址被消费前先做一次读取验证原语可用避免盲打不假设 JIT 地址载荷扫描活着的生成代码依次匹配阶段头、原生标记、分派入口与返回尾声确认无误才安装每条蹦床trampoline一次性协调服务器对每个 Activity 实例只发一张租约lease每次进程启动都刷新代号generation上一次的旧页面无法消费新租约/native-proof一旦被请求即关闭二级分派保证演示可观测、不重放。️ 修复方向与负责任使用README 的 Fix Direction 一节给出了防御视角的完整清单对 Electron 应用开发者极具参考价值携带相关引擎修复的 V8 构建校验渲染器来源对设置变更与应用重启IPC 通道的权限禁止 Activity/辅助渲染器调用特权 Discord 设置通道端点变更与重启后保持主 WebApp 渲染器持续沙箱化弹窗与辅助上下文的沙箱标志应从浏览器进程的不可变策略派生把持久化的 WebApp 端点视为特权配置拒绝渲染器自选源。⚠️负责任使用声明请仅在你自有或已获明确授权的应用、账号、设备与网络端点上复现。载荷中的 map 候选与原生指令位置绑定于所测执行的精确哈希见 SHA-256 校验清单换构建即失效。这是 Exploitarium 仓库善意公开披露的研究材料请勿用于任何恶意用途。小结这条 Discord Activity RCE 演示把三个看似独立的缺陷——引擎类型混淆、沙箱标志可被渲染器改写、IPC 缺少来源鉴权——串成了教科书级的客户端提权链也解释了为什么 Exploitarium 仓库值得安全新手反复研读。【免费下载链接】exploitariumA single archive of public exploit PoCs and vulnerability research writeups. At the time I post these, none have been reported. Feel free to report them yourself and take credit for the CVE if handed out lulz. Please do not abuse these. I do this so to allure people into the field, and Ive always found this is the most efficient way.项目地址: https://gitcode.com/GitHub_Trending/ex/exploitarium创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考