صفحه اول > راهنماييها

 

خطاي سرريزي بافر در Microsoft Jet Database Engine

 

تاريخ انتشار:                             31 مارچ 2005     12:00AM

تاريخ به روزرساني:                   3 اكتبر 2005     03:52PM 

CVE:                                         CAN-2005-0944

كاشف:                                     vuln@hexview.com

ميزان خطر:                              بالا

 

سيستمهاي تحت تاثير:

Microsoft JET 4.0 SP7
Microsoft JET 4.0 SP6
Microsoft JET 4.0 SP5
Microsoft JET 4.0 SP4
Microsoft JET 4.0 SP3
Microsoft JET 4.0 SP2
Microsoft JET 4.0 SP1
Microsoft JET 4.0
+ Microsoft Access 2000
Microsoft JET 3.51 SP3
Microsoft JET 3.51
+ Microsoft Excel 95
+ Microsoft Excel 97
Microsoft JET 3.5
+ Microsoft Access 95
+ Microsoft Access 97
Microsoft JET 3.0
+ Microsoft Access 95
Microsoft JET 2.5
+ Microsoft Access 2.0 SP1
Microsoft JET 2.0
+ Microsoft Access 2.0

 

چكيده:

يك آسيب پذيري از نوع سرريزي بافر در Microsoft Jet Database Engine وجود دارد. نقطه ضعف مذكور در كتابخانه msjet40.dll گزارش شده است. كليه تستها و توضيحاتي كه در زير آورده شده ، روي آخرين نسخه كتابخانه msjet40.dll (نسخه 4.00.8618.0) صورت گرفته است و احتمالا نسخه هاي قبلي اين كتابخانه نيز مستعد اين آسيب پذيري هستند.

نكته: Microsoft Jet Database OLE(msjetoledb40.dll) از اين نقطه ضعف مصون بوده و فقط برنامه هايي كه از msjet40.dll استفاده مي كنند آسيب پذير هستند مانند Microsoft Access.

Microsoft Jet Database به طور گسترده اي توسط برنامه هاي كاربردي Office مورد استفاده قرار مي گيرد. msjet40.dll جزء اصلي Microsoft Jet Database Engine بوده و وظيفه ارزيابي و اجراي تقاضاهاي مربوط به اطلاعات و داده ها درون پايگاه داده را به عهده دارد. در پايگاه داده Access اين كتابخانه به خواندن و نوشتن اطلاعات رسيدگي مي كند.

 

توضيح:

به هنگام تجزيه و تحليل يك فايل پايگاه داده توسط msjet40.dll، ارزيابي اطلاعات به اندازه كافي انجام نميشود و در نتيجه اين امكان وجود دارد كه با تغيير عمدي يك فايل پايگاه داده ،هنگامي كه اين فايل توسط msjet40.dll باز مي شود كد مورد نظر نفوذگر به اجرا درآيد.

در زير قطعه اي از يك فايل mdb خالي آورده شده است. به توالي كاراكترهاي 0x77 در خط سوم توجه كنيد. هنگامي كه msjet40.dll اين بخش از فايل را تجزيه و تحليل مي كند اين كاراكترها سبب ايجاد يك exception  در برنامه ميشوند.

000023B0: 00 00 04 00-49 00 64 00-18 00 50 00-61 00 72 00 ....I.d...P.a.r.
000023C0: 65 00 6E 00-74 00 49 00-64 00 4E 00-61 00 6D 00 e.n.t.I.d.N.a.m.
000023D0: 65 00 77 77-77 77 00 00-05 06 00 00-08 00 02 06 e.wwww..........
000023E0: 00 00 03 06-00 00 0D 00-08 06 00 00-09 06 00 00 ................
000023F0: 10 00 0E 06-00 00 0F 06-00 00 0F 00-0C 06 00 00 ................

 

در زير قطعه كد آسيب پذير كه در كتابخانه msjet40.dll قرار دارد آورده شده است. نفوذگر بطور مستقيم مقدار ثبات AX را كنترل ميكند.

movsx eax, ax
mov ecx, [edi+eax*4+0B0h]
mov edx, [ecx]
call dword ptr [edx+10h]

 

محدوده حافظه اي كه در دسترس مي باشد شامل بخشهايي از فايل اصلي است، يعني مي توان با توجه به قطعه كد بالا ،در ثبات EIP(Instruction Pointer) مقداري را قرار داد كه درون فايل اصلي جاسازي شده است. كد exploitاي كه بدين صورت نوشته شود بسيار قابل حمل (Portable) بوده و نفوذگر هيچ احتياجي به آدرسهاي كد مورد نظر خود ندارد.

 

توجه : تروجاني با نام Backdoor.Hesive با سوء استفاده از اين آسيب پذيري خودش را روي كامپيوترهاي آسيب پذير نصب مي كند.

 

كد Exploit:

http://www.securityfocus.com/data/vulnerabilities/exploits/msjetBufferOverflowExploit.c

 

راه حل:

هنوز هيچ راه حل و اصلاحيه اي در اين زمينه گزارش نشده است.

  

منابع:

Technet Security (Microsoft)

http://www.hexview.com/docs/20050331-1.txt

 

نويسنده:

محسن شريفي