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 标签包裹其中,导致

    目录
    相关文章
    |
    1月前
    |
    安全 网络安全 数据安全/隐私保护
    XSS 漏洞可能会带来哪些危害?
    【10月更文挑战第26天】XSS漏洞可能会给网站和用户带来诸多严重危害
    |
    1月前
    |
    存储 监控 安全
    |
    1天前
    |
    安全 应用服务中间件 网络安全
    实战经验分享:利用免费SSL证书构建安全可靠的Web应用
    本文分享了利用免费SSL证书构建安全Web应用的实战经验,涵盖选择合适的证书颁发机构、申请与获取证书、配置Web服务器、优化安全性及实际案例。帮助开发者提升应用安全性,增强用户信任。
    |
    1月前
    |
    设计模式 前端开发 数据库
    Python Web开发:Django框架下的全栈开发实战
    【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
    162 45
    |
    23天前
    |
    开发框架 搜索推荐 数据可视化
    Django框架适合开发哪种类型的Web应用程序?
    Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
    |
    23天前
    |
    开发框架 JavaScript 前端开发
    TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
    TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
    35 2
    |
    25天前
    |
    中间件 Go API
    Go语言中几种流行的Web框架,如Beego、Gin和Echo,分析了它们的特点、性能及适用场景,并讨论了如何根据项目需求、性能要求、团队经验和社区支持等因素选择最合适的框架
    本文概述了Go语言中几种流行的Web框架,如Beego、Gin和Echo,分析了它们的特点、性能及适用场景,并讨论了如何根据项目需求、性能要求、团队经验和社区支持等因素选择最合适的框架。
    65 1
    |
    1月前
    |
    SQL 安全 PHP
    探索PHP的现代演进:从Web开发到框架创新
    PHP是一种流行的服务器端脚本语言,自诞生以来在Web开发领域占据重要地位。从简单的网页脚本到支持面向对象编程的现代语言,PHP经历了多次重大更新。本文探讨PHP的现代演进历程,重点介绍其在Web开发中的应用及框架创新,如Laravel、Symfony等。这些框架不仅简化了开发流程,还提高了开发效率和安全性。
    30 3
    |
    1月前
    |
    前端开发 JavaScript 开发工具
    从框架到现代Web开发实践
    从框架到现代Web开发实践
    42 1
    |
    1月前
    |
    SQL 安全 PHP
    探索PHP的现代演进:从Web开发到框架创新
    PHP 自发布以来一直在 Web 开发领域占据重要地位,历经多次重大更新,从简单的脚本语言进化为支持面向对象编程的现代语言。本文探讨 PHP 的演进历程,重点介绍其在 Web 开发中的应用及框架创新。自 PHP 5.3 引入命名空间后,PHP 迈向了面向对象编程时代;PHP 7 通过优化内核大幅提升性能;PHP 8 更是带来了属性、刚性类型等新特性。
    29 3