Overwolf 1-Click 远程代码执行 - CVE-2021-33501
本文为翻译文章,原文链接:https://swordbytes.com/blog/security-advisory-overwolf-1-click-remote-code-execution-cve-2021-33501/, 作者: Joel Noguera 发表时间:Saturday, May 1, 2021
公告信息
标题: Overwolf 1-Click Remote Code Execution
发布日期: 2021-05-31
供应商: Overwolf Ltd
发布模式: 协同发布
贡献者:此漏洞由 Joel Noguera 发现和研究。
PDF版本:GitHub
漏洞信息
类别:CWE-94-代码生成控制不当('代码注入')
严重性: Critical - 9.6 (CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H)
远程可利用: 是
本地可利用: 是
受影响版本:Overwolf Client 0.169.0.22(先前版本也可能受影响)
CVE ID: CVE-2021-33501
Overwolf
Overwolf是一个为帮助开发人员创建视频游戏扩展而设计的软件平台,然后通过Overwolf的App Store提供给用户。该平台由 Overwolf Ltd. 创建,扩展通常侧重于提供需要用户退出游戏的游戏内的服务,比如使用网络浏览器或IM客户端。其他扩展提供了特定于游戏的功能,这些功能可以提醒用户某些游戏内事件,从而简化游戏体验。
<center>图1– www.overwolf.com/</center>
漏洞描述
SwordBytes 研究人员通过滥用出现在"overwolfstore://"URL处理程序中的反射型XSS的问题,在Overwolf的客户端应用程序中发现了一个无需身份验证的远程代码执行(RCE)漏洞。该漏洞可允许未经授权的攻击者在运行Overwolf客户端应用的程序的基础操作系统上执行任意命令。通过将XSS问题和Chromium Embedded Framework (CEF)沙箱逃逸结合起来,攻击者可能在受害者的计算机上实现远程代码执行。
SwordBytes使用如下POC来获得远程代码执行:
POC:
overwolfstore://app/apps/<img+src=x+onerror=%22overwolf.io.writeFileContents('C:\\windows\\temp\\d.bat','start%20cmd%20%252fk%20whoami','',false,console.log)%2526overwolf.utils.openUrlInDefaultBrowser('C:\\windows\\temp\\d.bat')%22>/CCCCCC
观看视频:https://www.youtube.com/watch?v=qtbp8_XYodc
技术讲解
Windows应用程序可以向操作系统注册自定义的URL方案,从而使它们可以在被调用运行特定的已安装的应用程序。一个常见示例是通过使用自定义的方案(例如,"overwolfstore://app/:uid/reviews/:commentId")导航到URL,从而直接在浏览器中使用这个方案。在这种情况下,攻击者可以通过将合法用户重定向到滥用来自Overwolf的自定义URL处理程序的恶意链接来实现。客户端应用程序容易受到通过滥用后端非预期的行为跨站点脚本注入攻击。
<center>图1 –带有自定义方案“ overwolfstore”的注册表项</center>
请注意,"%1"将替换为URL上提供的值。启动Overwolf客户端后,CEF应用程序将继续解析和分析提供的URL以确定应呈现哪个UI。可以触发多个操作,负责解析URL和决定执行哪个动作的代码位于扩展的JavaScript源码中。特别是这个文件(overwolf-extension://ojgnfnbjckbpfaciphphehonokbggjhpnnoafack/scripts/controllers/window.js)管理了大部分解析的代码。
_this.decodeUrlSchemeParams = function (info) {
const decodedUrl = decodeURIComponent(info.parameter);
const url = new URL(decodedUrl);
const urlParts = url.pathname.split('/');
const params = {origin: info.origin};
if (urlParts[2] !== 'app') {
return null;
}
if (urlParts[3]) {
params.section = urlParts[3];
}
if (urlParts[4]) {
params.category = urlParts[4];
}
if (urlParts[5]) {
params.extra = {
id: urlParts[5]
};
}
return params;
}
在Scheme参数解码时,会从URL中检索多个值。这些URL的结构通常如下:
定制方案:
>overwolfstore://app/<SECTION>/<CATEGORY>/<EXTRAS>
URL中的不同元素成分可以使应用程序理解幕后正在被调用的功能。但是,对应用程序接收的值没做严格限制;这使攻击者能够制作不同的有效负载,这些负载可能在应用程序上产生意外的结果。
反射型跨站脚本
当前面描述的URL的”SECTION“部分等于"apps",Overwolf客户端使用"CATEGORY"中提供的值向后端生成请求,以尝试获取关于正在调用的扩展的信息。例如,通过访问URL:
"overwolfstore://app/apps/UNEXPECTED_VALUE/4/5/6",将生成以下请求。
<center>图2 –请求发送到后端API</center>
请注意,值"UNEXPECTED_VALUE"作为错误消息的一部分反映在响应正文中,并且"Content-Type"设置为 "text/html"。当此响应反映在Overwolf商店UI,本质上是Chromium的嵌入式浏览器(CEF),可控内容将被逐字注入到DOM中,如下所示:
<center>图 3 – 嵌入到浏览器 DOM 中的错误消息</center>
通过将缺乏过滤的 CATEGORY的值与Overwolf Store UI返回的后端错误信息结合,可以在具有以下payload的Overwolf客户端应用程序中触发反射型跨站脚本漏洞:
POC:
>overwolfstore://app/apps/<img src=x onerror=alert(document.location)>/4
<center>图 4 – Overwolf 客户端应用程序中触发的反射跨站点脚本</center>
如果识别出CEF沙箱转义,通常可以将CEF应用程序中的跨站点脚本升级为远程代码执行。
逃离CEF沙箱
在这种特殊情况下,SwordBytes 研究人员能够通过使用"overwolf-extensions://"方案在 URL 上下文中使用 Overwolf JavaScript API 来逃脱沙箱。主CEF进程OverwolfBrowser.exe在启用内部Overwolf标志(--ow-enable-features和 --ow-allow-internal)的情况下运行,从而可以调用诸如overwolf.utils.openUrlInDefaultBrowser
之类的函数。顾名思义,这个函数旨在默认浏览器(例如Chrome、Firefox或其他浏览器)中打开URL;然而,如果提供了诸如"calc.exe"之类的值,则将调用"CreateProcess来执行"calc.exe"二进制文件, 来允许攻击者运行任意命令。
<center>图 5 – Overwolf 客户端应用程序执行 C:\Windows\System32\calc.exe</center>
这个"openUrlInDefaultBrowser"方法不允许对正在执行的命令提供额外的参数,因此需要一个其他的攻击向量来完全控制执行的命令。在分析了文档中提供的不同API方法后,wordBytes 研究人员发现了该方法"overwolf.io.writeFileContent"。这个方法允许用户在Windows文件系统上创建具有内容的新文件。通过滥用此功能,可以创建一个新的".bat"(批处理)文件,之后可以通过使用前面提到的"openUrlInDefaultBrowser"方法来执行该文件。请注意,执行这个方法需要"FileSystem"权限。但是在扩展的清单中,分配了该权限。
概念验证
SwordBytes 研究人员结合本文档中描述的问题构建了最终的漏洞利用程序,可以总结如下:
1.受害者打开调用Overwolf Store应用程序的URL并触发XSS payload
2.利用"writeFileContents"方法将新的批处理文件写入到磁盘的"C:\windows\temp\
"文件夹中.这个文件包含了攻击者选用的命令,start cmd /k whoami
3.该"openUrlInDefaultBrowser"方法用于执行在上一步中创建.bat文件,来实现远程代码执行。
POC:
>overwolfstore://app/apps/<img+src=x+onerror=%22overwolf.io.writeFileContents('C:\\windows\\temp\\d.bat','start%20cmd%20%252fk%20whoami','',false,console.log)%2526overwolf.utils.openUrlInDefaultBrowser('C:\\windows\\temp\\d.bat')%22>/CCCCCC
请注意,某些值会进行两次URL编码,以绕过CEF浏览器和后端服务器的限制。/
和&
等值将改变自定义方案的解析方式,以及后端返回的错误消息。因此,/
和&
的编码如下:%252f
和%2526
。
报告时间表
2021-05-04: SwordBytes 开始研究 Overwolf 客户端应用程序的漏洞。
2021 年 5 月 6 日: SwordBytes 确定了攻击向量并为 RCE 开发了 PoC。
2021 年 5 月 10 日: SwordBytes 通过 [email protected] 和 [email protected] 向 Overwolf 发送了初始通知,要求提供 GPG 密钥。
2021-05-10: Overwolf支持系统创建了ID为90951的票证。
2021-05-10: Overwolf确认收到了电子邮件,并提供了GPG密钥以进行进一步的通信。
2021-05-10: SwordBytes发送了一份报告草案,其中包括技术说明和PoC。
2021-05-17: SwordBytes 联系 Overwolf 要求更新
2021-05-17: Overwolf通知SwordBytes他们没有收到前一封电子邮件。
2021-05-17: SwordBytes 再次发送咨询草案,Overwolf 确认收到。
2021-05-18:确认了此漏洞。
2021-05-19: SwordBytes向Overwolf发送了其他信息,以帮助他们确定漏洞的根本原因。
2021 年 5 月 20 日: Overwolf 确认他们正在针对该问题进行修补程序。
2021-05-21: SwordBytes请求此问题的CVE-ID。
2021-05-21: Mitre分配了CVE-2021-33501。
2021-05-24: Overwolf通知SwordBytes,计划很快发布此修补程序。
2021-05-27: Overwolf发布了此修复程序。
2021 年 5 月 31 日: SwordBytes 发布了该公告
BY:先知论坛
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论