چگونه توانستم آسیب پذیری ۶۰ میلیون تومانی Mass Assignment را برروی وبسایت راورو کشف کنم؟
آنچه میخوانید، رایتاپ محمدجواد بناروئی (@hitman) ، از فرآیند کشف آسیبپذیری Mass Assignment برروی سامانهی راورو است که درنهایت با رسیدن به آسیبپذیری Broken Access Control به بانتی ۶۰ میلیون تومانی از راورو منجر شده است.
دربارهی محمدجواد:
محمدجواد شکارچی آسیب پذیری و متخصص تست نفوذ برنامههای تحت وب است. ۲۱ سال سن دارد. اهل جنوب، دیار دریا و خطهی مردمان خونگرم شهر بندرعباس است. دو سال است که بهصورت حرفهای به شکار آسیب پذیری میپردازد.
داخل پرانتز:
محمدجواد گزارش مربوط به این رایتاپ را پیش از این در پلتفرم راورو و برای میدان راورو ثبت کرده و آسیبپذیری نیز به طور کامل رفع شده است.
پیشنهاد خواندنی: پرداخت ۶۰ میلیون تومان بانتی در ازای گزارش یک حفره امنیتی، توسط راورو
داستان از کجا شروع شد؟
مقدمه:
داستان از آنجایی شروع شد که طی یک اطلاعیه متوجه شدم که در قوانین میدان راورو، بازه و محدودهی بانتی تغییرهایی ایجاد شده بود. این تغییرات توجه من را برای بررسی به خودش جلب کرد و فرصتی شد که بتوانم برروی هدف راورو کار کنم. بازهی مبلغ بانتی راورو هم برای من جذاب بود و ارزش صرف وقت زیاد روی این پلتفرم را داشت.
شروع ماجرا؛ تلاش اول
شروع کار من با توجه به قوانین میدان، این بود که یک Recon قوی از تارگت داشته باشم و همهی Endpoint های مهم که بهنظرم، میتوانستند من را به یک آسیب پذیری برسانند، را جمعآوری کردم. جمع آوری Endpoint ها، و اینکه چه پارامترهایی برای هر API قرار داده شدهاند، مرحلهی مهمی از جمع آوری بود که در شکار آسیب پذیری کمکم کرد. شروع دسترسی و آشنایی به تمامی API ها برای من زمانی رخ داد که سایت راورو در حال بهروزرسانی بود و از تکنولوژی GraphQL استفاده میشد. بر همین اساس یک مشکل Misconfiguration از سایت راورو در جریان به روزرسانی سایت، در جایی از مسیر که GraphQL روی مد development بالا بود، پیدا کردم، https://www.ravro.ir/api/graphql?query=query
همانطور که در عکس بالا میبینید، تمامی APIها در mode توسعه یا Development در زمان بهروزرسانی مشخص هستند. این مورد را به پشتیانی راورو اطلاع دادم. از این موضوع آگاه بودند و گفتند که به دلیل بهروزرسانی و آپدیت سایت است. و این بیان و درخواست را اعلام کردند که اگر متوجه موردی امنیتی شدم، در جریان قرارشان دهم. که من مورد دیگهای را از API پیدا نکردم... .
ادامه دادم؛ تلاش دوم
چند ماه گذشت. ۱۷ شهریورماه بود که به رویداد خصوصی راوروپلاس دعوت شده بودم تا برروی یک سری از میدانهای راورو به کشف و شکار آسیب پذیری بپردازم. من تصمیم گرفتم رونالدینیووار برروی سایت راورو وقت بگذارم. ((:
نقطهی قوت من در تلاش دومم، بررسی تغییرات اخیر راورو در آپدیتهایش بود. ویژگیهای جدیدی که راورو در چند ماه گذشته، در نسخههای 2.3.0 و 2.3.1 اضافه کرده بود، نقطهی عطفی برایم شد. تصمیم گرفتم که این موارد را مجددا با یافتن APIها بررسی کنم.
متوجه شدم که در تعریف هدف جدید و ویرایش اهداف ویژگیهایی اضافه شدهاند.
این طور نوشته شده بود:
• قابلیت انتخاب گروههای شکارچیان در فرآیند تعریف هدف برای شکارچیان فراهم شده است. میدانها در فرآیند تعریف هدف میتوانند به انتخاب دستهای مشخص از شکارچیان آسیبپذیری، از میان دستههای شکارچیان آسیبپذیری بپردازند و همچنین اعضای موردنظر خود را به گروههای انتخابشده اضافه یا از آنها کم کنند. دستههای قابلانتخاب شکارچیان عبارتند از؛ "شکارچیان دارای تیک آبی" ، "شکارچیان سطح ۱" ، "شکارچیان سطح ۲" و "شکارچیان سطح ۳" برای میدانها در فرآیند تعریف هدف جدید یا ویرایش هدف موجود.
بادقت متوجه شدم در این متن اشکالی وجود دارد، و درواقع منظور این بوده:
“قابلیت انتخاب گروههای شکارچیان در فرآیند تعریف هدف برای میدانها فراهم شده است. میدانها در فرآیند تعریف هدف میتوانند به انتخاب دستهای مشخص از شکارچیان آسیبپذیری، از میان دستههای شکارچیان آسیبپذیری بپردازند و همچنین اعضای موردنظر خود را به گروههای انتخابشده اضافه یا از آنها کم کنند. دستههای قابلانتخاب شکارچیان عبارتند از؛ "شکارچیان دارای تیک آبی" ، "شکارچیان سطح ۱" ، "شکارچیان سطح ۲" و "شکارچیان سطح ۳" برای میدانها در فرآیند تعریف هدف جدید یا ویرایش هدف موجود”
برای بررسی این ویژگی، دو سناریو به ذهنم رسید:
۱- اینکه به عنوان میدان ثبتنام کنم و وارد سایت شوم.
۲- اینکه بتوانم با همین role شکارچی که دارم، صفحهی میدان را ببینم.
مورد اول به دلیل نیاز به ارتباط با تیم پشتیبانی راورو برای فعالسازی، زمانبر بود و امکانپذیر نبود. پس تصمیم گرفتم مورد دوم را مورد بررسی قرار دهم.
ماجرا هنوز ادامه دارد؛ شروع سناریوی دوم برای کشف آسیب پذیری
خب زمانی که یک شکارچی وارد سامانه میشود، مرورگر شکارچی یک درخواست به API اعتبارسنجی ورود ارسال میکند. در خروجی این API دوباره یک درخواست credential ارسال میکند و در پاسخ میگوید که من Hunter ( شکارچی) هستم. میدانستم که راورو دو role دارد: یکی hunter و دیگری هم company. با تغییر خروجی از response، توانستم Roleم را به company (میدان) تغییر بدهم و وارد میز کار میدان بشوم.
همانطور که در تصویر دیده میشود، در API به نام credential که درخواست را به سمت سرور ارسال کردم و پاسخ سرور برای role رو که برای من شکارچی بود، از hunter به company تغییر دادم و درخواست را به مرورگر خود فرستادم ( البته ذکر کنم که این پاسخ از سرور نبوده و من بین مرورگر و BurpSuite این خروجی رو تغییر دادم تا مرورگر نسبت به این مقدار که توسط فریمورک react سایت نوشته شده است واکنش نشان بدهد )
خروجی این عمل؛ نمایش پوسته میزکار میدان
همانطور که در تصویر میبینید، بخش اهداف و قوانین که برای کاربران با Role میدان است، به داشبورد من اضافه شده. با واردشدن به این بخش، صفحهی تعریف میدان باز شد. درحالیکه این بخش مختص به میدانهاست و نباید توسط شکارچی فراخوانی و باز شود. درخواست ثبت میدان را هم بررسی کردم، ولی سمت سرور این قضیه بررسی و چک میشد. )):
داریم میرسیم به نقطهی قشنگ ماجرا
از بررسیهای قبلی متوجه شده بودم که در بهروزرسانی اخیر راورو یک ویژگی به اسم "نوع دسترسیها" در زمان تعریف میدان اضافه شده. این ویژگی به میدانها، حق این انتخاب را میدهد که بتوانند شکارچیهای دلخواه انتخابی خود را به هدف خود دعوت کنند یا هدف خود را به صورت عمومی و خصوصی تعریف کنند.
خب آسیب پذیری کجا بود؟
در زمانی که بهعنوان میدان گزینهی "دعوتنامهای" را انتخاب میکردم، یک درخواست به API به نام userList ارسال میشد. Responseی که نسبت به این درخواست ارسال میشد، حاوی اطلاعات مهمی از جدول کاربران ( User Model ) بود. اطلاعاتی از 215 شکارچی آسیب پذیری راورو! دادهها فقط شامل اطلاعات آن عده از شکارچیانی بود که در راوروگزارش ثبت کرده بودند و گزارش تاییدشده نیز داشتند.
این دادهها، دو دسته بودند:
دادههای عمومی؛ اطلاعات و دادههایی که در پروفایل شکارچیها هم برای عموم کاربران و بازدیدکنندگان وبسایت قابلمشاهده بود. شامل؛
نام کاربری شکارچی، نام مستعار شکارچی، نوع کاربری شکارچی، تایید ایمیل شکارچی، تایید/عدمتایید شماره تماس شکارچی، مجموع بانتی دریافتی شکارچی، میزان امتیاز شکارچی، شناسهی عکس پروفایل شکارچی، تعداد شکارهای انجام شده شکارچی، فعال بودن شکارچی، مجاز به فعالیت بودن شکارچی، تیک آبی داشتن شکارچی، فعال/غیرفعال بودن شکارچی، مسدود بودن شکارچی، حذف بودن شکارچی، قابلمشاهده بودن شکارچی در سایت و داور بودن شکارچی
و دادههای خصوصی و محرمانه؛ دادههایی که بهطور عمومی نمایش داده نمیشدند. شامل؛
ایمیل شکارچی، شماره تماس شکارچی و مقدار Salt گذرواژهی شکارچی
ویدئو اثبات این آسیب پذیری:
تماشای ویدئو "کشف آسیب پذیری Mass Assignment در وبسایت راورو" در یوتیوب
تماشای ویدئو "کشف آسیب پذیری Mass Assignment در وبسایت راورو" در آپارات
این پایان ماجرا نبود...
در ادامه به سراغ آسیب پذیریInformation Disclosure ای که در بررسی مجدد پیدا شد، میرویم:
پس از گزارش آسیب پذیری و رفع آن از سمت راورو، جهت بررسی دوباره اقدام کردم. در روز دوشنبه ۲۱ شهریور، مجددا این مورد را بررسی کردم و متوجه این قضیه شدم که من هنوز به عنوان شکارچی به این API دسترسی دارم. ولی فقط میتوانستم لیست دستهبندیهای شکارچیان را ببینم و بفهمم که در راورو چه شکارچیانی عضو دستههای اول، دوم و یا سوم هستند.
خط زمانی :
ارسال پیام به پشتیبانی راورو و اطلاعرسانی گزارش آسیب پذیری : روز ۱۴۰۱/۰۶/۱۹، ساعت ۰۰:۴۷ بامداد
دسترسی به هدف راورو در پلتفرم باگ بانتی راورو، برای ثبت گزارش: روز ۱۴۰۱/۰۶/۱۹، ساعت ۰۹:۵۹
بررسی گزارش و رفع آسیب پذیری : روز ۱۴۰۱/۰۶/۱۹، ساعت ۱۰:۵۵
جلسه با تیم فنی و پشتیبانی راورو و ارزشگذاری آسیب پذیری: روز ۱۴۰۱/۰۶/۱۹، ساعت ۱۶
نوشتن رایتاپ : روز ۱۴۰۱/۰۶/۲۱
درسهایی برای من:
در پایان این رایتاپ، مایلم درسی که از کشف این آسیب پذیری گرفتم را با شما اشتراک بگذارم:
1- همیشه هدف داشته باشید.
هدف من در اینجا کشف آسیب پذیری بحرانی از راورو بود که مسیر من را مشخص میکرد.
2- همیشه به میدانهایی که زمان فعالیتشان محدود نیست و درحال آپدیت و تغییرات هستند، بهصورت مکرر سر بزنید. هرجای جدیدی را که پیدا کردید، دوباره با دقت و حوصله بررسی کنید.
3- هیچوقت ناامید نشوید. شروع کشف این آسیب پذیری برای من از جایی بود که در برنامه راورو پلاس در آن شب موفق نبودم. (:
4- همیشه سعی کنید ریکان قویای داشته باشید و در نقشهی ذهنیای که دارید، روی وایتبردتون Entity ها، ارزشهای سازمان و جاهایی که میتوان از آنها استفاده کرد، را دسته بندی کنید.
سخن آخر:
در همینجا میخواهم از تیم راورو تشکر کنم که با تلاشی که در جهت فرهنگسازی امنیت سایبری دارد، باعث شده که برخلاف سال های گذشته، متخصصین امنیتی در داخل کشور هم بتوانند فعالیت حرفهای خوبی داشته باشند و باعث ارتقای امنیت سازمانها و پلتفرمهای داخلی شوند.
بلاگپستهای مرتبط:
۱۱ درسآموختهای که حفرهی امنیتی ۶۰ میلیون تومانی راورو برایمان داشت.
بررسی وجود ۵ آسیب پذیری رایج برروی درگاه پرداخت هدف راورو
چگونه توانستم آسیبپذیری CRLF Injection را بر روی PayPal کشف کنم؟