文章总结: 本文复现了不安全的jQuery版本漏洞,特别是CVE-2020-11022,演示了在jQuery3.3.1中使用html或append方法处理用户输入时,可能导致DOMXSS攻击。通过创建测试页面并点击按钮,成功触发弹窗,而升级到jQuery3.7.1后漏洞被修复。建议开发者升级jQuery到最新版本,并避免直接使用这些API处理不受信任的输入。 综合评分: 91 文章分类: 漏洞分析,WEB安全,漏洞POC,实战经验,安全意识
漏洞复现:不安全的jquery版本
原创
彭文虎
新蜂网络安全实验室
2025年12月17日 18:30 北京
在一些漏洞检测报告中常出现“不安全的jquery版本”漏洞,有时未引起开发人员的重视,故对该漏洞进行复现,演示漏洞的原理和风险。
一、jquery的典型漏洞
CVE-2019-11358(影响 jQuery ≤ 3.4.0)
CVE-2020-11022(影响 jQuery 1.https://www.gm7.org/2025/12/19/x、2.https://www.gm7.org/2025/12/19/x、3.0 – 3.4.1)
CVE-2020-11023(同上)
其中,CVE-2019-11358是原型污染漏洞,后两个是DOM XSS漏洞。需要说明的是,jQuery本身是函数库,并不是漏洞点,漏洞是否可利用,取决于是否使用了存在问题的API函数,如html()、append()。
二、查看jquery版本
查看网站当前使用的jquery版本:
F12打开源码,然后在Console中输入:$.fn.jquery,即可查询当前网站使用的jquery版本
三、CVE-2020-11022漏洞复现
(一)获取jquery代码
1、获取存在漏洞的jquery
将漏洞所在网站的jquery文件保存在本地
wget “https://网站域名/static_resources/r/cms/www/red/style/jquery-3.3.1.min.js”
2、获取最新版本的jquery
下载最新版本的jquery 3.7.1
wget “https://code.jquery.com/jquery-3.7.1.min.js”
(二)启动测试web站点
1、编写html页面
在大于或等于1.2且在3.5.0之前的jQuery版本中,即使执行了消毒(sanitize)处理,也仍会执行将来自不受信任来源的HTML传递给jQuery的DOM操作方法(即html()、.append()等),从而导致https://www.gm7.org/2025/12/19/xss漏洞。
漏洞原作者搭建的在线环境:
https://vulnerabledoma.in/jquery_htmlPrefilter_https://www.gm7.org/2025/12/19/xss.html
将页面的源代码复制下来,粘贴到本地创建的html文件中,名为test.html。
修改html文件,引入存在漏洞的网站所使用的jquery文件。
保存退出。
2、启动web服务
在实验目录启动Python HTTP服务:
python3 -m http.server 8000
(三)漏洞分析
1、漏洞现象
点击PoC 1下面的“Assign to innerHTML”按钮,没有弹窗,但是点击“Append via .html()”按钮,页面弹窗:
点击PoC 2下面的按钮,也会出现同样的事情。原因是什么呢?我们分析页面的源码。
2、页面源码分析
关键函数如下:
//js函数,名为test,接收两个参数
function test(n,jq){
//在页面源码中查找id为“poc+n”的html元素,将该元素的内容赋给sanitizedHTML变量。加号是字符串拼接,即poc1、poc2等。
sanitizedHTML = document.getElementById('poc'+n).innerHTML;
//如果传递的参数中jq参数的值为真
if(jq){
//使用jquery,找到id为div的元素,将该元素的内容设置为sanitizedHTML的值
$('#div').html(sanitizedHTML);
//如果传来的参数中jq参数的值为假,或者没有传递jq参数
}else{
//使用html的标准方式,设置id为div的innerHTML属性的值,即内容
div.innerHTML=sanitizedHTML;
}
}
以上是对参数的处理,那么页面中是如何调用该函数的呢?看下面的代码:
PoC 1
//第一个按钮,显示为“Assign to innerHTML”,点击该按钮时调用test函数,只传递一个参数,值为1。此时test函数会找到id为“poc1”的https://www.gm7.org/2025/12/19/xmp标签,将该标签的内容使用标准的html方式设置为div元素的内容。
//第二个按钮,显示为“Append via .html()”,点击该按钮时调用test函数,传递两个参数,1和true。此时test函数会将“poc1”的内容交给jquery处理,设置为div元素的内容。
,用于结束该标签。img标签处于style标签的属性中,alert不会被执行。
但是点击PoC 1下面的“Append via .html()”按钮,查看div元素的值:
poc1元素的内容:
此时


评论