挖洞经验 | 从存储型XSS到RCE的Steam客户端漏洞
字数 1332 2025-08-18 11:37:53
Steam客户端漏洞分析:从存储型XSS到RCE攻击
1. 漏洞概述
本教学文档详细分析Steam客户端中一个高危漏洞链,该漏洞允许攻击者从存储型XSS(跨站脚本攻击)升级到RCE(远程代码执行),最终获得$7500美金的漏洞赏金。
2. 环境背景
2.1 Steam平台介绍
- Valve公司开发的数字游戏社交平台
- 提供游戏购买、下载、讨论和分享功能
- 包含客户端和网页版聊天系统(https://steamcommunity.com/chat)
2.2 技术架构
- 基于React框架开发
- 使用BBcode格式处理聊天消息
- 部署了内容安全策略(CSP),但包含
'unsafe-inline'策略
3. 漏洞发现
3.1 发现者
- Thomas Shadwell(英国国家网络安全中心安全工程师)
- 福布斯2018年"欧洲30名30岁以下优秀工程师"获得者
3.2 使用工具
- Chrome DevTool工具
- XSS Payload
- oEmbed格式分析
4. 漏洞分析
4.1 XSS漏洞根源
- Steam聊天客户端处理BBcode格式消息时存在缺陷
- 特别是
[url=xxx]标签未进行安全过滤 - 允许嵌入任意链接,包括
javascript:URI
4.2 漏洞利用点
-
BBcode标签漏洞:
[url=xxx]、[code]和[image]标签存在风险- React的XSS防护无法缓解
[url=xxx]下的javascript: URI攻击
-
CSP策略缺陷:
- 使用了
'unsafe-inline'策略 - 允许内联
<script>元素、javascript: URL、内联事件处理函数等
- 使用了
4.3 攻击场景
- 攻击者构造恶意链接
- 在Steam聊天群组中传播
- 受害者点击链接触发漏洞
5. 漏洞升级:从XSS到RCE
5.1 RCE利用方法
- 使用
steam://openexternalforpid/10400/file:///C:/Windows/cmd.exe协议 - 构造执行指令:
[url=steam://openexternalforpid/10400/file:///C:/Windows/cmd.exe]click me[/url]
5.2 攻击危害
- 窃取玩家敏感信息
- 进行网络钓鱼攻击
- 传播勒索软件
- 系统破坏和控制
6. 漏洞修复建议
6.1 代码层面
- 移除
'unsafe-inline'CSP策略 - 对BBcode标签进行严格过滤,特别是
[url=xxx] - 禁用危险的URI协议(如
javascript:和steam://)
6.2 架构层面
- 重新评估"丰富聊天内容"功能的安全性
- 对客户端和网页版进行统一的安全审计
7. 防御措施
7.1 开发者防御
- 实施严格的输入验证和输出编码
- 使用更安全的CSP策略
- 定期进行安全审计
7.2 用户防御
- 不点击不明链接
- 保持客户端更新
- 使用安全软件防护
8. 总结
该漏洞链展示了现代应用程序中常见的安全问题:
- 过度依赖框架安全机制
- 不安全的内容策略配置
- 功能丰富性与安全性的平衡问题
通过此案例,开发者应更加重视客户端安全设计,特别是当应用程序处理用户生成内容时。