حمله Cross-site WebSocket hijacking

rnpg-cswsh-Cross-site-WebSocket-hijacking
تاریخ انتشار : 1399/05/26 | نویسنده : Mr-M4HDI

حمله Cross-site WebSocket hijacking

در این مقاله، به بررسی و پیاده سازی حمله Cross-Site WebSocket Hijacking (CSWSH) پرداخته و تاثیر آن را شرح خواهیم داد.

 

WebSocket چیست

اتصالات WebSocket از طریق HTTP آغاز می شوند و معمولاً طولانی مدت هستند و از طریق آن می توان

در هر زمان و به هر سمت پیام ها را ارسال نمود. این ارتباط معمولاً باز و بلااستفاده می ماند تا اینکه کلاینت

یا سرور اقدام به ارسال پیام نمایند.

what-is-websocket

 

اتصالات WebSocket چگونه برقرار می شوند؟

اتصالات WebSocket معمولاً با استفاده از JavaScript در سمت کلاینت مانند مثال زیر ایجاد می شوند:

javascript-websocket

پروتکل wss یک WebSocket را از طریق اتصال TLS رمزگذاری شده ایجاد می کند، در حالیکه پروتکل ws از

یک اتصال غیر رمزنگاری استفاده می کند.

برای برقراری اتصال، مرورگر و سرور یک WebSocket handshake را بر روی HTTP انجام می دهند.

مرورگر درخواست WebSocket handshake به صورت زیر انجام می دهد:

WebSocket-handshake

اگر سرور اتصال را بپذیرد، پاسخی تحت عنوان WebSocket handshake را به شرح زیر نمایش می دهد:

WebSocket-handshake2

در این مرحله، اتصال شبکه باز است و می توان برای ارسال پیام WebSocket ها استفاده نمود.

چندین ویژگی برای تشخیص WebSocket handshake وجود دارد که به شرح ذیل است:

  1. هدر های Connection و Upgrade بیانگر این امر می باشند که درخواست و پاسخ از WebSocket handshake استفاده می کنند.
  2. هدر Sec-WebSocket-Version نسخه پروتکل WebSocket را تعیین می کند.
  3. هدر درخواست Sec-WebSocket-Key شامل یک مقدار تصادفی رمزگذاری شده مبتنی بر Base64 می باشد که باید در هر درخواست handshake به صورت تصادفی تولید شود.
  4. هدر پاسخ Sec-WebSocket-Accept حاوی یک مقدار Hash ارسال شده توسط هدر درخواست Sec-WebSocket-Key می باشد که با یک رشته خاص تعریف شده در مشخصات پروتکل، گنجانده شده است. این کار برای جلوگیری از پاسخ های غلط ناشی از پیکربندی اشتباه سرور ها یا Cache شدن Proxy ها انجام می شود.
  5. هدر Sec-WebSocket-Key حاوی یک مقدار تصادفی برای جلوگیری از خطا در Cache شدن پروکسی ها می باشد و برای احراز هویت و یا کنترل session استفاده نمیشود. (این مقدار یک توکن CSRF) نمی باشد.

 

cross-site WebSocket hijacking چیست

cross-site WebSocket hijacking که به عنوان cross-origin WebSocket hijacking نیز شناخته می شود.

شامل آسیب پذیری cross-site request forgery (CSRF) بر روی یک WebSocket handshake می باشد.

این آسیب پذیری هنگامی رخ می دهد که درخواست WebSocket handshake فقط متکی به کوکی های

HTTP برای کنترل session باشد و شامل هیچگونه توکن CSRF و مقادیر قابل حدس نباشد.

یک هکر می تواند صفحه وب مخربی را در دامنه خود ایجاد کند تا یک اتصال cross-site  WebSocket با برنامه

آسیب پذیر برقرار نماید. این برنامه با توجه به Session کاربر قربانی، ارتباط را کنترل می کند. سپس صفحه

مهاجم می تواند پیام های دلخواه را از طریق اتصال به سرور ارسال نماید و محتوای پیغام هایی که از سرور

دریافت می شود را بخواند. این به این معناست که برخلاف CSRF معمولی، هکر تعامل دو طرفه با برنامه به

دست می آورد.

WebSocket-payload

 

تاثیر حمله cross-site WebSocket hijacking چیست

یک حمله موفقیت آمیز اغلب اوقات یک مهاجم را قادر می سازد:

بدون داشتن مجوز، اقداماتی را به عنوان کاربر قربانی انجام دهد. همانند CSRF معمولی، مهاجم می تواند

پیام های دلخواه خود را به سمت سرور ارسال نماید. اگر اپلیکیشن از WebSocket ای برای انجام عملیات

حساس که در سمت کاربر تولید شده، استفاده نماید، هکر می تواند به راحتی پیام های خود را ایجاد نموده و

در دامنه دیگر آن عملیات را انجام دهد. بازیابی داده های حساس که کاربر می تواند به آن دسترسی داشته

باشد. برخلاف CSRF معمولی، حمله cross-site WebSocket hijacking، یک تعامل دو طرفه با برنامه آسیب

پذیر از طریق WebSocket ربوده شده را در اختیار هکر قرار می دهد. اگر برنامه از پیام های WebSocket، برای

بازگرداندن هرگونه داده حساس به سمت کاربر که در سمت سرور تولید شده است، استفاده نماید. هکر

می تواند آن پیام ها را رهگیری نموده و به داده های قربانی دست یابد.

cross-site-WebSocket-hijacking -impact

 

انجام حمله cross-site WebSocket hijacking

از آنجائیکه حمله cross-site WebSocket hijacking در واقع همان آسیب پذیری CSRF در یک

WebSocket handshake می باشد.

 اولین قدم برای انجام حمله، بررسی WebSocket handshake ها و تعیین اینکه آیا آن ها در برابر CSRF

محافظت می شوند یا خیر، می باشد.

در شرایط عادی برای حملات CSRF، به طور معمول باید یک پیام handshake ای که فقط متکی به کوکی های

HTTP برای کنترل session باشد و شامل هیچگونه توکن CSRF و مقادیر قابل حدس نباشد را پیدا کنید.

برای مثال، درخواست WebSocket handshake به احتمال زیاد نسبت به CSRF آسیب پذیر می باشد، زیرا فقط

توکن داخل کوکی تبادل می شود:

CSWSH-Attack

اگر درخواست WebSocket handshake نسبت به CSRF آسب پذیر باشد آنگاه صفحه وب مخرب هکر،

می تواند درخواست cross-site را برای باز نمودن یک WebSocket در سایت آسیب پذیر انجام دهد.

آنچه که در مرحله بعدی حمله اتفاق می افتد، کاملاً به منطق برنامه و نحوه استفاده از WebSocket ها

بستگی دارد. این حمله ممکن است شامل:

  1. ارسال پیام های WebSocket برای انجام عملیات غیر مجاز به جای کاربر قربانی می باشد.
  2. ارسال پیام های WebSocket برای بازیابی داده های حساس.
  3. گاهی اوقات، فقط منتظر رسیدن پیام های دریافتی هستید که حاوی داده های حساس هستند.

 

پیاده سازی حمله Cross-site WebSocket hijacking در محیط آزمایشی

این فروشگاه اینترنتی یک قابلیت Chat آنلاین با استفاده از WebSocket ها پیاده سازی نموده است.

برای انجام این حمله، از یک کد JavaScript/HTML برای سرقت نمودن تاریخچه چت قربانی جهت بدست آوردن

اطلاعات حساب کاربری قربانی استفاده شده است.

 

منابع:

[0] www. portswigger.net

[1] www. portswigger.net /lab

[2] book.hacktricks.xyz