发表主题 回复主题
  • 5293阅读
  • 16回复

【独家】一个有意思的APPLE XSS(CVE-2016-7762)的 分析与思考

— 本帖被 紫霞仙子 设置为精华(2017-02-27) —
文章作者:Avfisher


0x00 前言
应CVE作者的要求帮忙分析一下这个漏洞,实际上这是一个思路比较有意思的Apple XSS(CVE-2016-7762)。漏洞作者确实脑洞比较大也善于尝试和发掘,这里必须赞一个!


0x01 分析与利用
官方在2017年1月24日发布的安全公告中如下描述:
  • 可利用设备:iPhone 5 and later, iPad 4th generation and later, iPod touch 6th generation and later
  • 漏洞影响:处理恶意构造的web内容可能会导致XSS攻击
  • 漏洞描述:Safari在显示文档时产生此漏洞,且该漏洞已通过修正输入校验被解决了

那么,该漏洞真的如安全公告中所描述的那样被解决了吗?实际上,结果并非如此。
在分析之前,首先先了解一下这到底是个什么漏洞。
POC:

1. 创建一个文档文件,比如:
  • Word文件(docx)
  • PPT文件(pptx)
  • 富文本文件(rtf)


2. 添加一个超链接并插入JS脚本,如:
  • javascript:alert(document.domain);void(0)
  • javascript:alert(document.cookie);void(0)
  • javascript:alert(location.href);void(0)
  • javascript:x=new Image();x.src=”Xss Platform”;

3. 上传文件至web服务器然后在Apple设备上使用如下应用打开,如:
  • Safari
  • QQ Browser
  • Firefox Browser
  • Google Browser
  • QQ客户端
  • 微信客户端
  • 支付宝客户端

4. 点击文档文件中的超链接,上述JS脚本将会被执行从而造成了XSS漏洞


效果图如下:








回顾一下上面的POC,发现其实该漏洞不仅仅存在于Safari中而是普遍存在于使用了WebKit的APP中。
我们都知道,iOS APP要想像浏览器一样可以显示web内容,那么就必须使用WebKit。这是因为WebKit提供了一系列的类用于实现web页面展示,以及浏览器功能。而其中的WKWebView(或者UIWebView)就是用来在APP中显示web内容的。而当我们使用Safari或者使用了WebKit的APP去打开一个URL时,iOS就会自动使用WKWebView/UIWebView来解析和渲染这些页面或者文档。当受害人点击web服务器上的文档中的链接时,就会导致超链接中插入的javascript脚本被执行从而造成了XSS。这是因为WKWebView/UIWebView在解析和渲染远程服务器上的文档文件时并没有对文档中内嵌的内容做很好的输入校验导致的。
该漏洞单从利用的角度来说还是比较鸡肋的,因为漏洞的触发必须依赖于用户点击文档中的超链接,笔者可以想到的可能的利用场景如下:
  • 攻击者上传了一个包含了恶意JS的超链接(比如:个人博客链接)的Word文件(比如:个人简历)至招聘网站
  • 受害者(比如:HR或者猎头)登录招聘网站且使用iPhone或者iPad上的Safari在线打开该简历中的“博客链接”,那么此时攻击者很可能就成功获取了受害者的该网站cookie之类的信息

0x02 思考
这个XSS漏洞本身其实并没有太多的技术含量或者技巧,但是在挖掘思路上却是很有意思且值得思考的。漏洞作者并没有将利用js直接插入至web页面本身,而是巧妙地利用了某些文档中的超链接绕过了WebKit的输入校验。这也从一定程度上再次阐释了web安全中一个最基本的原则即“所有输入都是不安全的”,不管是直接输入或者是间接输入。我们在做应用或者产品的安全设计时最好能够确认各种信任边界以及输入输出,且做好校验过滤以及必要的编码,这样才能有效的防范这种间接输入导致的漏洞。


0x03 作者语录
其实这个漏洞的产生早在12年的时候就有类似的案例了,目前Apple修复了该漏洞后我还继续做了些深入的研究,其实不仅仅局限于javascript的协议,当然还可以用上sms://,tel:10086等等这些协议进行巧妙的玩法,具体得你们研究了!最后感谢网络尖刀@Avfisher、@Microsoft Security Response Center的一些帮助!


0x04 参考
https://support.apple.com/en-us/HT207422
https://developer.apple.com/reference/webkit
https://developer.apple.com/reference/webkit/wkwebview
https://developer.apple.com/reference/uikit/uiwebview









本帖最近评分记录: 1 条评分 人民币 +666
紫霞仙子 人民币 +666 - 02-27
级别: Master
只看该作者 沙发  发表于: 02-27
cve泳
只看该作者 板凳  发表于: 02-27
cve 泳师傅 不愧是我大师傅
只看该作者 地板  发表于: 02-27
厉害
级别: Master
只看该作者 4楼 发表于: 02-27
改天可以看看富文本文件(rtf) 的一些东西 哈哈
有问题联系微信:50421961
只看该作者 5楼 发表于: 02-27
cve 泳!
只看该作者 6楼 发表于: 02-27
cve泳
只看该作者 7楼 发表于: 02-27
cve泳
只看该作者 8楼 发表于: 02-27
cve泳
级别: Master
只看该作者 9楼 发表于: 02-27

iOS下的URLScheme存在几个特点:

  1. iOS 下URL Schemes全局有效且只需安装app即可生效。
  2. iOS下的URL Schemes的链接会被UITextView或者UIWebView的Detection Links属性识别为链接。
       我们先看第2点的具体处理机制“UIWebView的Detection Links属性识别为链接”,也就是说你输入的任何URL Scheme连接都会被解析html里的a标签的调用:
scheme:// —> <a … href="scheme://"> … </a >

对XSS漏洞很熟悉的同学,很可能就会想到2个方向:

  1. 通过双引号闭合使用事件来执行js 经过测试在上引号出现在scheme里不会被识别,所以这个思路不通。
  2. 利用javascript:// 伪协议执行js
       在主流的浏览器内核有2种方法调用,最常见的方法:
<a href='javascript:alert(1)'>knownsec 404</a>

还有另外一种格式方法很少有人正规使用:

<a href='javascript://%0a%0dalert(1)'>knownsec 404</a>

注意:与://的区别,也就是这种非常见的方式导致了很多程序的漏洞,比如前面曝光的iMessage的XSS漏洞(CVE-2016-1764)
所以这个“BadURLScheme”就是javascript了,我们回到前面提到的iOS下的URLScheme的第一个特点,当用户安装了一个注册了javascript这个URL Scheme的任意app后,如果其他的app里使用了UIWebView并且设置了Detection Links属性识别,那么在这些app里输入文本内容:

javascript://%0a%0dalert(1)

会被Detection Links属性解析为<a>调用:

<a dir="ltr" href="javascript://%0a%0dalert(1)" x-apple-data-detectors="true" x-apple-data-detectors-type="link" x-apple-data-detectors-result="5">javascript://%0a%0dalert(1)</a>

成而导致这些app的XSS漏洞。

有问题联系微信:50421961
发表主题 回复主题
« 返回列表
«12»
共2页
上一主题下一主题

限100 字节
批量上传需要先选择文件,再选择上传
 
上一个 下一个