分享好友 最新动态首页 最新动态分类 切换频道
Web安全-JQuery框架XSS漏洞浅析
2024-12-21 11:49

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

jQuery是一个快速、简洁的JavaScript框架,是一个丰富的JavaScript代码库。jQuery设计的目的是为了写更少的代码,做更多的事情。它封装 JavaScript 常用的功能代码,提供一种简便的 JavaScript 设计模式,优化 HTML 文档操作、事件处理、动画设计和 Ajax 交互。

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

DOM型 XSS

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

漏洞编号

 

影响版本

 
 

漏洞成因

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

jQuery 1.6.1版本

正则表达式如下

 
 

正则表达式如下

 
 

正则表达式为

 
 
 

演示程序

 
 

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

1、临时解决方案

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

2、正式解决方案

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

3、代码层解决方案

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

 

(2)严格控制输出

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

 
 

jQuery 官方在 2020年4月 发布了最新版本 3.5.0,主要修复了两个安全问题(漏洞编号 ),官方博客为:jQuery 3.5.0 Released!

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

漏洞利用条件

  1. 系统使用 jQuery 的 html()、append() 或 等方法处理用户输入
  2. 用户输入已经过“消毒”(sanitize)处理。
 

分析下以上网页源码

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

 

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

 
 
 

闭合了标签,成功执行后面的脚本,导致XSS。

1、CVE-2020-11022

导致上述问题的关键是,在 html() 方法中,作为参数传递的 HTML 字符串将传递到 方法

 

在 jquery 3.x 版本之后使用的正则为

 

这就使用到环境里的 poc2(仅适用于 jQuery3.x ,注意这里的 XSS payload 是作为属性出现,所以可以绕过消毒器规则

 

该 poc 使用 html() 方法执行后发现变为

 
 

针对上述漏洞原理,jQuery Team 进行了修复,修复手段为将方法替换为标识函数,因此传递的HTML字符串现在不再经过函数处理,从而成功修复了漏洞。但仍有一些手段可以绕过,C VE-2020-11023 就是针对 CVE-2020-11022 的绕过。

绕过使用的是另一个特性,某些特殊的标签在经过 html() 方法处理时,会由于 HTML 的特性或浏览器的 bug 而使得这些标签被移除。

option 就是这些特殊标签之一,我们知道 option 元素通过位于 select 元素内部来构造一个选择列表,但如果没有 select 元素,option 会被移除。为了解决这个 bug,如果传入参数的第一个元素为 option,jQuery 会新增和。所以我们提交 poc3

 

经过处理会变为

 

根据HTML从前往后解析的顺序,会先解析一个标签,且不允许将大部分 HTML 标签包裹其中,导致被忽略,而后识别标签从而触发 XSS。

此漏洞在最新的3.5.0中也被修复,对于特殊的标签进行了处理。

 
 

(1)更新 jQuery 到 3.5.0 或更高版本

 

(2)使用XSS清理工具清理用户输入的HTML,官方推荐


最新文章
AIGC重塑文旅行业新场景、新业态、新消费
(来源:中陆必得旅游规划)编者按AIGC(人工智能生成内容)在文旅产业中发挥着越来越重要的作用。通过深度学习、自然语言处理和计算机视觉等技术,AIGC能够自动化地分析和理解大量数据,从而生成丰富多样的内容。这不仅提高了内容创作的效
AI代码生成器——Cody
Cody由Sourcegraph开发,是一款人工智能驱动的编码助手,它不仅仅是一个简单的代码完成工具,更是一项功能强大且富有创新精神的工具。其主要优势在于能够深度理解代码编写的上下文,为开发人员提供准确、有意义的建议和评论。 Cody能够利用
会议OA项目之会议审批(亮点功能:将审批人签名转换为电子手写签名图片)
Java实现支持人脸识别的会议签到系统,方便参会人员高效签到,提高会议签到的安全性。采用深度学习进行模型训练以提高识别准确率,需要设计并优化相关的人脸识别算法。基本功能​ 1、支持基本的会议管理功能,包括会议申请、开始会议、会议
用AI绘画,让创意从未如此简单!搜狐简单AI带你开启智能创作之旅
在这个信息化高速发展的时代,创意和效率是任何行业中立足的关键。然而,对于许多人来说,面对日益增多的工作任务,如何高效且富有创意地完成工作成为了不小的挑战。想象这样一个情境:小李,一位营销专员,正在为即将到来的产品发布会寻找
WordPress 发布文章,出现发布失败与更新失败的解决办法
新版的Wordpress出来后,用新版的覆盖了之前老板的文件之后,出现了无法发布文章,更新老文章失败等错误提示。 这是什么原因呢?我通过网络查询,收集了以下原因和解决方法。1.古腾堡编辑器出错 这种情况非
影视建站遇到的坑与修复过程 苹果cms+海螺模板
主题设置后台 安装PHP扩展 后台快捷菜单配置添加 海螺主题设置,/admin.php/admin/conch/theme免费解析网:http://api.momimi.cn/?url=站长交流群:707031200海螺模板完美修复版2020.01.04带模板独立后台管理系统的多功能模板。使用此模板务
空间、算力、数据、场景“模力福地”重磅礼包发布!深圳福田打造人工智能产业高地!
12月11日,“模力福地”行动方案发布会暨人工智能先锋城市核心区高质量推进大会在深业上城城市云客厅举行。深圳市人工智能产业办、重点人工智能企业精英和深港两地专家,共同见证福田区在人工智能领域的重要举措与创新布局。“模力福地,智
扒一扒大模型应用隐形冠军:服务1600 企业、200 业务场景,分分钟就可构建专属应用
白小交 发自 凹非寺量子位 | 公众号 QbitAI服务1600+企业、200+业务场景直接落地。这位大模型应用的隐形冠军不藏了。他们打造大模型应用开发平台,客户能够开箱即用。服务企业覆盖央国企、金融、政务、民生、制造、零售等领域。就在今天,
网站站长角色深度解析:他们是如何驾驭互联网的?
网站站长角色深度解析:如何驾驭互联网? 随着互联网技术的迅猛发展和普及,站长这一职业角色也逐渐成为了互联网生态中不可或缺的一环。他们如何驾驭互联网?今天我们就来深度解析网站站长的角色及其工作内涵。网站站长,顾名思义,即负责
深圳SEO秘籍,关键词优化攻略,助力企业网站排名飞升!
深圳快速SEO,专注关键词优化,助力企业网站快速提升排名。本文揭秘高效策略,助您优化关键词,实现网站流量激增。随着互联网的飞速发展,企业对的需求日益增长,在这个竞争激烈的市场环境中,如何让企业网站在搜索引擎中脱颖而出,成为众
相关文章
推荐文章
发表评论
0评