CVE-2014-4115漏洞分析

一、简介

该漏洞是由于Windows的Fastfat.sys组件在处理FAT32格式的硬盘分区存在问题。攻击者利用成功可导致权限提升。

影响的系统包括:

Windows Server 2003

Windows Vista

Windows Server 2008

Windows XP 不提供补丁更新,但是漏洞仍在存在。

测试环境:

WinXP SP3

下面对漏洞成因做简单分析。

二、漏洞分析

1. "POC"

触发漏洞需要一个FAT32格式(一般都是这个格式)的U盘,然后用010工具将U盘偏移+10h位置的02改为大于2的数值如:77

这个偏移官网上的解释:

2.First Crash

然后用虚拟机连接该U盘,实验中打开U盘中的文件不会触发,只有当删除U盘内文件或者在U盘中创建新文件才会触发。触发后的BSOD:

显示的信息为BAD_POOL_HEADER。

3.Second Crash

内核中使用的pool类似于用户态的heap,调试时需要对fastfat.sys开启Special Pool,就像调试IE漏洞时候开启调试堆一样。下面两条命令都可以:

verifier /volatile /flags 0x1 /adddriver MyDriver.sys //无需重启立即生效,重启后失效

verifier /flags 0x1 /driver MyDriver.sys                 //重启后生效

触发漏洞后windbg显示的信息:

相关寄存器:

相关堆栈:

根据这些信息,目前知道了问题函数为FatCommonWrite,问题寄存器为eax。

4.回溯

对崩溃时的eax寄存器进行回溯,发现其可能和ExAllocatePoolWithTag函数的返回值有关:

可以看到如果cl大于2,会调用ExAllocatePoolWithTag。为了确定程序是否走了这个流程,需要动态调试一下。设置下面这两个断点:

第一个断点是为了过滤掉除了explorer.exe进程以外的进程去FatCommonWrite函数调用。(利用的是进程的EPROCESS结构找到name,再和"explorer.exe"字符串比较。)

第二个断点就是上图IDA截图的"cmp cl,2"指令的位置。

同样开启Special Pool断下来的情况:

此时cl=0x77,所以会去调用ExAllocatePoolWithTag分配pool。此时cl的值恰好等于我们修改U盘+10h位置的值,也就是Number of FATs,这可以通过多次修改U盘该位置的值来确定。

所以崩溃时的eax和分配的pool有关,回溯完毕。

5.Anaysis on vulnerability cause

调用ExAllocatePoolWithTag分配了一个77h字节的pool之后,程序会进入到一个循环:

经过动态调试,红框中的edi等于0x77也就是Number of FATs。所以该循环的框架:

for(i=0;i<Number of FATs;i++){…}

接着再来看看"mov [eax-4],edi"这条造成崩溃的指令,在崩溃之前都操作了什么。得到的结果是这个样子的,eax-4的地址依次为:

0x87700f90 0x87700fa8 0x87700fc0 0x87700fe8 0x87700ff0 0x87701008(crash)

而分配的pool的起始地址为0x87700f88,大小为0x77字节:

所以可以确定这段循环是在对刚调用ExAllocatePoolWithTag分配的0x77字节的pool进行操作。所以可以将这个循环更具体一点了:

这样一来,漏洞的成因就很明显了:调用ExAllocatePoolWithTag分配pool时,应该分配Number of FATs * 18h 大小的pool,而不是Number of FATs大小的。

三、参考

http://www.icewall.pl/?p=680&lang=en

http://blog.vulnhunt.com/index.php/2014/12/03/cve-2014-4115_analysis/

http://msdn.microsoft.com/en-us/library/windows/hardware/ff551832(v=vs.85).aspx

https://technet.microsoft.com/en-us/library/security/ms14-063.aspx

CVE-2014-4115漏洞分析(2014.11)的更多相关文章

  1. 漏洞分析:CVE 2021-3156

    漏洞分析:CVE 2021-3156 漏洞简述 漏洞名称:sudo堆溢出本地提权 漏洞编号:CVE-2021-3156 漏洞类型:堆溢出 漏洞影响:本地提权 利用难度:较高 基础权限:需要普通用户权限 ...

  2. 2014 Multi-University Training Contest 9#11

    2014 Multi-University Training Contest 9#11 Killing MonstersTime Limit: 2000/1000 MS (Java/Others)   ...

  3. Java反序列化漏洞分析

    相关学习资料 http://www.freebuf.com/vuls/90840.html https://security.tencent.com/index.php/blog/msg/97 htt ...

  4. CVE-2014-1767 漏洞分析(2015.1)

    CVE-2014-1767 漏洞分析 1. 简介 该漏洞是由于Windows的afd.sys驱动在对系统内存的管理操作中,存在着悬垂指针的问题.在特定情况下攻击者可以通过该悬垂指针造成内存的doubl ...

  5. FakeID签名漏洞分析及利用(二)

    本文转自:http://blog.csdn.net/l173864930/article/details/38409521 继上一次Masterkey漏洞之后,Bluebox在2014年7月30日又公 ...

  6. 看个AV也中招之cve-2010-2553漏洞分析

    试想:某一天,你的基友给你了一个视频文件,号称是陈老师拍的苍老师的老师题材的最新电影.avi,你满心欢喜,在确定文件格式确实为avi格式后,愉快的脱下裤子准备欣赏,打开后却发现什么也没有,而随后你的基 ...

  7. FFmpeg任意文件读取漏洞分析

    这次的漏洞实际上与之前曝出的一个 CVE 非常之类似,可以说是旧瓶装新酒,老树开新花. 之前漏洞的一篇分析文章: SSRF 和本地文件泄露(CVE-2016-1897/8)http://static. ...

  8. CVE-2016-10190 FFmpeg Http协议 heap buffer overflow漏洞分析及利用

    作者:栈长@蚂蚁金服巴斯光年安全实验室 -------- 1. 背景 FFmpeg是一个著名的处理音视频的开源项目,非常多的播放器.转码器以及视频网站都用到了FFmpeg作为内核或者是处理流媒体的工具 ...

  9. nginx漏洞分析与升级修复

    一 .此次漏洞分析 1 nginx HTTP/2漏洞 [nginx-announce] nginx安全公告(CVE-2018-16843,CVE-2018-16844)在nginx HTTP / 2实 ...

随机推荐

  1. 工具类 util.Date 日期类

    /** * @description format the time * @author xf.radish * @param {String} format The format your want ...

  2. Dev的GridControl控件选择框的使用

    先介绍环境:VS2010,dev11.2 想要达到的效果:,当单击某一行时前面的选择框选中. 在网上找了不少,但是感觉跟我想的做法很不一样(有很多都是再另外添加一个什么CheckBox,这个我在Dev ...

  3. selenium grid的使用与配置

    一.selenium grid的组成与作用:由一个集线器hub和多个客户机node组成,如果你的程序需要在不用的浏览器,不同的操作系统上测试,而且比较多的case需要多线程远程执行,那么一个比较好的测 ...

  4. 使用filter方法过滤集合元素

    文章转自https://my.oschina.net/nenusoul/blog/658238 Problem 你想要筛选出集合中的一些元素形成一个新的集合,这些元素都是满足你的筛选条件的. Solu ...

  5. 打开新世界的第一步:学习servlet

    什么是servlet? 是用Java编写的服务器端程序.其主要功能在于交互式地浏览和修改数据,生成动态Web内容. 创建servlet 一.创建一个web project 1)流程:eclipse-F ...

  6. 第一百零九节,JavaScript面向对象与原型

    JavaScript面向对象与原型 学习要点: 1.学习条件 2.创建对象 3.原型 4.继承 ECMAScript有两种开发模式:1.函数式(过程化),2.面向对象(OOP).面向对象的语言有一个标 ...

  7. 第五十五节,IO多路复用select模块加socket模块,伪多线并发

    IO多路复用select模块加socket模块,伪多线并发,并不是真正的多线程并发,实际通过循环等待还是一个一个处理的 IO多路复用,lo就是文件或数据的输入输出,IO多路复用就是可以多用户操作 IO ...

  8. js-json教程从入门到使用

    json教程从入门到使用 2.json例子: var today_data={"city":"上海","area":"6400&q ...

  9. [CSS备忘]改变选中文本的颜色::selection

    /*Webkit,Opera9.5+,IE9+*/ ::selection { background:red; color:white; } /*Firefox*/ ::-moz-selection ...

  10. iOS开发The Operation couldn't be completed.(LaunchServicesError error 0.)的解决方法

    显示错误:The Operation couldn't be completed.(LaunchServicesError error 0.)解决办法:第1种方法.点击当前的模拟器,点击IOS Sim ...