知往鉴今:Chromium近三年UXSS破绽剖析及减缓、防备和检测步伐 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

知往鉴今:Chromium近三年UXSS破绽剖析及减缓、防备和检测步伐

申博_安全预警 申博 116次浏览 未收录 0个评论

一、媒介

UXSS(通用跨站剧本进击)是一种进击体式格局,运用浏览器或浏览器扩大中的客户端破绽,在接见恣意资本(泉源)时实行歹意代码(一般为JavaScript)。简而言之:

受益者接见歹意网站(被攻下/被沾染)后,进击者可以或许浏览受益者的Gmail内容、FaceBook上的私家音讯,并可以或许替代受益者实行其他操纵,比方发送电子邮件、上传照片等。

本项研讨的主要目的,是剖析此前三年来(2014年至2017年)Chromium浏览器中实行的潜伏减缓步伐,并探究可用于防备或检测UXSS破绽的新技术。

二、配景

SOP(同源战略)是Web运用顺序平安模子中最为主要的看法之一。基础上,它可以或许防备分歧泉源相互接见存储在客户端上的数据(即:Cookie、浏览器选项卡的内容、与某些Web运用顺序相干的内容、客户端可用的内容)。

Origin是HTML规范中界说的URI设想,是主机与端口的组合。若是两个URI都运用了雷同的协定(比方:HTTPS)、雷同的主机(比方:google.com)和雷同的端口(比方:443),那末就会将两者以为是同源的。不然,会推断两个URI属于分歧源,默许状况下不克不及接见相互的数据。

在JavaScript中,运用实行高低文(Execution Context)来透露表现代码被实行的状况。默许状况下的高低文是全局实行高低文(Global Execution Context),一般是在浏览器加载新页面时被建立。每一个GEC都有本身的JS内置集,每一个JS对象都与实行高低文相干联。API函数一般运用高低文来实行接见搜检。

跨站剧本进击(XSS)是一种客户端代码注入进击,允许进击者破坏用户与易受进击的Web运用顺序之间的交互。XSS破绽一般允许进击者以受益用户的身份实行恣意操纵,并接见网站上的恣意数据,从而躲避SOP。当Web运用顺序运用用户供应的输入天生输出内容,而没有举行恰当的考证时,就会发作这些破绽。如今,XSS是最为普遍的Web运用顺序进击范例。

通用跨站剧本进击(UXSS)可以或许在浏览器本身或浏览器扩大中运用破绽来完成XSS的前提,而不再是在Web运用顺序中运用破绽。因而,进击者不只可以或许接见单个网站上的用户会话,还可以或许接见浏览器今后翻开的任何页面,包罗内部浏览器页面。关于运用任何浏览器的用户来讲,关于任何浏览器来讲,致使UXSS进击的破绽,都是最主要的要挟之一。Chromium Severity Guidelines将此类破绽归类为高严重性破绽。

从进击者的角度来看,UXSS破绽运用可以或许与沙箱逃逸的长途代码实行(RCE)进击一样有价值,因为UXSS破绽每每越发牢靠,而且在许多状况下可以或许知足进击者的需求,除非进击者的目的是完全攻下受益者的装备。

在这项研讨中,常常涉及到Chromium的多历程架构。有关该主题的更多细致信息,请参阅Chromium的官方文档。本研讨中最为相干的内容以下:

1、Browser Process是浏览器运用顺序的最主要、特权最高的历程。该历程具有与其盘算机上运转Chrome的用户雷同的权限,包罗对文件体系、收集栈、体系API等的接见权限。浏览器历程掌握第一流其余浏览器窗口、用户界面、历程间通讯,并举行其他高等治理操纵。

2、Renderer Process是一个权限较低的历程,卖力向用户显现网页并实行JavaScript。Chromium为浏览器中翻开的分歧网站建立了多个衬着器历程,个中每一个历程都是自力的,而且都在沙箱中运转,因而与进击浏览器历程(Browser Process)比拟,进击衬着器历程的风险相对更低。

Blink是Chromium运用的衬着引擎。

V8是Chromium运用的JavaScript和WebAssembly引擎。

在布置更新的导航(Navigation)架构(也称为PlzNavigate)之前(2017年10月之前),衬着器历程中的长途代码实行破绽可以或许简朴地转换为UXSS。其缘由在于,导航是由衬着器历程启动的,而歹意代码可以或许绕过跨源平安搜检。在PlzNavigate有用的状况下,浏览器历程卖力处置惩罚一切导航要求,并实行战略。

别的,在2016年12月之前,将胜利的UXSS破绽运用转换为Android上的长途代码实行破绽运用是非常简朴的。简而言之,进击者无需任何用户交互,也无需取得任何允许,便可在受益者的装备上装置恣意运用顺序。在此以后,在经由历程Web流装置运用顺序时,一直会提醒用户从新举行身份考证。

在Chrome的破绽嘉奖设想中,针对UXSS和衬着器长途代码实行破绽提交的款项嘉奖是雷同的。

三、概述

Chromium浏览器及其组件严厉实行了同源战略的看法。依靠在Blink和V8高低文的平安模子中运用SOP和站点断绝等新功用,可以或许在各个层面上处置惩罚这一题目。然则,与任何其他庞杂的软件项目一样,在某些状况下存在破坏这些珍爱的破绽。

本文档对2014至2016年时期申报的致使UXSS进击的破绽举行了概述和剖析,并得出有关如安在今后减缓这些题目的结论。需要注重的是,在我们所剖析的时候范围内,Chromium没有启用PlzNavigate,也没有启用站点断绝功用。

这项研讨主如果在2017年年终举行的,因而本文中将“站点断绝”称为行将完成的加强功用,而没有将其视为现有的功用。

3.1 破绽申报剖析

在本文的破绽申报剖析中,针对2014至2016年时期申报的题目,运用以下查询发明了100多个Chromium破绽:

“UXSS”、“XSS”、“Universal XSS”;

“Cross-Site Scripting”、“Universal Cross-Site Scripting”;

“SOP Bypass”、“SOP”;

“Same Origin Policy”、“Same Origin Policy”;

“Cross-orgin”等。

在初次搜寻到破绽信息以后,我们举行了开端剖析,终究筛选出63个题目作为有用的UXSS申报。随后,我们将这63个题目依据其根本缘由或开辟形式,举行了分类。末了,对这些种别举行了再次调解,终究构成了8类。有关更细致的内容,请参阅第四章 破绽剖析。

3.2 时候散布

知往鉴今:Chromium近三年UXSS破绽剖析及减缓、防备和检测步伐

四、破绽剖析

4.1 Blink:滥用解析器启动的JavaScript: URI页面加载

4.1.1 形貌

这是本研讨中破绽数目最多的一个种别。

触发JavaScript实行的一种可以或许体式格局是实行JavaScript: URI导航。Chromium会搜检今后实行高低文的泉源(Origin),以肯定加载是不是胜利。若是栈上没有运动的高低文,浏览器会以为导航平安。因而,若是<iframe>元素在个中加载了跨源页面,而且是未附加到文档的子树的一局部,就可以或许强迫HTML解析器将元素插进去到文档中,并加载恣意JavaScript: URI。

4.1.2 加固步伐

来自Daniel Cheng的批评([email protected]):

关于解析器,我们有一个假定,若是栈上没有JavaScript高低文,那末实行JavaScript: URI老是平安的,我们假定这是解析器触发的。但遗憾的是,一些VRP申报注重到了这些假定,并将其与DOM破坏进击相连系,DOM破坏一直是来自分歧的泉源,但其目的是在风险的状况下触发这类假定。针关于此,我们提出了一般性的减缓设想,请拜见 https://codereview.chromium.org/2502783004/和 https://codereview.chromium.org/2190523002/ 。

末了需要强调的是,我们应当转变JavaScript: Navigation永久不举行同步。在一些详细的实例中,它们会举行同步,这只会发作题目。

4.1.3 申报

(1)2015年2月7日(456518)HTML解析器可以或许会使frame元素处于不准确的状况

(2)2015年3月5日(464552)在blink::ContainerNode::attach中运用堆Use-After-Free破绽

(3)2015年8月3日(516377)blink::ContainerNode::parserRemoveChild中的UAF/DOM树破坏

(4)2015年8月11日(519558)ContainerNode::parserInsertBefore通用XSS破绽

(5)2015年10月8日(541206)运用document.adoptNode的通用XSS破绽

(6)2015年11月16日(556724)经由历程子框架耐久化的通用XSS破绽

(7)2015年11月22日(560011)ContainerNode::parserRemoveChild中更新东西的通用XSS破绽

(8)2016年1月13日(577105)经由历程绕过卸载事宜的通用XSS破绽

(9)2016年4月21日(605766)接纳图象元素致使的通用XSS破绽

(10)2016年6月19日(621362)Flash挪用JavaScript insideNode::removedFrom致使的通用XSS破绽

(11)2016年7月24日(630870)阻拦UA暗影树致使的通用XSS破绽

(12)2016年9月8日(645211)运用blink::HTMLMarqueeElement的通用XSS破绽

(13)2016年10月14日(655904)经由历程全屏元素更新的通用XSS破绽

(14)2016年10月22日(658535)运用<input type=”color”>元素的通用XSS破绽

(15)2016年11月8日(663476)经由历程删除链接元素的通用XSS破绽

(16)2016年11月24日(668552)经由历程运用定名来污染私有剧本的通用XSS破绽

知往鉴今:Chromium近三年UXSS破绽剖析及减缓、防备和检测步伐

4.2 Blink:缺乏或不准确运用跨源接见搜检

4.2.1 形貌

这一类破绽相对简朴。在实行敏感操纵时,浏览器应当确保今后高低文(或今后页面)具有恰当的权限。在下面列出的破绽中,该搜检完全缺失,或许在毛病的高低文当中实行。

Bug 504011就是这类题目的一个典范示例。起首,进击者走漏V8ContextNativeHandler的GetModuleSystem()函数。然后,他们运用另一个泉源的跨源窗口对象挪用该函数。现实上,在这里不该当建立跨源援用,然则因为缺乏接见搜检,该函数挪用在另一个源的高低文中返回所要求的模块对象。

针对如许破绽的修复一般对照简朴,比方针对上述示例中的破绽,其修复体式格局以下:

1、在存在破绽的函数中挪用资助函数举行接见搜检;

2、运用BindingSecurity API完成该资助顺序。

4.2.2 加固步伐

请参阅 https://crbug.com/525330  ,在星散框架/窗口时马上清空DOMWindow::m_frame。

Chromium运用具有分歧生命周期的对象来透露表现页面。比方,在导航之间保存Frame对象,但会为每一个页面加载建立一个新的DOMWindow。DOMWindow对象用于存储对框架的援用,纵然在它们已被星散的状况也一样实用。如许就致使了许多题目,个中,跨源框架的接见搜检是在同源的星散窗口上实行的。该补钉修复后,使消灭框架援用成为了可以或许。

4.2.3 申报

(1)2014年2月11日(342618) iframe上的dispatchEvent存在UXSS破绽

(2)2015年6月24日(504011) 经由历程模块体系走漏可以或许完成跨源剧本

(3)2015年8月20日(522791) 运用navigator.serviceWorker.ready的通用XSS破绽

(4)2015年8月24日(524074) 加载已卸载的JavaScript: URI致使通用XSS破绽

(5)2015年9月9日(529682) 内容剧本可以或许在其他扩大的背景页面中评价代码

(6)2016年8月17日(638742) 运用ThreadDebugger::setMonitorEventsCallback的通用XSS破绽

知往鉴今:Chromium近三年UXSS破绽剖析及减缓、防备和检测步伐

4.3 Blink和V8:运用的高低文不准确

4.3.1 形貌

在建立新的JS包装器(Wrapper)对象时,Blink要领一般必需要肯定准确的建立高低文。当用于建立高低文源的值可以或许被用户掌握时,就会发作此类破绽。

以Bug 632634为例,静态要领的绑定代码允许将info.Holder()(其参数的要领)设置为恣意值。然后,info.Holder()的建立高低文可用于返回ScriptState对象,当从静态要领实行时,该对象终究变成跨源援用。

在修复补钉中,包罗两个分歧于先前易受进击的forHolderObject()函数完成(forFunctionObject()和forReceiverObject())。这些完成将依据挪用要领或属性是不是为静态来挑选运用。

这一类中的许多题目都滥用了JS非常建立。Bug 453979就是如许的一个例子:

当DOM要领抛出非常时,非常对象的建立高低文继承自挪用该要领的对象,纵然它来自分歧的源。建立对象的历程当中,没有举行任何接见权限搜检,因而进击者可以或许借助它来猎取一些援用,比方函数组织函数。

针对这些题目的修复要领,一般包罗在抛出非常时对建立高低文举行清算。另一个修复要领是,将跨站点非常(Cross-site Exception)转换为平安毛病(Security Errors)。

末了,Bug 583445是另一个值得存眷的例子。在这类状况下,浏览器在导航后没有更新实行的高低文,因而在新页面中,将在前一个高低文中运转JavaScript。

4.3.2 申报

(1)2015年1月30日(453979) V8中非常对象致使的UXSS

(2)2015年5月31日(494640) 运用IDBKeyRange静态要领的通用XSS破绽

(3)2015年9月10日(530301) 运用栈溢出非常的通用XSS破绽

(4)2015年9月15日(531891) 运用从Object.observe抛出的非常的通用XSS破绽

(5)2016年2月2日(583445) DocumentLoader::createWriterFor中的通用XSS破绽

(6)2016年4月22日(605910) 运用iterables的通用XSS破绽

(7)2016年4月28日(607483) 转换IDL数组/序列中存在的通用XSS破绽

(8)2016年5月31日(616225) V8Console::memoryGetterCallback中存在的通用XSS破绽

(9)2016年7月29日(632634) 静态要领和ScriptState::forHolderObject存在的通用XSS破绽

(10)2016年10月15日(656274) 经由历程提取(Fetch)完成跨源对象走漏

知往鉴今:Chromium近三年UXSS破绽剖析及减缓、防备和检测步伐

4.4 Navigation:isNavigationAllowed()绕过、丧失或绕过ScriptForbiddenScope等

4.4.1 形貌

这是最新的一类破绽。在2016年,共申报了8个此类破绽中的7个。

该类破绽连系了在页面导航逻辑中存在的缺点,来破坏两个不变量中之一。第一个没法实行同步跨源页面加载。如许一来就可以或许致使UXSS,因为TOCTOU题目与加载<iframe>元素中的JavaScript:URI有关。第二个是两个文档不克不及同时附加到同一个Frame对象。若是个中一个文档是同源的,另一个是跨源的,那末进击者就可以或许运用前者来修正后者,而Frame则充任署理。

Bug 616907就是一个很好的例子:

这是ScopedPageLoadDeferrer完成的架构题目。基础上,它经由历程在实例化耽误器时,经由历程将页面符号为耽误来事情。但题目在于,在此以后建立的页面,默许状况下不会耽误加载。进击者可以或许逾越耽误界限挪动iframe,这允许在不测状况下举行同步跨源导航。

其修复要领是,在实例化耽误器时,禁用翻开新页面。

别的一个值得存眷的破绽是Bug 600182:

当ScopedPageLoadDeferrer被烧毁时,会在联系关系的页面和加载器上更新耽误状况。若是在事宜轮回时期预留任何汗青加载,那末耽误器将一直对其举行珍爱,在更新时期将会直接举行处置惩罚,而不搜检框架是不是允许导航。

如许一来,就为进击者绕过FrameNavigationDisabler供应了一条门路。

针对这一破绽的修复要领是,将isNavigationAllowed()搜检挪动到主进口点以举行加载。

4.4.2 加固步伐

请参阅https://crbug.com/629431 。

该范例的破绽依靠于运用嵌套时候轮回来实行页面加载。加载完成后,破绽必需继承实行,然则没法在具有通例超时限定或许诺的嵌套轮回中举行JavaScript回调。该类题目的修复布丁中,处置惩罚了扩大API中的一个题目,这一题目允许进击者绕过限定。

4.4.3 申报

(1)2015年10月22日(546545) 运用插件对象的通用XSS破绽

ScarCruft不断进化,引入蓝牙收割机

摘要 卡巴斯基安全研究人员最早是在2016年发现ScarCruft组织的攻击活动的,随后一直追踪。ScarCruft的交流语言为韩语,应该是有国家背景的黑客组织,主要攻击朝鲜半岛的组织和企业。 近日,研究人员发现了一些关于该组织的攻击活动。分析发现攻击者非常活跃,不断尝试精心制作其攻击攻击。研究人员分析发现了ScarCruft的攻击感染流程。他使用多阶段二进制文件感染来有效地更新每个模块并绕过检测。 研究人员还分析了攻击活动的受害者分布,发现其与DarkHotel APT组织的攻击活动有所重合。 多阶段二进制感染 研究人员发现ScarCruft组织使用常用的恶意软件传播技术,比如鱼叉式钓鱼攻击和Strategic Web Compromises (SWC)。在Operation Daybreak攻击活动中,攻击者使用了0 day漏洞利用来执行复杂攻击。对恶意软件开发者来说,使用公开的漏洞利用代码是更加快捷和高效的。 为了成功为final payload应用植入,ScarCruft使用了多阶段二进制感染方法。初始释放器最著名的函数就是绕过Windows UAC来以更高权限执行下一阶段payload。恶意软件使用公开的权限提取漏洞代码CVE-2018-8120 或UACME来就行权限提升。之后,installer恶意软件会从资源处创建一个下载器和配置文件并执行。下载

(2)2016年3月24日(597532) 运用FrameNavigationDisabler绕过的通用XSS破绽

(3)2016年4月3日(600182) 运用耽误汗青记录加载的通用XSS破绽

(4)2016年4月8日(601706) 运用负载耽误逻辑中的缺点致使的通用XSS破绽

(5)2016年5月19日(613266)  经由历程FrameLoader::startLoad的从新进入完成通用XSS破绽

(6)2016年6月2日(616907) 运用ScopedPageLoadDeferrer绕过的通用XSS破绽

(7)2016年6月6日(617495) 运用雷同文档导航的通用XSS破绽

(8)2016年7月17日(628942) 带有ScopedPageLoadDeferrer和RemoteFrame的通用XSS破绽

(9)2016年9月13日(646610) 运用OOPIF的通用XSS破绽

(10)2016年12月5日(671102) 经由历程绕过ScopedPageSuspender封闭窗口的通用XSS破绽

(11)2016年12月11日(673170) 运用最新小东西更新的通用XSS破绽

知往鉴今:Chromium近三年UXSS破绽剖析及减缓、防备和检测步伐

4.5 扩大API:函数或对象的走漏,和运用恣意或未经受权的createContext

4.5.1 形貌

扩大的体系可以或许接见JavaScript内部的特定地位,同时还为用户高低文供应大众API。因为在API完成中存在分歧的毛病,因而有一些技能可以或许完成对扩大API的滥用。

这一类破绽的主要目的都是走漏内部对象。比方Bug 590275:

RequireForJsInner在内部对象挪用GetProperty,该对象用于存储模块体系的导出函数。在Object.prototype上界说的getter函数可以或许会走漏该对象。随后,走漏的对象将用于猎取跨源接见,比方:

1、经由历程当地函数(比方Bug 590118中的user_gestures.RunWithUserGesture);

2、经由历程滥用SendRequestNatives::GetGlobal来猎取Bug 546677中的受益者窗口对象。

针对分歧的破绽,运用了分歧的修复顺序。个中,一个值得注重的例子是:

1、住手在大众API中运用给定的creationContext;

2、加强对绑定的阻拦。

4.5.2 申报

(1)2015年6月6日(497507) 经由历程当地函数完成跨源剧本

(2)2015年9月22日(534923) 经由历程unload_event模块完成通用XSS

(3)2015年10月22日(546677) SendRequestNatives :: GetGlobal的通用XSS

(4)2016年2月26日(590118) 运用截获的当地函数的通用XSS

(5)2016年2月26日(590275) ModuleSystem::RequireForJsInner内部对象走漏致使通用XSS破绽

(6)2016年3月26日(598165) 经由历程Object.prototype.create阻拦绑定致使的通用XSS破绽

(7)2016年4月6日(601073) 扩大绑定中的通用XSS破绽

(8)2016年4月19日(604901) 经由历程SchemaRegistry完成的耐久化通用XSS破绽

知往鉴今:Chromium近三年UXSS破绽剖析及减缓、防备和检测步伐

4.6 V8:缺乏或不准确运用接见搜检

4.6.1 形貌

这一类破绽与第2类类似,独一的区别是搜检的地位应当位于V8端。

以Bug 354123为例:

Object.setPrototypeOf的今后完成没有任何平安搜检。为了完成UXSS破绽运用,进击者可以或许用一个对象来替代受益者的窗口原型,该对象具有从新界说的默许要领/属性接见器,从受益者的JS高低文中走漏对象。

针对该破绽,其处置惩罚设想非常简朴,只需增加必需的接见挪用搜检便可。

4.6.2 申报

(1)2014年3月19日(354123)

(2)2015年2月6日(455961)

(3)2016年6月10日(619166)

知往鉴今:Chromium近三年UXSS破绽剖析及减缓、防备和检测步伐

4.7 特定于Flash的题目

4.7.1 形貌

在Flash插件中,有其本身的SOP战略完成。该类破绽连系了插件本身中缺乏的平安搜检,和Chromium的代码中对Flash的支撑题目。

这一类的大多数毛病,都是由Adobe举行修复的。针对Bug 569496的修复要领,是为了防备PPB_Flash_MessageLoop中的页面加载。

4.7.2 申报

(1)2014年10月20日(425280) 运用文件上传和重定向绕过Flash跨域战略(仅限Chrome)

(2)2015年4月27日(481639) 经由历程ActionScript的Sound对象完成通用SOP绕过

(3)2015年12月14日(569496) 运用Flash音讯轮回致使通用XSS破绽

知往鉴今:Chromium近三年UXSS破绽剖析及减缓、防备和检测步伐

4.8 自界说题目:外部依靠项、自界说形式(比方:设想形式、DevTools)、插件(比方:Pepper)和特别资本范例

4.8.1 形貌

该类破绽的缘由在于Chromium代码库的分歧局部,没有任何通用的形式和纪律。现实上,可以或许将这些破绽零丁分为一类,但我们将其放在“自界说题目”的分类中,好像越发公道一些。

因为破绽的性子分歧,以是修复顺序也完全分歧。

个中,有两个题目(Bug 429542和Bug 594383)都是由file://协定的特别处置惩罚引发的。其修复体式格局为:

1、使“file:”成为有用的独一泉源;

2、在初始化主框架之前运用WebSettings。

4.8.2 申报

(1)2014年11月2日(429542) Linux上经由历程/proc/self/fd/完成文件到文件SOP绕过

(2)2014年12月23日(444927) 继承的designMode和跨窗口拖放允许修正跨源iframe的DOM

(3)2015年2月28日(462843) AuthenticatorHelper中存在UXSS破绽

(4)2015年12月15日(569955) 运用全屏API致使通用XSS破绽

(5)2016年3月13日(594383) file://页面window.open()存在UXSS破绽

(6)2016年8月14日(637594) 运用DevTools的通用XSS破绽

知往鉴今:Chromium近三年UXSS破绽剖析及减缓、防备和检测步伐

4.9 分歧类其余申报分部

知往鉴今:Chromium近三年UXSS破绽剖析及减缓、防备和检测步伐

4.10 时候组合视图

知往鉴今:Chromium近三年UXSS破绽剖析及减缓、防备和检测步伐

五、其他浏览器中的UXSS破绽

现实上,其实不只仅在Chromium中才存在UXSS破绽,每一个主流浏览器都曾涌现过该范例的破绽。我们枚举一些实例,并将它们与Chromium界说的种别举行对照。

5.1 Safari

Chromium和Safari曾配合运用雷同的衬着引擎,因而本文中列出的许多旧Bug也会影响Safari。近来的一个例子是https://bugs.chromium.org/p/project-zero/issues/detail?id=1068 ,这是JavaScriptCore绑定中的一个毛病,Safari的JavaScript引擎与Chromium的V8分歧,它与第3类完全婚配。个中一个参数用于肯定非常对象的建立高低文。进击者可以或许通报一个跨源对象作为参数,从而取得一个跨源非常,该非常暴露了另一个泉源的组织函数。

针对该破绽的修复,对函数举行了修正,以直接经由历程附加参数猎取高低文。

5.2 Edge

CVE-2017-0002演示了处置惩罚about:blank页面的毛病。这些页面的特别的地方在于它们没法从URL派生它们的源,而是继承了翻开者或许父页面的泉源。毛病地实行此行动,可以或许会致使违背SOP。在这类状况下,一个未继承其源的about:blank页面(比方:一个空页面)可以或许接见任何其他about:blank页面。这个破绽上现实上险些与此前Chromium的Bug 89453雷同,都属于第8类。

遗憾的是,针对该破绽的修复,没有宣布公然的链接。

5.3 Firefox

在Firefox中,我们发明了一个值得注重的破绽,对特别字符的毛病处置惩罚允许进击者诳骗页面URL。纵然内部代码依然可以或许从诳骗URL中准确地肯定源,Flash插件也会将诳骗局部视为现实的域名。因而,进击者可以或许在受益者页面的高低文中运转ActionScript代码。该破绽属于第7类。

其修复要领是改进了URL的考证体式格局。

5.4 小结

可以或许看出,本文中引见的破绽分类也一样实用于其他浏览器,而且针对分歧浏览器,可以或许存在一些雷同的破绽。如许一来,我们这篇文章,可以或许对Chromium以外的浏览器中完成UXSS防备有所资助。

六、潜伏减缓步伐及应对要领

在本节中,主要引见了一些检测或减缓UXSS破绽的体式格局,和这些体式格局所带来的警示。这些设想与上述任何特定种别无关,属于通用的要领。

6.1 DataFlowSanitizer Instrumentation

DataFlowSanitizer是用于广义动态数据流剖析的存储器东西。DFSan API允许运用符号来符号内存中的任何字节。DFSan在复制数据时一样也会附带标签。关于某些操纵(比方:增加),若是源操纵数具有分歧的符号,那末这些符号将被衔接,以构成新的组合符号。然后,在顺序实行的任何时刻,我们可以或许查询哪些标签被附加到特定的内存字节。

理论上,这类要领可以或许终究可以或许跟踪对象所联系关系的劈头,并依据分派的DFSan符号实行接见搜检。然则,关于这一类破绽,如许的要领好像对照低效。我们弗成以或许在基础范例(如WTF::String或WTF::Vector)内为内存字节分派恰当的符号,因为这些范例的对象不清楚它们的联系关系劈头,以至是相干的框架。

6.2 经由历程DOM Wrappers举行原始清算

之前议论过得另一个发起被称为“针对每一个源的内存珍爱”。简短来讲,该发起是指将源与DOM包装器相干联,并将一切进口点从V8挂钩到Blink(可以或许另有一些从Blink到V8的进口点)。

正如发起文档中所说的那样,珍爱包装器接见不足以阻挠UXSS进击。有许多要领可以或许在不经由包装的状况下运用UXSS。因而,这可以或许不是一个太好的设想,但无论怎样,它有助于防备致使UXSS的许多破绽。

6.3 对UXSS破绽举行隐约测试

在一些破绽申报(比方:https://crbug.com/497507 和 https://crbug.com/504011)中,运用了以下的要领来演示UXSS运用。一个无害的parent.html页面嵌入了child.html页面,该页面实行破绽运用,并终究接见父页面。然后,经由历程修正父页面的配景色彩来完成演示。

假定我们有可以或许经由历程实行由Fuzzer天生的JavaScript代码,来取得跨源接见,我们可以或许经由历程以下体式格局举行隐约测试。

1) 隐约测试历程对一组HTML文件举行操纵:

Parent.html是具有常量内容的束缚,大抵以下所示:

<!doctype html>
<title>Parent</title>
<body>
<script>
...
var savedState = deepCopy(window);
setTimeout(() => verifyState(window, savedState), TIMEOUT);
</script>
<iframe sandbox="allow-scripts" src="child.html"></iframe>
</body>

child.html包罗天生的JavaScript代码,并实行恣意API要领挪用和DOM树操纵。我们可以或许运用现有的隐约器来天生此类文件。

2) deepCopy要领建立JavaScript窗口对象今后状况的快照。因为大多数DOM对象一般具有可以或许从窗口接见的JS包装器,因而它们也包罗在快照当中。

3) 在child.html中的代码运转一段时候以后,verifyState遍历对象树将其与快照举行对照。若是不婚配,则可以或许透露表现SOP违规。

关于怎样运用隐约测试来发明SOP绕过,我们有别的一个思绪,可以或许会运用于现有的Fuzzer上。详细是,在现有Fuzzer天生的每一个测试用例结束时,考证document.origin。若是原始值相符以下前提,则申报毛病:

针对经由历程HTTP供应的测试用例,不该即是http://localhost:8000 ;

针对直接从磁盘翻开的测试用例,不该即是null。

但是,正如我们之前所形貌的,大多数已知的SOP绕过都是逻辑破绽,而不是内存破坏的破绽。因而,自动天生触发SOP绕过的Payload将比经由历程运用分歧JavaScript对象实行的随机操纵触发内存破坏破绽Payload的天生要难题很多。

别的一个风趣的看法是,衬着器历程中的代码实行破绽基础上等同于UXSS。其缘由在于,代码实利用进击者可以或许掩盖平安搜检,并取得跨源接见。需要注重的是,这在PlzNagivate启动后不实用。

6.4 站点断绝

在研讨时期,我们剖析的绝大多数破绽都运用跨站框架。在这类状况下,分歧的泉源一般会同享雷同的衬着器历程。因而,SOP绕过题目的进击面非常大:

1、Blink、Bingings、V8中的逻辑毛病;

2、扩大和其他API;

3、致使长途代码实行的内存破坏破绽。

站点断绝项目旨在增加对每一个历程的站点战略的支撑,以确保一切衬着器历程包罗来自最多一个网站的文档。在2017年终,这项研讨最后举行时,站点断绝看上去关于减缓UXSS进击非常有价值。

如今,我们可以或许运用站点断绝,它于2018年年中布置在Chromium的桌面版本中,受损的衬着器没法在不绕过沙箱限定的状况下接见另一个站点,如许一来就明显提高了进击者所消费的本钱。因而,与上述进击面比拟,沙箱的进击面要小许多。

值得注重的是,站点断绝依然存在一些局限性。起首,站点断绝设想文档对站点有严厉的界说:页面的站点包罗协定和注册的域名,包罗公然后缀,但疏忽子域名、端口和途径。这与源的界说不完全婚配,不然某些浏览器功用将非常难以完成(比方:document.domain修正)。因而,当进击者可以或许在与受益者雷同的二级域名和协定中运转JavaScript时,站点断绝将没法珍爱免受UXSS进击。

其次,像<img>和<script>如许的一些Web功用在汗青上允许跨源要求。Chromium运用跨源资本阻挠(CORB)来防备它们用作走漏敏感的跨源数据的要领。然则,CORB运用内容范例嗅探,这可以或许会在某些极度状况下发作不准确的效果,而且只珍爱JSON、XML和HTML数据,因而它不会阻挠进击者盗取JS、CSS和媒体文件。

七、总结

站点断绝是针对UXSS进击最有用的对策,主要在于它将击破绝大多数依靠于一致历程跨源帧的可用性的UXSS破绽。在Chromium中布置站点断绝后,UXSS破绽运用的本钱将非常接近于完全长途代码实行破绽运用的本钱,包罗沙箱逃逸。沙箱逃逸被以为是破绽运用链中最庞杂、本钱最高的一项。


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明知往鉴今:Chromium近三年UXSS破绽剖析及减缓、防备和检测步伐
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址