jQuery Mobile漏洞会有跨站脚本攻击风险

 更新时间:2017年02月12日 16:16:32   作者:tuicool  
人们经常将跨站脚本攻击(Cross Site Scripting)缩写为CSS,但这会与层叠样式表(Cascading Style Sheets, CSS)的缩写混淆。因此有人将跨站脚本攻击缩写为XSS。

概述

根据国外媒体的最新报道,谷歌公司的安全工程师Eduardo Vela在jQuery Mobile框架中发现了一个安全漏洞,这个漏洞将会让 所有使用了jQuery Mobile的网站暴露于跨站脚本攻击风险之下 。

jQuery Mobile项目(jQuery框架中的一个组件)是一个基于HTML5的开发框架,在它的帮助下,开发者可以设计出能够适配目前主流移动设备和桌面系统的响应式Web站点以及应用程序。实际上,jQuery Mobile不仅可以为主流移动平台提供jQuery的核心库,而且它也是一个较为完整统一的jQuery移动UI框架。根据jQuery开发团队的介绍,目前全球范围内大约有十五万个活动站点是采用jQuery Mobile开发的。

jQuery Mobile是目前一个非常热门的项目,下图显示的是Stack Overflow上关于jQuery Mobile的提问数量增长情况:

下图显示的是jQuery Mobile的使用统计情况:

漏洞描述

几个月之前,当时的Vela正在苦苦寻找内容安全策略(CSP)的绕过方法,但是在研究的过程中他注意到了jQuery Mobile的一种非常有意思的行为。jQuery Mobile会从location.hash属性中获取任意的URL地址,然后再用innerHTML来处理这个URL地址所返回的响应,而在某些特定条件下,攻击者就可以利用它的这种特性来攻击目标网站。当他发现了这种奇怪的行为之后,他便开始继续研究,以确定网站是否存在跨站脚本漏洞。

Vela在对这个XSS漏洞进行了深入分析之后给出了该漏洞的运行机制,大致如下:

1.     jQuery Mobile首先会检查location.hash属性值。

2.     如果location.hash中的数据看起来跟URL地址差不多的话,它会尝试将其添加到浏览历史记录之中(通过history.pushuState实现),然后再利用XMLHttpRequest来对其进行请求访问。

3.     接下来,它会使用innerHTML来处理服务器端的响应数据。

它首先会尝试调用history.pushState方法,这会增加一定的攻击难度,因为你无法对一个跨域的URL使用history.pushState方法。安全专家解释称,虽然从理论上来说,history.pushState方法理应能够防范XSS攻击,但如果网站存在开放重定向漏洞的话,攻击者依旧有可能利用这种安全漏洞来对目标站点实施攻击。

下面是Vela给出的demo【 代码下载 】:

http://jquery-mobile-xss.appspot.com/#/redirect?url=http://sirdarckcat.github.io/xss/img-src.html

根据安全研究专家的描述,目前有很多网站都无法抵御这种类型的攻击,因为很多组织并不认为“开放重定向”是一种安全漏洞,而需要注意的是,像谷歌( /search )、YouTube( /redirect )、Facebook( /l.php )、百度( /link )以及雅虎( /ads/pixe l)这样的热门网站都存在这种安全漏洞。

坏消息来了

实际上,这是一个非常简单的漏洞,想要找到这种漏洞其实也很容易。在Vela确认了该漏洞之后,他便立刻将漏洞信息上报给了jQuery Mobile的开发团队,但是当开发团队确认了该漏洞将会给用户带来的安全风险之后,Vela却被告知这个漏洞不会得到修复。

如果修复了该漏洞的话,目前很多正在运行的Web站点和应用程序都将会受到影响,这也是开发团队选择不修复该漏洞的原因之一。Vela在其发表的研究报告【 传送门 】中写到:“jQuery Mobile团队解释称,他们认为“开放重定向”是一种安全漏洞,但是jQuery Mobile的这种获取并呈现URL内容的这种行为并不是一种安全缺陷,而且如果要修复这种所谓的“安全漏洞”,那么将会使大量目前已上线的Web站点和应用程序出现异常,所以他们并不打算做任何的修改。这也就意味着,jQuery Mobile的开发团队不会就这个问题发布任何的更新补丁。而这也同样意味着,所有使用了jQuery Mobile且存在开放重定向的网站都将存在跨站脚本漏洞。”

如果目标网站不存在开放重定向漏洞的话,攻击者是否还可以利用这个XSS漏洞来实施攻击呢?Vela和很多其他的安全研究人员也正在进行尝试,但目前仍未取得成功。

Vela表示:“如果你有时间的话,你可以在没有开放重定向漏洞的条件下尝试去利用这个XSS漏洞来实施攻击,这也是一种研究思路。我试过很多种方法,但目前都还没有取得成功。”

总结

开放重定向(Open Redirect)是非常常见的,但它也同样会给网站和应用程序带来巨大的安全风险,因此Vela建议安全社区应该修复“开放重定向”这个功能中存在的安全问题。或者说我们应该统一思想,然后一起将其视为一种安全漏洞。如果整个安全行业在这一点无法达成一致的话,估计还有更多的XSS漏洞在等待着我们。

相关文章

  • jQuery异步提交表单的两种方式

    jQuery异步提交表单的两种方式

    这篇文章主要为大家详细介绍了jQuery异步提交表单的两种方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • JQuery Tips(4) 一些关于提高JQuery性能的Tips

    JQuery Tips(4) 一些关于提高JQuery性能的Tips

    如今咱祖国已经崛起了..电脑的配置也是直线上升.可是js的性能问题依然不可小觑..尤其在万恶的IE中..js引擎速度本来就慢..如果JS如果再写不好,客户端多开几个窗口假死肯定是家常便饭了.废话不说了,下面说说js性能提升的一些小Tips.
    2009-12-12
  • jQuery实现选中弹出窗口选择框内容后赋值给文本框的方法

    jQuery实现选中弹出窗口选择框内容后赋值给文本框的方法

    这篇文章主要介绍了jQuery实现选中弹出窗口选择框内容后赋值给文本框的方法,涉及jQuery响应鼠标事件动态操作页面元素属性的相关技巧,需要的朋友可以参考下
    2015-11-11
  • jQuery学习笔记之Helloworld

    jQuery学习笔记之Helloworld

    刚学习jQuery,觉得有的东西确实有必要写下来,加深下记忆,本文纯属给自己写的,希望大家不要见笑。
    2010-12-12
  • jQuery EasyUI 的EasyLoader功能介绍

    jQuery EasyUI 的EasyLoader功能介绍

    jQuery EasyUI是一款基于JQuery的UI快速搭建组件。今天介绍下EasyLoader的功能。
    2010-09-09
  • jQuery实现的网格线绘制方法

    jQuery实现的网格线绘制方法

    这篇文章主要介绍了jQuery实现的网格线绘制方法,涉及jQuery针对页面元素的获取及样式动态操作相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • jquery列表拖动排列(由项目提取相当好用)

    jquery列表拖动排列(由项目提取相当好用)

    最好的jquery列表拖动排列自定义拖动层排列。当点击或拖动列表时,可以自定义随意拖放列表模块到相应位置
    2014-06-06
  • jQuery Ajax 实例代码 ($.ajax、$.post、$.get)

    jQuery Ajax 实例代码 ($.ajax、$.post、$.get)

    下面小编就为大家带来一篇jQuery Ajax 实例代码 ($.ajax、$.post、$.get)。小编觉得挺不错的,现在分享给大家,也给大家做个参考
    2016-04-04
  • jquery超简单实现手风琴效果的方法

    jquery超简单实现手风琴效果的方法

    这篇文章主要介绍了jquery超简单实现手风琴效果的方法,只需要几行代码即可实现手风琴效果的样式变换功能,需要的朋友可以参考下
    2015-06-06
  • JQuery显示隐藏页面元素的方法总结

    JQuery显示隐藏页面元素的方法总结

    这篇文章主要介绍了JQuery显示隐藏页面元素的方法总结,本文分别讲解了show()、hide()、toggle()、slideDown()、css()5种控制显示隐藏某个DIV或P标签等页面元素的方法,需要的朋友可以参考下
    2015-04-04

最新评论