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 ...
随机推荐
- Android中的Handler及它所引出的Looper、MessageQueue、Message
0.引入 0.1.线程间通信的目的 首先,线程间通信要交流些什么呢? 解答这个问题要从为什么要有多线程开始,需要多线程的原因大概有这些 最早也最基本:有的任务需要大量的时间,但其实并不占用计算资源,比 ...
- python中的下划线(私有变量)
Python用下划线作为变量前缀和后缀指定特殊变量. - "单下划线" 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量:不能用"from xx ...
- centos7 python3 安装
mkdir /usr/python3.5 tar -xf Python-3.5.1.tgz cd Python-3.5.1 ./configure --prefix=/usr/python3.5 ma ...
- (2.8)Mysql之SQL基础——索引的分类与使用
(2.8)Mysql之SQL基础——索引的分类与使用 关键字:mysql索引,mysql增加索引,mysql修改索引,mysql删除索引 按逻辑分类: 1.主键索引(聚集索引)(也是唯一索引,不允许有 ...
- git-【十】忽略文件
1.在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件. 不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置 ...
- ubuntu 用法
1:改变某一个目录的拥有者 sudo chown -hR user:user ./目录名 // user:user 用户名:组名 sudo chmod 777 文件 //给文 ...
- HDU1556:Color the ball(简单的线段树区域更新)
http://acm.hdu.edu.cn/showproblem.php?pid=1556 Problem Description N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定 ...
- Python 中的多维字典
Python中的dict可以实现迅速查找.那么有没有像数组有二维数组一样,有二维的字典呢?比如我需要对两个关键词进行查找的时候.2D dict 可以通过 dict_2d = {'a': {'a': 1 ...
- Linux命令: grep命令
基本用法 ...
- Mybatis 之动态代理
使用Mybatis 开发Web 工程时,通过Mapper 动态代理机制,可以只编写接口以及方法的定义. 如下: 定义db.properties driver=oracle.jdbc.OracleDri ...