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

 

خطای سرریزی بافر در 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

 

نویسنده:

محسن شریفی