安全研究

安全漏洞
Microsoft Jet数据库引擎MDB文件解析远程栈溢出漏洞(MS08-028)

发布日期:2007-11-16
更新日期:2008-05-13

受影响系统:
Microsoft msjet40.dll 4.0.8618.0
Microsoft Access 2003
    - Microsoft Windows XP SP2
描述:
BUGTRAQ  ID: 26468
CVE(CAN) ID: CVE-2007-6026,CVE-2008-1092

Microsoft Jet数据库是MS Office应用程序中广泛使用的轻型数据库。

Jet数据库在处理畸形MDB文件时存在缓冲区溢出漏洞,远程攻击者可能利用此漏洞通过诱使用户处理恶意文件,控制服务器。

Office Access在解析MDB文件时会调用Jet数据库引擎(msjet40.dll),如果解析了恶意的MDB文件就会在以下代码中触发栈溢出:

    C:\Windows\System32\msjet40.dll,版本为4.0.8618.0

    .text:1B0B72BB                 mov     ecx, edx        ; ecx=0x5200
    .text:1B0B72BD                 mov     esi, edi        ; esi point
to the datas
    .text:1B0B72BF                 mov     ebp, ecx           ; which
can be find in the mdb file
    .text:1B0B72C1                 lea     edi, [esp+40h]  ; edi point
to stack memory
    .text:1B0B72C5                 shr     ecx, 2
    .text:1B0B72C8                 rep movsd               ; stack overflow!!
    .text:1B0B72CA                 mov     ecx, ebp
    .text:1B0B72CC                 mov     eax, [eax+1]
    .text:1B0B72CF                 and     ecx, 3
    .text:1B0B72D2                 rep movsb

以下为调试信息:

    eax=05f5cb67 ebx=05e66458 ecx=00005200 edx=00005200 esi=05f5cd12
edi=0013db60
    eip=1b0b72c5 esp=0013db20 ebp=00005200 iopl=0         nv up ei pl
nz ac pe nc
    cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000216
    msjet40!Ordinal55+0x23cd8:
    1b0b72c5 c1e902          shr     ecx,2
    0:000> u eip
    msjet40!Ordinal55+0x23cd8:
    1b0b72c5 c1e902          shr     ecx,2
    1b0b72c8 f3a5            rep movs dword ptr es:[edi],dword ptr [esi]
    1b0b72ca 8bcd            mov     ecx,ebp
    1b0b72cc 8b4001          mov     eax,dword ptr [eax+1]
    1b0b72cf 83e103          and     ecx,3
    1b0b72d2 f3a4            rep movs byte ptr es:[edi],byte ptr [esi]
    1b0b72d4 8bb424d4000000  mov     esi,dword ptr [esp+0D4h]
    1b0b72db 8b4b28          mov     ecx,dword ptr [ebx+28h]
    0:000> db esi
    05f5cd12  00 4f 00 53 00 7e 00 31-00 5c 00 56 00 42 00 41  .O.S.~.1.\.V.B.A
    05f5cd22  00 5c 00 56 00 42 00 41-00 36 00 5c 00 56 00 42  .\.V.B.A.6.\.V.B
    05f5cd32  00 45 00 36 00 2e 00 44-00 4c 00 4c 00 23 00 56  .E.6...D.L.L.#.V
    05f5cd42  00 69 00 73 00 75 00 61-00 6c 00 20 00 42 00 61  .i.s.u.a.l. .B.a
    05f5cd52  00 73 00 69 00 63 00 20-00 46 00 6f 00 72 00 20  .s.i.c. .F.o.r.
    05f5cd62  00 41 00 70 00 70 00 6c-00 69 00 63 00 61 00 74  .A.p.p.l.i.c.a.t
    05f5cd72  00 69 00 6f 00 6e 00 73-00 00 00 00 00 00 00 00  .i.o.n.s........
    05f5cd82  00 00 00 00 00 12 01 2a-00 5c 00 47 00 7b 00 34  .......*.\.G.{.4
    0:000> db edi
    0013db60  09 00 00 00 01 00 00 00-18 00 00 00 9a 51 00 1b  .............Q..
    0013db70  86 ce 00 1b 00 c0 f5 05-02 00 00 00 e8 dc 13 00  ................
    0013db80  22 7c 00 1b 0c 11 f4 05-e8 dc 13 00 c0 10 f4 05  "|..............
    0013db90  3c cd 00 1b c0 10 f4 05-00 c0 f5 05 9c 78 e6 05  <............x..
    0013dba0  e8 dc 13 00 05 10 92 7c-38 78 e6 05 eb cb 00 1b  .......|8x......
    0013dbb0  80 9f a4 05 b0 98 a4 05-01 00 00 00 f2 cb 00 1b  ................
    0013dbc0  9c 78 e6 05 e8 dc 13 00-4c dc 13 00 4c dc 13 00  .x......L...L...
    0013dbd0  01 00 00 00 60 f3 00 1b-80 9f a4 05 02 00 00 00  ....`...........

请注意由于这是Jet引擎中的漏洞,因此一些网络空间供应商也可能受影响。攻击者可以上传.asp和.mdb文件,并通过ADODB.Connection服务器对象利用这个漏洞。

<*来源:cocoruder (frankruder@hotmail.com
  
  链接:http://marc.info/?l=full-disclosure&m=119521280515230&w=2
        http://marc.info/?l=bugtraq&m=121070540626537&w=2
        http://www.kb.cert.org/vuls/id/936529
        http://www.microsoft.com/technet/security/bulletin/ms08-028.mspx?pf=true
        http://www.us-cert.gov/cas/techalerts/TA08-134A.html
*>

测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

http://www.milw0rm.com/sploits/11162007-Microsoft_Jet_Engine_MDB_File_Parsing_Exploit.rar

建议:
临时解决方法:

如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:

* 限制对任何应用程序运行Microsoft Jet数据库引擎,在命令提示符处输入下列命令:

echo y| cacls "%SystemRoot%\system32\msjet40.dll" /E /P everyone:N

* 使用组策略限制对任何应用程序运行Microsoft Jet数据库引擎
    
    1. 创建以下脚本,命名为JetCacls.cmd:

@echo off
if exist %systemdrive%\Cacls.log goto end
cacls "%SystemRoot%\system32\msjet40.dll" /E /P everyone:N > nul 2>&1
echo %date% %time%: Msjet Cacls updated > %systemdrive%\Cacls.log
:end
exit
    
    2. 将JetCacls.cmd复制到Netlogon共享文件夹,或域控制器上JetCacls.cmd将从
    其中运行的其他共享文件夹。
    3. 设置JetCacls.cmd。在Active Directory用户和计算机MMC管理单元中,右键
    单击域名,然后单击“属性”。
    4. 单击“组策略”选项卡。
    5. 单击“新建”创建新的组策略对象(GPO),然后输入JetCacls作为策略名称。
    6. 单击新策略,然后单击“编辑”。
    7. 展开“计算机配置的Windows设置”,然后单击“脚本”。
    8. 双击“登录”,然后单击“添加”。此时出现“添加脚本”对话框。
    9. 在“脚本名称”框中键入\\servername\sharename\JetCacls.cmd。
    10. 单击“确定”,然后单击“应用”。
    11. 然后重新启动作为此域的成员的客户端计算机。

* 阻止通过邮件基础结构处理MDB文件
* 配置Outlook 2007在纯文本中阅读邮件。
* 不要打开或保存从不受信任来源或从受信任来源意外收到的Jet或Microsoft Word文件。

厂商补丁:

Microsoft
---------
Microsoft已经为此发布了一个安全公告(MS08-028)以及相应补丁:
MS08-028:Vulnerability in Microsoft Jet Database Engine Could Allow Remote Code Execution (950749)
链接:http://www.microsoft.com/technet/security/bulletin/ms08-028.mspx?pf=true

浏览次数:3595
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障