欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

CVE-2018-8423:Jet Database Engine漏洞分析

来源:本站整理 作者:佚名 时间:2019-08-01 TAG: 我要投稿

2018年9月,ZDI公布了微软Jet Database Engine中某个漏洞的PoC,微软也在2018年10月份发布了修复补丁。为了全面保护客户安全,我们深入研究了漏洞细节,我们发现官方补丁中存在一些问题,及时向微软反馈,最终拿到了另一个漏洞编号(CVE-2019-0576),微软在2018年1月8日修复了该漏洞。
这是微软Jet Database Engine中的一个漏洞,微软在许多产品中(比如Access)都会用到Jet Database Engine。攻击者可以利用该漏洞执行代码,提升权限或者下载恶意软件。我们不清楚是否有攻击者实际利用了这个漏洞,但公众可以从网上自由下载相关PoC。
 
0x01 漏洞概要
为了利用该漏洞,攻击者需要使用社会工程学技术,诱骗受害者打开某个JavaScript文件,该恶意脚本会使用ADODB连接对象访问某个恶意的Jet Database文件。一旦成功访问恶意的Jet数据库文件,攻击脚本就会调用msrd3x40.dll中存在漏洞的某个函数,成功利用该漏洞。
虽然已公开的PoC只会导致wscript.exe崩溃,但实际上使用该DLL的所有应用都存在风险。
当成功触发漏洞后,可以看到如下错误信息:

该消息表明存在漏洞的DLL中出现了访问冲突错误。这是一个“越界写入”漏洞,可以通过OLE DB触发(微软许多应用会使用该API用来访问底层数据)。这类漏洞表明写入数据位于目标缓冲区之外,因此会出现崩溃现象。崩溃的罪魁祸首是恶意构造的Jet数据库文件,该文件利用了Jet数据库文件格式中的某个索引字段,赋予该字段超出预期的索引值,导致出现越界写入,最终导致程序崩溃。
漏洞利用的整体过程如下图所示:

 
0x02 漏洞利用
PoC中包含一个JavaScript文件(poc.js),该文件会调用第二个文件(group1,Jet数据库文件)。我们可以通过wscript.exe运行poc.js来触发崩溃:

在上图中,我们可以查看调试信息,发现崩溃的函数为msrd3x40!TblPage::CreateIndexes。此外,我们还可以看到程序会在尝试写入数据时失败,程序会使用esi寄存器向[edx+ecx*4+574h]处写入数据,但该处地址实际上无法访问。
我们需要理解该位置的构造方式,才能挖掘漏洞的根本成因。根据调试信息,寄存器ecx中包含的值为0x00002300。edx为指向内存的某个指针,后面我们会涉及到。最终这两个寄存器会与十六进制值574相加,用来引用目标内存地址。根据这个信息,我们可以猜测存储在目标位置的数据类型。该数据似乎是一个数组,每个变量大小为4字节,数组起始位置为edx+574h。跟踪程序运行,我们发现0x00002300这个值来自于group1这个PoC文件。

现在我们知道程序会尝试执行越界写入操作,也知道写入的目的地址,我们需要澄清为什么程序会尝试往该地址写入数据。这里我们可以研究一下用户提供的0x00002300值。为了完成该任务,我们首先需要理解Jet数据库文件。
 
0x03 分析Jet数据库文件
之前已经有许多研究人员详细分析过Jet数据库文件结构,大家可以参考这两处资料了解详细信息:
Jabakobob.net
Brian B GitHub
这里简单总结一下,Jet数据库文件采用页面(page)这种组织结构,如下图所示:

头部(header)页中包含与文件有关的各种信息,如下图所示:

在头部页之后为126字节大小的数据,经过RC4加密,密钥为0x6b39dac7(每个JetDB文件都采用这个密钥)。对比PoC文件的键值,我们可知group1采用的是Jet Version 3版文件结构。
接下来是“Table Definition Pages”(表定义页面)部分,其中描述了与表有关的各种数据结构(参考此处详细信息)。
表定义数据中包含各种字段,其中我们需要注意两个字段:Index Count(索引数)以及Real Index Count(实际索引数):

我们可以在PoC文件中确定这些字段值。检查group1文件,我们可以看到如下信息:

在Index Count中总共有2个索引,当我们解析这两个索引时,可以看到非常熟悉的0x00002300值:

这里0x00230000为表中index2的索引号,而这个索引似乎非常巨大,最终导致崩溃。那么为什么这个索引会导致程序崩溃?进一步解析文件,我们可以看到两个索引的名称:

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载