通杀绝⼤多数交易平台的Tradingview Dom XSS漏洞分析
作者:网友投稿 时间:2018-10-26 21:07
本文主要是分析慢雾安全团队《⼀个通杀绝⼤多数交易平台的 XSS 0day 漏洞》,根据慢雾区匿名情报,通用 K 线展示 JS 库 TradingView 存在 XSS 0day 漏洞,可绕过 Cloudflare 等防御机制。该漏洞被利用会导致用户帐号权限被盗、恶意操作等造成资产损失。
下面进入正题。
Tradingview 图表库,下载下来是一个charting_library文件夹,文件夹里面有:


其中charting_library.min.js 包含外部图表库widget接口。此文件不应该被修改。static文件夹中存储图表库内部资源,不适用于其他目的。
问题是出现在tv-chart.630b704a2b9d0eaf1593.html(tv-chart*.html),当我下载好TradingView插件后会自动生成tv-chart*.html这个文件,中间的*是随机值


我们查看该html :


因为他是dom型xss,那么就查看是否有script标签(一般获取dom值使用javascript获取的)。
查看后你会发现没有获取disabledFeatures ;enabledFeatures ;indicatorsFile这3个参数的地方,那么第二种可能就是html里远程加载的js了(这些远程加载js就像我们写python种导入的库一样,当我们需要某些功能的结果时,就导入对应的库,执行里面的函数,获取结果值,在将值放到我们需要操作的地方)
在这里我们发现他远程加载了3个js:




我们去一一查看对应的js文件。
spin.min.js:


vendors.fd8604c09abed9f6643a.js:


我们对上面2个js未能查找到存在xss的参数。
library.19c99ed5d0307c67f071.js:


我们分析下存在漏洞的参数indicatorsFile。
D ? $.getScript(urlParams.indicatorsFile).done(function()这个是当时代码,我们看看?号,在js中问号是运算符,语法如下:
test ? expression1 : expression2参数:
test-任何 Boolean 表达式。
expression1-如果 test 为 true,则返回表达式,可能是逗号表达式。
expression2-如果 test 为 false,则返回表达式,可以使用逗号表达式链接多个表达式。
所以D是test,要是他是真就执行expression1($.getScript(urlParams.indicatorsFile).done(function())如果是假就执行:(冒号)后面的代码。


