漏洞信息
1 漏洞简介
漏洞名称:Microsoft Windows Win32k本地提权漏洞
漏洞编号:CVE-2015-2546
漏洞类型:UAF
影响范围:Windows 7 Service Pack 1
Windows Vista SP2
Windows Server 2008 sp2
Windows Server 2008 r2 x64 sp1
CVSS3.0:N/A
CVSS2.0: 6.9
2 组件概述
win32k.sys是Windows的多用户管理的sys文件
MicrosoftWindows是美国微软(Microsoft)公司发布的一系列操作系统。kernel-modedrivers是其中的一个内核驱动管理软件。Graphics是其中的一个图形驱动器组件。MicrosoftWindows内核模式驱动程序中存在特权提升漏洞,该漏洞源于程序没有正确地处理内存中的对象。本地攻击者可利用该漏洞在内核模式下运行任意代码奇热。
3 影响版本
Windows 7 Service Pack 1
Windows Vista SP2
Windows Server 2008 sp2
Windows Server 2008 r2 x64 sp1
4 解决方案
http://technet.microsoft.com/security/bulletin/MS15-097
漏洞复现
1 环境搭建
Windows:Windows 7 sp1 x86
win32k.sys:6.1.7601.17154
2 复现过程
获取exp,编译cpp文件,获得可执行文件。在编译过程中,只有x86的编译成功了,x64的暂未成功。
之后在靶机上面执行exp
漏洞分析
1 基本信息
· 漏洞文件:win32k.sys
· 漏洞函数:xxxMNMouseMove
· 漏洞对象:pPopupMenu
2 背景知识
在xxxMNMouseMove函数中,xxxSendMessage(pwnd, 0x1F0,…)发起了一次用户模式回调。在这次回调中,攻击者可以销毁Menu窗口,释放tagPOPUPMENU对象并占位重用。当回调返回内核之后,补丁前的xxxMNmouseMove并没有对已释放的pPopupMenu进行验证。之后pPopupMenu被传入xxxMNHideNextHierarchy,xxxMNHideNextHierarchy会对tagPOPUPMENU.spwndNextPopup发送消息,攻击者创建合适的对象占用被释放的tagPOPUPMENU内存,构造好tagPOPUPMENU.spwndNextPopup的数据,即可实现内核任意代码执行。
3 补丁对比
bindiff进行比较,可以发现在调用SendMessage函数之后增加了一层判断。