LocalStorage漏洞分析
之前LocalStorage爆出过一个漏洞,使用Chrome打开这个网站:http://filldisk.com,会将磁盘空间给撑爆,而且Chrome还会Crash。除了FireFox之外,其他浏览器无一例外中招。以下分析一下这个网站所使用的这个漏洞。
其实这个漏洞的作者在他的博客中也做了详细的说明了,想了解的可以看这里:http://feross.org/fill-disk/
规范(http://www.w3.org/TR/webstorage/#disk-space)里面对于磁盘空间的控制有这样的声明:
- User agents should limit the total amount of space allowed for storage areas.
而每个浏览器也做了相应的限制:
- 2.5 MB per origin in Google Chrome
- 5 MB per origin in Mozilla Firefox and Opera
- 10 MB per origin in Internet Explorer
- 5 MB per origin in Safari
对于Chrome,应该实际的容量限制是5 MB per origin,而Safari是用的WebKit内核,WebKit默认是5 MB per origin。
这个漏洞的出现是因为规范里面的另一条声明:
- User agents should guard against sites storing data under the origins other
- affiliated sites, e.g. storing up to the limit in a1.example.com, a2.example.com,
- a3.example.com, etc, circumventing the main example.com storage limit.
这里说到,浏览器应该去做这样的限制:去限制子域名的存储限制,否则主域名的存储限制等同于虚设。
那么问题就来了,很多浏览器都没有对这条进行限制,所以就导致了这个漏洞的出现。http://filldisk.com就是利用了这一点,将用户的磁盘空间迅速填满。
WebKit对每个域名都提供了一个数据库存储LocalStorage的数据,每个数据库的大小都是5MB,估计这样做的原因是可以比较有效的阻止跨域访问。这里的域名不分主域名和子域名,也就是说不管是主域名还是子域名都会各自有个5MB大小的数据库提供读写LocalStorage的数据。而WebKit只限制每个数据库的大小,没有限制总容量的大小,所以就中招了。http://filldisk.com的实现就是通过不断的创建子域名,然后将该子域名的LocalStorage容量写满,因为WebKit没有总容量的限制,那么就像下图一样,一直创建数据库,直到磁盘空间被撑爆为止:
FireFox没有这个问题的原因是非常严格和完整的实现了上述规范里面说到的,下图是FireFox的实现方式:
每个顶级域名共享一个数据库,而这个数据库的大小为5MB,所以不管创建多少个子域名,能占用的总容量只能是5MB。因此,FireFox对这个漏洞完全免疫了。另外,有个问题就是,不太清楚FireFox是怎么保证跨域访问的问题。
接着360就发布了一个新版本,号称第一个修复漏洞的浏览器,看了下360没有按照FireFox的实现方式修改,没有去动WebKit的原生逻辑,只是在外层做了个简单的容量限制,就是限制每个顶级域名所可以的LocalStorage总容量,比如,filldisk.com这个域名总共可用500MB的容量,当然这个值应该是动态修改的吧。那么当这个容量被写满之后,这个顶级域名下的所有域名就不可以再使用LocalStorage的功能了,因为容量已满,而且也没有进行数据淘汰。
虽然360修复了漏洞,但是http://filldisk.com这个网站的设计比较奇怪,好像是专门针对FireFox而写的。尽管360在总容量上做了限制,但是网页上显示的占用容量的数字还是会不断的飙升。因为这个网页的设计是这样的:www.filldisk.com这个域名的LocalStorage用来保存创建了多少个域名,显示的占用容量大小是以5MB乘以这个数据的。虽然后面没有数据库创建了,容量没有增加了,但是子域名还是在不断的创建,那么页面上显示的占用容量还是会不断的增加。即使是解决了容量撑爆的问题,不过小白一看,对比FireFox,这不是没还解决吗,哈哈哈。
LocalStorage漏洞分析的更多相关文章
- Zabbix 漏洞分析
之前看到Zabbix 出现SQL注入漏洞,自己来尝试分析. PS:我没找到3.0.3版本的 Zabbix ,暂用的是zabbix 2.2.0版本,如果有问题,请大牛指点. 0x00 Zabbix简介 ...
- PHPCMS \phpcms\modules\member\index.php 用户登陆SQL注入漏洞分析
catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述2. 漏洞触发条件 0x1: POC http://localhost/p ...
- CVE-2016-0143 漏洞分析(2016.4)
CVE-2016-0143漏洞分析 0x00 背景 4月20日,Nils Sommer在exploitdb上爆出了一枚新的Windows内核漏洞PoC.该漏洞影响所有版本的Windows操作系统,攻击 ...
- Java反序列化漏洞分析
相关学习资料 http://www.freebuf.com/vuls/90840.html https://security.tencent.com/index.php/blog/msg/97 htt ...
- CVE-2014-1767 漏洞分析(2015.1)
CVE-2014-1767 漏洞分析 1. 简介 该漏洞是由于Windows的afd.sys驱动在对系统内存的管理操作中,存在着悬垂指针的问题.在特定情况下攻击者可以通过该悬垂指针造成内存的doubl ...
- CVE-2014-4115漏洞分析(2014.11)
CVE-2014-4115漏洞分析 一.简介 该漏洞是由于Windows的Fastfat.sys组件在处理FAT32格式的硬盘分区存在问题.攻击者利用成功可导致权限提升. 影响的系统包括: Windo ...
- FFmpeg任意文件读取漏洞分析
这次的漏洞实际上与之前曝出的一个 CVE 非常之类似,可以说是旧瓶装新酒,老树开新花. 之前漏洞的一篇分析文章: SSRF 和本地文件泄露(CVE-2016-1897/8)http://static. ...
- CVE-2016-10190 FFmpeg Http协议 heap buffer overflow漏洞分析及利用
作者:栈长@蚂蚁金服巴斯光年安全实验室 -------- 1. 背景 FFmpeg是一个著名的处理音视频的开源项目,非常多的播放器.转码器以及视频网站都用到了FFmpeg作为内核或者是处理流媒体的工具 ...
- Oracle漏洞分析(tns_auth_sesskey)
p216 Oracle漏洞分析: 开启oracle: C:\oracle\product\\db_1\BIN\sqlplus.exe /nolog conn sys/mima1234 as sysdb ...
随机推荐
- modelform动态显示select标签的对象范围
既根据当前登录人,动态显示对象相关的的select的选项,例如 A登录,只显示A的客户,B登录,只显示B自己的客户 先了解form的ModelChoiceField字段(这个表格没意义,就是引出参数q ...
- [SharpMap] 屏幕坐标和Map坐标转换
1. SharpMap中屏幕坐标和地图Map坐标转换: using System.Drawing; using GeoAPI.Geometries; namespace SharpMap.Utilit ...
- SpringBoot 集成Spring security
Spring security作为一种安全框架,使用简单,能够很轻松的集成到springboot项目中,下面讲一下如何在SpringBoot中集成Spring Security.使用gradle项目管 ...
- [py]class的特殊方法
类方法 解释 hasattr hasattr(class) getattr - setattr - delattr - - - __getattr__ __setattr__ __delattr__ ...
- PAT 1061 Dating[简单]
1061 Dating(20 分) Sherlock Holmes received a note with some strange strings: Let's date! 3485djDkxh4 ...
- Deep Learning(5)
五.应用实例 1.计算机视觉. ImageNet Classification with Deep Convolutional Neural Networks, Alex Krizhevsky, Il ...
- 《Clean Code》一书回顾
<Clean Code>一书从翻开至今,已经差不多两个月的时间了,尽管刨去其中的假期,算下来实在是读得有点慢.阅读期间,断断续续的做了不少笔记.之前,每每在读完了一本技术书籍之后,其中的诸 ...
- Java基础教程:注解
Java基础教程:注解 本篇文章参考的相关资料链接: 维基百科:https://zh.wikipedia.org/wiki/Java%E6%B3%A8%E8%A7%A3 注解基础与高级应用:http: ...
- netty4.1.6源码2-------创建服务端的channel
1. netty在哪里调用jdk底层的socket去创建netty服务端的socket. 2. 在哪里accept连接. 服务端的启动: 1. 调用jdk底层的api去创建jdk的服务端的channe ...
- Least slack time scheduling
This algorithm is also known as least laxity first. 词语解释:Laxity 松懈的:马虎的:不严格的,Least-Laxity-First 松弛程度 ...