文章作者: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等等这些协议进行巧妙的玩法,具体得你们研究了!