شرکت نماوا چند وقتی هست توی برنامه بانتی راورو حضور داره و آسیبپذیریهای خوبی بش گزارش شده. ما هم روی نماوا وقت گذاشتیم و چندین آسیبپذیری بشون گزارش دادیم. توی این پست و پست بعدی سعی میکنم جزئیات دو تا از آسیبپذیریهایی که بشون گزارش کردیم رو منتشر کنم. الان که این پست رو مینویسم چند ماهی از گزارش این آسیبپذیریها میگذره و نماوا جای امنتری شده و خطری اون قسمت سامانه رو تهدید نمیکنه، این پست تنها جنبه آموزشی داره و امیدوارم خوشتون بیاد.
شرح آسیبپذیری
با بررسیهای بعمل آمده مشخص گردید که در دامنه https://tv.namava.ir دارای آسیبپذیری است که امکان تصاحب حساب کاربری را تنها با یک کلیک به مهاجم میدهد.
ریسک آسیبپذیری
ریسک آسیبپذیری بالا براورد میگردد و سناریوهای زیر محتمل است:
- حمله به یک کاربر خاص و تصاحب حساب ایشان
- حمله گسترده به کاربرهای نماوا، بدین صورت که در یک سایت پر بازدید تکه کد کوچک جاوااسکریپ گذاشته شود و تمامی کاربرانی که از سایت بازدید میکنند، حسابشان مورد تصاحب قرار بگیرد
شناخت هدف
مهمترین مرحله شکار آسیبپذیری، شناخت هدف به دقیقترین شکل ممکنه. تکنیکهای زیادی برای کشف داراییهای یک هدف وجود دارد، در کنار این امر، شناسایی هر کدوم از داراییها پروسه مجزایی دارد. فاز شناخت بر روی دارایهایی برنامه نماوا صورت گرفت. یکی از قابلیتهای ورود کاربران در دامنه https://tv.namava.ir امکان ورود با لینک بود (الانم هست). این سابدامین همونطوری که اسمش پیداست برای ورود راحت کاربران در تلویزون طراحی شده. راحتی کار اینجاست که کاربر دیگه لازم نیست نام کاربری یا پسوردش رو دارد کن، کافیه در تلویزیون «ورود با کد» رو انتخاب کنه، سامانه به کاربر یک کد QR میده (یکه توش یه لینک هست) که کاربر با اسکن کردن و باز کردن لینک پشت QR کد توی دستگاهی که الان لاگین هست، باعث لاگین شدن در تلویزیون میشه. پس کل فرآیند اینطوریه:
کاربرا توی گوشی یا سایت لاگین هست، توی تلویزیون گزینه «ورود با کد» رو انتخاب میکنه، کد QRرو اسکن میکنه و بدون اینکه توی تلویزیون اطلاعاتی وارد کنه لاگین میشه.
شرح آسیبپذیری
خب جریانکاری بالا پیادهسازیهای مختلفی میتونه داشته باشه. وقتی لینک توسط کاربر باز میشد درخواست زیر از سمت کاربر مرتبا ارسال میشد که مشخص کنه «کاربر در مرورگری که لاگین است» لینک را باز کرده یا نه:
در صورتی که لینک باز نشده باشد، جواب زیر دریافت میشد:
که نشان میدهد کاربر هنوز لینک را باز نکرده. بلافاصله پس از باز شدن لینک توسط کاربر، پیغام زیر نمایش داده میشد:
حتی در صورتی که کاربر روی گزینه ادامه کلیک نکند، در وبسایت https://tv.namava.ir جواب زیر را دریافت میکند:
که توکن را دریافت میکند و لاگین میشود. جریان کاری ورود (این جریان بلافاصله بعد از کلیک کردن کاربر بر روی لینک ورود است):
- کاربر در تلویزون خود روی گزینه ورود با کد کلیک میکند، «کد ورود» کاربر در پاسخ سرور وجود دارد، کافی است این کد به سرور اصلی برسد
- از این لحظه به بعد، مرورگر کاربر در تلویزیون هر چند ثانیه درخواستی ارسال میکند که بررسی کند کاربر QR را اسکن کرده یا نه
- کاربر QR را اسکن میکند و لینک را باز میکند، «کد ورود» به سایت اصلی ارسال میشود،سایت اصلی درستی «کد ورود» را بررسی میکند
- سرور در جواب درخواست بعدی مرحله ۲، به کاربر نشست لاگین شده میدهد و کاربر لاگین میشود
آسیبپذیری در این قسمت رخ داده است: کاربر بدون اینکه تائید کند که لینک را باز کرده است، در سامانه https://tv.namava.ir لاگین میشود.
سناریو حمله
با توجه به جریانکاری بالا، مهاجم میتواند حمله زیر را ترتیب دهد:
سایت https://tv.namava.ir را باز کرده، ورود با لینک را انتخاب کرده، لینک را تولید کرده، در یک iframe که مخفی است در سایت خود گذاشته و از قربانی میخواهد سایت (مثلا https://memoryleaks.ir) بازدید کند. در این صورت بلافاصله پس از بازدید، قربانی اجازه ورود با حساب خود را به مهاجم میدهد و حساب کاربری ایشان تحاصب میشود.
شرط تصاحب حساب: کاربر در حالی که در سایت نماوا لاگین است، از سایت مهاجم (مثلا https://memoryleaks.ir) بازدید کند.
جریان کاری حمله به شرح زیر است:
فایل اکسپلویت به همراه فیلم اثبات:
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<h1>Hi :)</h1>
<iframe src="https://www.namava.ir/a/nn4zqq" style="width:0;height:0;border:0; border:none;"></iframe>
</body>
</html>
همچنین فیلم اثبات آسیبپذیری رو میتونید مشاهده کنید:
این آسیبپذیری بخاطر امکان «لاگین با یک کلیک» اتفاق افتاد. در کل این نوع اجراز هویت از لحاظ امنیتی درست نیست و باید از کاربر تائید گرفته بشه. این تائید میتونه در غالب یک سوال انجام بشه. برای مثلا بعد از باز کردن لینک توسط کاربر، از ایشان پرسیده بشه «آیا مایل به لاگین در دستگاه X هستید؟» و کاربر باید روی کلمه بله کلیک کنه. این کلیک باعث بوجود اومدم User Interaction میشه و جلوی آسیبپذیری رو میگیره. همچنین موارد دیگهای هم باید برای این نوع احراز هویت صورت بگیره:
- ارسال تائید نهایی بصورت POST همراه با یک توکِن تصادفی و یکتا (برای جلوگیری از CSRF)
- استفاده از هِدِر x-frame-options به منظور جلوگیری از Click-Jacking و امکان لود کردن لینک توسط iframe
خب این پست اینجا تموم میشه، نماوا این آسیبپذیری رو درست کرد، اما چندی بعد دوباره از همین نقطه موفق شدیم آسیبپذیری رو کشف کنیم، چطور؟ با دورزدن محدودیتهایی که روی این روش ورود گذاشته بود. در پست بعدی ابتدا نحوه پَچ کردن نماوا، و سپس نحوه دور زدن پَچ رو با هم مرور میکنیم.
زندگی من به سه قسمت تقسیم میشه، قسمت اول کار روزانه من هست که مثل بقیه مردم میرم سر کار. قسمت دوم سعی در براورده کردن علایق کاری خودم، مثل همین وبلاگ. قسمت سوم هم خانواده، مسافرت و تفریح. تلاش میکنم توی قسمت دوم، باگبانتی کار کنم، هم درآمد خوبی داره هم هیجان خاص خودش رو. اون قسمتهایی از تکنیکها و کشفیات در فرایند باگبانتی رو سعی میکنم توی این وبلاگ قرار بدم.
عالی بود، منتظرم نحوه پچ کردن و دور زدن پچ رو هم ببینم
سلام چقدر طول می کشد مهارت های شما یاد بگیرم
کدام مهارت بیشترین درامد را دارد
الان در اصل کار شما CSRF Attack بودش دیگه؟
سلام آره دقیقا
سلام. خسته نباشید. خیلی خوب میشه اگر بتونید امکان عضویت در خبرنامه بزارید. مثلا از طریق ایمیل (با feedburner گوگل) یا وب نوتفیکیشن. اینجوری به محض قرار گرفتن پست جدید، یه اطلاعیه دریافت میکنیم و زود به زود به سایتتون سر میزنیم
داره که وردپرس خودش، https://memoryleaks.ir/feed
سلام و وقت بخیر
یاشار جان چطوری این باگ ها رو کشف میکنین؟ با تمرین زیاد انقدر مسلط شدین یا نه روش خاصی داره؟
اگر در کنار تمرین کردن از یوتیوب نحوه کشف باگ یا حل باگ را ببینم کمکی میکنه بهم؟
سلام عالی بود ممنون از مطالب عالی