卡巴斯基实验室在安全公告中表示,其安全研究人员在win32k.sys中发现了一个新的零日漏洞,代号为CVE-2019-0859。2019年3月,

卡巴斯基的自动漏洞保护(EP)系统在Microsoft Windows操作系统中检测到漏洞企图。但经过进一步分析,他们发现win32k.sys出现了新的零日漏洞。

此外,这是近几个月来实验室第五次发现被利用的本地提权漏洞。

卡巴斯基安全人员在win32k.sys发现新的零日漏洞

Win32k on Win7 SP1 x64! XxxFreeWindow0x1344 Pop-up Window (Photo from Kaspersky Lab)

2019年3月17日,卡巴斯基实验室向微软提交了漏洞报告。该公司确认了该漏洞,并分配了编号CVE-2019-0859。

好在微软已经发布了这个漏洞的补丁,并通过WindowsUpdate推送。

卡巴斯基实验室表示,两名安全研究人员瓦西里别尔德尼科夫和鲍里斯拉林的名字在信用记录上。

至于CVE-2019-0859漏洞的技术细节,主要是CreateWindowEx函数中隐含的释放后使用漏洞。

在执行过程中,CreateWindowEx会在第一次创建窗口时向窗口发送WM_NCCREATE消息。

使用SetWindowsHookEx函数,可以在窗口调用过程之前设置一个自定义回调来处理WM_NCCREATE消息。

卡巴斯基安全人员在win32k.sys发现新的零日漏洞

但是,在win32k.sys中,所有窗口都由tagWND结构呈现,该结构有一个“fnid”字段(也称为函数id)。

该字段用于定义窗口的类别。所有的窗口分为滚动条,菜单,桌面和其他部分。卡巴斯基已经分享了我们之前写过的关于函数ID的bug。

在WM_NCCREATE的回调过程中,窗口的函数ID被设置为0,这使得我们可以在hook内部为窗口设置额外的数据,更重要的是在Hook之后立即执行的窗口过程的地址。

将窗口过程改为菜单窗口过程会导致执行xxxMenuWindowProc,这个函数会启动函数ID为FNID_MENU(因为当前消息等于WM_NCCREATE)。

在将函数ID设置为FNID_MENU之前处理额外数据的能力会强制xxxMenuWindowProc函数停止菜单的初始化并返回FALSE。

因此发送NCCREATE 消息将被视为失败的操作,CreateWindowEx 函数将通过调用FreeWindow 来停止执行。

卡巴斯基安全人员在win32k.sys发现新的零日漏洞

卡巴斯基实验室发现,野外已经有针对64-bit 版本的Windows 操作系统的攻击(从Windows 7 到Windows 10),

其利用了众所周知的HMValidateHandle 漏洞来绕过ASLR 。

成功利用后,漏洞会借助Base64 编码命令来执行PowerShell,主要目的是从https //pastebin.com 下载执行二、三阶段的脚本。

其中三阶段脚本的内容很是简洁明了—— 捷豹shellcode、分配可执行内存、将shellcode 复制到已分配的内存、以及调用CreateThread 来执行shellcode 。

shellcode 的主要目标,是制作一个简单的HTTP 反向shell,以便攻击者完全控制受害者的系统。

相关阅读:

补丁星期二活动微软修复卡巴斯基发现的零日漏洞