对于Steam的聊天客户端React框架的XSS
字数 2017 2025-08-27 12:33:42
Steam聊天客户端React框架XSS漏洞分析与利用教学文档
1. 背景概述
Steam聊天客户端是一个基于React框架构建的现代Web应用,运行在高度定制的Chrome Embedded Framework环境中。该系统具有以下特点:
- 使用React框架构建,具有强大的安全特性
- 避免使用
dangerouslySetInnerHTML等不安全函数 - 采用PostMessage和环回WebSocket进行特权操作通信
- 部署了内容安全策略(CSP),但包含
unsafe-inline
2. React安全特性分析
2.1 React的安全机制与潜在风险
React框架本身提供了较强的XSS防护,但仍存在以下潜在风险点:
-
属性编码不足:
- React不会特殊编码标签属性
- 危险属性如
href="javascript:"和style可能被滥用
-
URL处理问题:
- 使用
document.location = xxx可能被利用 - URL路径拼接时编码不足(
..%2F与../问题)
- 使用
-
OEMBED协议风险:
- 需要
dangerouslySetInnerHTML处理返回的HTML - 即使客户端安全处理,浏览器可能直接渲染API返回的HTML
- 需要
3. 高级DevTools技术
3.1 关键调试技术
-
控制台抽屉:
- 按ESC键打开,可在断点暂停时执行上下文相关代码
-
代码搜索与美化:
- 使用底部抽屉的搜索功能
- 点击
{}按钮美化压缩代码
-
事件断点:
- 在Sources面板底部设置XHR/fetch和事件监听器断点
-
调用栈分析:
- 断点触发后查看完整调用栈
- 逆向追踪应用特定代码
-
条件断点注入:
- 右键行号选择"插入条件断点"
- 注入
console.log等调试代码
-
网络分析:
- 使用放大镜搜索完整请求/响应
- 应用过滤器表达式缩小请求范围
- "曲向复制"功能复制和修改请求
4. 漏洞发现与利用方法
4.1 初始侦察
- 确认桌面版与web版(steamcommunity.com/chat)使用相同代码
- 分析WebSocket通信(自定义二进制协议)
- 搜索
dangerously、innerHTML等关键词 - 设置相关函数断点并跟踪调用栈
4.2 OEMBED机制分析
- 发现客户端对OEMBED内容进行双重渲染:
- 初次渲染为普通链接
- 服务器响应后替换为BBCode格式的OEMBED标签
- 测试发送恶意HTML的OEMBED标签,但被服务器过滤
4.3 BBCode标签利用
- 分析BBCode与React组件的映射表
- 发现
[url=xxx]标签可包含任意URL,包括javascript:URI - 但
javascript:URI被客户端剥离或限制执行
4.4 Steam协议URI利用
- 测试
steam://协议URI(如steam://open/440) - 发现聊天客户端内执行无确认提示
- 可执行打开游戏、修改配置等操作
4.5 OEMBED沙盒逃逸
- 利用白名单站点codepen.io嵌入
- 通过codepen.io注入JS代码
- 使用远程Chrome控制台技术
4.6 Windows协议处理漏洞
- 发现
steam://openexternalforpid未文档化URI - 分析Windows注册表中的协议处理机制
- 关键发现:
- 协议和文件类型关联使用相同注册表结构
- 可通过类似
txt:hello语法直接打开文件 .bat、jarfile:等危险协议存在
4.7 目录遍历攻击
- 利用
jarfile:协议结合目录遍历:jarfile:..\..\path\to\malicious.jar
- 发现Steam内部使用
steam://openexternalforpid/10400/jarfile:xxx格式 - 最终利用:
- 通过聊天消息发送恶意链接
- 触发
openexternalforpid执行任意JAR文件
5. 漏洞利用链总结
- 通过React的OEMBED/BBCode处理找到XSS入口
- 绕过
javascript:URI限制使用steam://协议 - 发现并利用
openexternalforpid未文档化功能 - 结合Windows协议处理机制实现RCE
6. 防御建议
-
对客户端:
- 严格过滤BBCode标签和属性
- 禁用危险的
steam://协议URI - 限制
openexternalforpid功能
-
对开发者:
- 避免使用
dangerouslySetInnerHTML - 实现严格的URL验证和编码
- 限制OEMBED白名单站点
- 避免使用
-
对系统:
- 加强Windows协议处理的安全检查
- 实现沙盒机制限制嵌入式内容权限
7. 学习要点
- 现代框架的安全边界分析
- 客户端与服务器渲染差异导致的漏洞
- 协议处理机制的安全风险
- 复杂漏洞链的构建方法
- 高级调试技术在漏洞挖掘中的应用