Web安全-JQuery框架XSS漏洞浅析

简介: Web安全-JQuery框架XSS漏洞浅析

文章目录
框架简介
漏洞检测
漏洞复现
漏洞简述
漏洞分析
复现过程
修复建议
新版漏洞
漏洞复现
漏洞原理
修复方案
漏洞验证
框架简介
jQuery是一个快速、简洁的JavaScript框架,是一个丰富的JavaScript代码库。jQuery设计的目的是为了写更少的代码,做更多的事情。它封装 JavaScript 常用的功能代码,提供一种简便的 JavaScript 设计模式,优化 HTML 文档操作、事件处理、动画设计和 Ajax 交互。

据一项调查报告,在对 433000 个网站的分析中发现,77%的网站至少使用了一个具有已知安全漏洞的前端 JavaScript 库,而 jQuery 位列榜首,而且远远超过其他库。但事实上这些库有可用的不存在漏洞的最新版本,只是很少有开发人员会更新,一方面安全意识不够,另一方面更新需考虑兼容性问题。

漏洞检测
最简单粗暴的方法,直接使用火狐浏览器的插件:Retire.js,如下是 CSDN 网站主页存在的漏洞问题:

漏洞复现
漏洞简述
DOM型 XSS

在 JQuery 的诸多发行版本中,存在着 DOM-based XSS(跨站脚本攻击的一种) 漏洞,易被攻击者利用。漏洞原因在于过滤用户输入数据所使用的正则表达式存在缺陷,可能导致 LOCATION.HASH 跨站漏洞。这也是最为被大众熟知的 jQuery 的一个漏洞。此外,1.12.0 之前的 jQuery UI 库也可以通过对话框函数的 closeText 参数进行 DOM-based XSS 攻击。

漏洞编号

CVE-2016-7103、CVE-2015-9251、CVE-2014-6071、CVE-2012-6708、CVE-2011-4969 等
1
影响版本

(1)1.x系列版本等于或低于1.12的jQuery;
(2)2.x系列版本等于或低于2.2的jQuery。
1
2
漏洞分析
漏洞成因

jQuery 中过滤用户输入数据所使用的正则表达式存在缺陷,导致location.hash跨站脚本攻击。

jQuery 1.6.1版本

正则表达式如下:

quickExpr = /^(?:[^<](<[\w\W]+>)[^>]$|#([\w-]*)$)/,
1
该正则表达式缺陷引起的XSS攻击:
jQuery1.7.2 版本

正则表达式如下:

quickExpr = /^(?:[^#<](<[\w\W]+>)[^>]$|#([\w-]*)$)/,
1
该正则表达式存在的缺陷,容易引起DoM型XSS攻击:
jQuery 1.11.3版本

正则表达式为:

rquickExpr = /^(?:\s(<[\w\W]+>)[^>]|#([\w-]*))$/,
1
该正则表达式引起的XSS漏洞:

总结起来,DOM-based XSS 漏洞在各个版本都可成功的原因在于 jquery 本身对于正则表达式都无法完善地过滤危险字符,但前提是源码使用了$(location.hash)。故触发条件较为苛刻,且只可触发 DOM 型 XSS 漏洞。

复现过程
演示程序

<!DOCTYPE html>












JQuery with XSS Demo



  • Click here!


  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    1、将上述 html 文件保存到本地 phpstudy 网站目录下:
    2、启动 phpstudy:

    3、然后 IE 浏览器或者 Microsoft Edge 浏览器中访问 Demo 页面:
    4、点击网页链接,触发漏洞:

    【注意】此漏洞场景不适用于 谷歌浏览器和 火狐浏览器,可能因为浏览器自身安全策略问题。但是 Microsoft Edge 浏览器的爸爸(微软)并不把它当作一个漏洞,于是乎……

    修复建议
    1、临时解决方案:

    暂时隐藏 jQuery 版本信息,避免被攻击者识别出版本号,但不建议采取此办法;

    2、正式解决方案:

    建议将 jQuery 版本升级至 1.9.x 或以上版本 3.4.0,升级 jquery-ui 版本到 1.12.0 以上。不过升级有风险,因为版本兼容的问题,jQuery 官方推荐了 jQuery Migrate 库来解决 jQuery 升级问题。

    3、代码层解决方案:

    (1)过滤用户输入的内容

    检查用户输入的内容中是否有非法内容。如<>(尖括号)、"(引号)、 '(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)等。
    1
    (2)严格控制输出

    可以利用下面这些函数对出现xss漏洞的参数进行过滤

    1、htmlspecialchars() 函数,用于转义处理在页面上显示的文本。
    2、htmlentities() 函数,用于转义处理在页面上显示的文本。
    3、strip_tags() 函数,过滤掉输入、输出里面的恶意标签。
    4、header() 函数,使用header("Content-type:application/json"); 用于控制 json 数据的头部,不用于浏览。
    5、urlencode() 函数,用于输出处理字符型参数带入页面链接中。
    6、intval() 函数用于处理数值型参数输出页面中。
    7、自定义函数,在大多情况下,要使用一些常用的 html 标签,以美化页面显示,在这样的情况下,要采用白名单的方法使用合法的标签显示,过滤掉非法的字符。
    1
    2
    3
    4
    5
    6
    7
    新版漏洞
    jQuery 官方在 2020年4月 发布了最新版本 3.5.0,主要修复了两个安全问题(漏洞编号 CVE-2020-11022、CVE-2020-11023),官方博客为:jQuery 3.5.0 Released!

    据NVD描述:在大于或等于 1.2 且在 3.5.0 之前的 jQuery 版本中,即使执行了消毒(sanitize)处理,也仍会执行将来自不受信任来源的HTML传递给 jQuery 的 DOM 操作方法(即 html()、.append()等),从而导致 XSS 漏洞。

    漏洞利用条件

    系统使用 jQuery 的 html()、append() 或 $('') 等方法处理用户输入;
    用户输入已经过“消毒”(sanitize)处理。
    漏洞复现
    对于此漏洞原作者搭建了在线环境,内置了三个 xss poc,点击 Append via .html() 按钮即可触发 XSS:
    点击触发漏洞:
    HTML 源码审计:

    <!DOCTYPE html>









    jQuery XSS Examples (CVE-2020-11022/CVE-2020-11023)


    PoCs of XSS bugs fixed in jQuery 3.5.0. You can find the details in my blog post: English / 日本語



    PoC 1



    <br> <style><style /><img src=x οnerrοr=alert(1)><br>

    PoC 2 (Only jQuery 3.x affected)



    <br> <img alt="<x" title="/><img src=x οnerrοr=alert(1)>"><br>

    PoC 3



    <br> <option><style></option></select><img src=x οnerrοr=alert(1)></style><br>



    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    分析下以上网页源码:

    1、首先使用如下代码模拟了一个开发场景,即将页面的所有 div 元素替换为根据 ID 取到的 sanitizedHTML:


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    2、虽然三个 poc 都使用了包含 onerror 事件的 img 标签,但其实它们是放在属性或 style 元素内部,因此会绕过 HTML 清理器。以 poc1 为例,根据此 id 取到的值如下:

    ,变成了:


    1
    闭合了
    1
    经过处理会变为:


    1
    根据HTML从前往后解析的顺序,会先解析一个标签,且不允许将大部分 HTML 标签包裹其中,导致

    目录
    相关文章
    |
    11天前
    |
    安全 网络安全 数据安全/隐私保护
    XSS 漏洞可能会带来哪些危害?
    【10月更文挑战第26天】XSS漏洞可能会给网站和用户带来诸多严重危害
    |
    11天前
    |
    存储 监控 安全
    |
    27天前
    |
    Java API 数据库
    构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
    【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
    38 4
    |
    11天前
    |
    设计模式 前端开发 数据库
    Python Web开发:Django框架下的全栈开发实战
    【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
    90 44
    |
    7天前
    |
    SQL 安全 PHP
    探索PHP的现代演进:从Web开发到框架创新
    PHP是一种流行的服务器端脚本语言,自诞生以来在Web开发领域占据重要地位。从简单的网页脚本到支持面向对象编程的现代语言,PHP经历了多次重大更新。本文探讨PHP的现代演进历程,重点介绍其在Web开发中的应用及框架创新,如Laravel、Symfony等。这些框架不仅简化了开发流程,还提高了开发效率和安全性。
    15 3
    |
    6天前
    |
    前端开发 JavaScript 开发工具
    从框架到现代Web开发实践
    从框架到现代Web开发实践
    15 1
    |
    9天前
    |
    SQL 安全 PHP
    探索PHP的现代演进:从Web开发到框架创新
    PHP 自发布以来一直在 Web 开发领域占据重要地位,历经多次重大更新,从简单的脚本语言进化为支持面向对象编程的现代语言。本文探讨 PHP 的演进历程,重点介绍其在 Web 开发中的应用及框架创新。自 PHP 5.3 引入命名空间后,PHP 迈向了面向对象编程时代;PHP 7 通过优化内核大幅提升性能;PHP 8 更是带来了属性、刚性类型等新特性。
    19 3
    |
    13天前
    |
    存储 JSON 安全
    2024全网最全面及最新的网络安全技巧 二 之 CSRF+XSS漏洞的各类利用技巧
    2024全网最全面及最新的网络安全技巧 二 之 CSRF+XSS漏洞的各类利用技巧
    |
    9天前
    |
    SQL 负载均衡 安全
    安全至上:Web应用防火墙技术深度剖析与实战
    【10月更文挑战第29天】在数字化时代,Web应用防火墙(WAF)成为保护Web应用免受攻击的关键技术。本文深入解析WAF的工作原理和核心组件,如Envoy和Coraza,并提供实战指南,涵盖动态加载规则、集成威胁情报、高可用性配置等内容,帮助开发者和安全专家构建更安全的Web环境。
    22 1
    |
    12天前
    |
    安全 前端开发 Java
    Web安全进阶:XSS与CSRF攻击防御策略深度解析
    【10月更文挑战第26天】Web安全是现代软件开发的重要领域,本文深入探讨了XSS和CSRF两种常见攻击的原理及防御策略。针对XSS,介绍了输入验证与转义、使用CSP、WAF、HTTP-only Cookie和代码审查等方法。对于CSRF,提出了启用CSRF保护、设置CSRF Token、使用HTTPS、二次验证和用户教育等措施。通过这些策略,开发者可以构建更安全的Web应用。
    44 4