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 ...
随机推荐
- SDWebimage清空缓存
清空缓存 - (void)clearTmpPics{ [[SDImageCache sharedImageCache] clearDisk]; [[SDImageCache sharedImageCa ...
- android gson使用
第一步注册: compile 'com.google.code.gson:gson:2.6.2' 第二步初始化: Gson gson = new GsonBuilder() .setLenient( ...
- Oracle监控的关键指标
1.监控事例的等待 select event, , , )) "Prev", , , )) "Curr", count(*) "Tot" f ...
- JavaScript类库汇总
日期处理Moment.js http://momentjs.cn/ http://momentjs.com/ nodejslinq,jslinq http://jslinq.codepl ...
- Python之traceback错误堆栈信息处理
一.Python中的异常栈跟踪 之前在做Java的时候,异常对象默认就包含stacktrace相关的信息,通过异常对象的相关方法printStackTrace()和getStackTrace()等方法 ...
- 1.2、Django 视图与网址__进阶
Django 视图与网址进阶 1.1.简单使用: 把我们新定义的app加到settings.py中的INSTALL_APPS中 修改 HelloDjango/HelloDjango/settings. ...
- swoole gets
控制器调用: function gets() { $model = Model('ap_pic'); $model->select = ' id, size_type '; $gets['pag ...
- Codeforces Round #533 (Div. 2) Solution
A. Salem and Sticks 签. #include <bits/stdc++.h> using namespace std; #define N 1010 int n, a[N ...
- Codeforces Round #265 (Div. 2) E
这题说的是给了数字的字符串 然后有n种的操作没次将一个数字替换成另一个字符串,求出最后形成的字符串的 数字是多大,我们可以逆向的将每个数推出来,计算出他的值和位数记住位数用10的k次方来记 1位就是1 ...
- LabView和DLL中的参数问题
注意:在LabView中调用DLL函数时,一定要指定对应的参数类型,而不是选择“Adapt to Type”,否则会出错,不知道为什么书上是要选择“Adapt to Type”. 以下做个参考: 转自 ...