欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

影响1500万用户:Chrome扩展Video Downloader CSP绕过导致UXSS漏洞分析

来源:本站整理 作者:佚名 时间:2019-02-26 TAG: 我要投稿

概述
在对各种Chrome扩展程序进行安全审查的过程中,我发现有两个流行的Chrome扩展程序Video Downloader(5.0.0.12版本,用户数量820万)和Video Downloader Plus(用户数量730万)在浏览器中存在跨站脚本(XSS)漏洞页面。攻击者只需让目标用户访问攻击者特制的页面,即可针对这些扩展实现漏洞利用。
导致此漏洞的原因是,扩展程序使用字符串连接来构建HTML,该HTML通过jQuery动态附加到DOM。攻击者可以创建一个特制的链接,这将导致在扩展的上下文中执行任意JavaScript。利用该漏洞,攻击者可以滥用扩展程序可以访问的如下权限:
"permissions": [
    "alarms",
    "contextMenus",
    "privacy",
    "storage",
    "cookies",
    "tabs",
    "unlimitedStorage",
    "webNavigation",
    "webRequest",
    "webRequestBlocking",
    "http://*/*",
    "https://*/*",
    "notifications"
],
利用上述权限,攻击者可以转储所有浏览器Cookie,拦截所有浏览器请求,并伪装成经过身份验证的用户与所有站点进行通信。此时,攻击者已经具有如同本地扩展程序一样的功能。
漏洞描述
这一漏洞的产生,主要源于以下代码中存在问题:
vd.createDownloadSection = function(videoData) {
    return ' \
         \
        ' + videoData.fileName + ' \
        Download - ' + Math.floor(videoData.size * 100 / 1024 / 1024) / 100 + ' MB\
        \
        ';
};
这是一段易受跨站脚本攻击(XSS)的代码,可以说是一段非常经典的“教科书级”漏洞代码示例。扩展程序从攻击者控制的页面上提取这些视频链接,因此漏洞利用应该是非常简单粗暴的。然而,现实世界中的情况要比“教科书”复杂得多。我们接下来,就详细分析漏洞利用途中遇到的各种阻碍,并说明如何绕过这些障碍。我们将从输入的位置开始,一路到达其最终函数。
通往胜利的道路
该扩展程序使用内容脚本(Content Script)从页面链接(标签)和视频(标签)收集可能的视频URL。内容脚本是JavaScript代码段,运行在用户浏览器访问过的页面上(也就是用户访问的每个页面)。以下代码节选自扩展程序的内容脚本:
vd.getVideoLinks = function(node) {
    // console.log(node);
    var videoLinks = [];
    $(node)
        .find('a')
        .each(function() {
            var link = $(this).attr('href');
            var videoType = vd.getVideoType(link);
            if (videoType) {
                videoLinks.push({
                    url: link,
                    fileName: vd.getLinkTitleFromNode($(this)),
                    extension: '.' + videoType
                });
            }
        });
    $(node)
        .find('video')
        .each(function() {
            // console.log(this);
            var nodes = [];
            // console.log($(this).attr('src'));
            $(this).attr('src') ? nodes.push($(this)) : void 0;
            // console.log(nodes);
            $(this)
                .find('source')
                .each(function() {
                    nodes.push($(this));

[1] [2] [3] [4] [5] [6]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载