دیگه وقتش بود که به کافه بازار هم یک سری بزنیم و ببینیم که میتونیم آسیب پذیری کشف کنیم یا خیر؟
در ادامه به آسیب پذیری حیاتی کشف شده از کافه بازار یعنی Subdomain TakeOver میپردازیم که یکی از مطرح ترین و جالب ترین آسیب پذیری ها هست.
آسیب پذیری Subdomain TakeOver:
در اینجا به مباحث پایه ای آسیب پذیری Subdomain Takeover میپردازیم و بررسی میکنیم که این آسیب پذیری چگونه در کافه بازار وجود داشت و حالا پچ شده.
Subdomain Takover و یا تصاحب ساب دامنه به پروسه ثبت یک دامنه ای ناموجود جهت تصاحب تمامی دامنه های موجود میباشد یعنی در صورت کشف این آسیب پذیری دامنه اصلی و همچنین تمامی ساب دامین های یک سازمان مورد نفوذ قرار میگیرند.
جهت شفاف تر شدن موضوع به بررسی یک مبحث پایه ای در DNS میپردازیم.
رکورد CNAME:
Canonical Name Record یکی از قابلیت های DNS جهت ساخت یک دامنه اشاره گر به دامنه دیگر میباشد، خب این به چه معنی هست؟ چه استفادهای داره؟
برای نمونه سناریو زیر را در نظر بگیرید
سناریو:
در نظر بگیرید که کافه بازار برای مدت محدودی قصد راه اندازی کمپینی جهت دریافت نطرات کاربران درباره وب سایت سازمان خودتون هستید، حالا برای طراحی فرم نظر سنجی ترجیح میدید از یک سامانه ارائه خدمات فرم نظر سنجی استفاده کنید که خودش template های آماده فرم نظرسنجی داره و به این شکل کار میکنه که بعد از ثبت نام در داخل وب سایت شما یک فرم نظرسنجی رو به راحتی طراحی میکنید و بعد یک آدرس دامنه میتونید انتخاب کنید ولی این دامنه یک ساب دامین از اون شرکت هستش برای مثال اگر اسم سامانه فرم ساز formmakers.com و شما داخل اون سامانه یه اکانت برای خودتون بسازید و نام دامنه انتخاب کنید مثله cafebazaar نامه دامنه شما برای فرم ساز میشه cafebazaar.formmakers.com و اگر این آدرس رو به افراد دیگه بدین میتونن بیان و فرم رو داخل سایت پرکنن.
حالا اگر شما داخل وب سایت خودتون بیاید به افراد اعلام کنید که به این آدرس cafebazaar.formmakers.com برن و این فرم رو پرکنن هیچ مشکلی نداره ولی از اونجا که در حوضه SEO و همچنین اعتبار برای سازمان شما، نام دامنه نقش مهمی رو بازی میکنه و میتونه اعتبار شما رو چه از نظر کاربران و چه از نظر موتور های جست و جو بالا ببره، دیدن آدرس cafebazaar.formmakers.com در داخل آدرس مرورگر و یا نتایج جست و جو به زیبایی form.cafebazaar.ir نیست.
استفاده از CNAME اینجا کاربرد داره، شما میتونید برروی DNS سرور هاتون یک رکورد CNAME بسازید و بگید که هر کاربری که برای آدرس form.cafebazaar.ir درخواست داد به آدرس cafebazaar.formmakers.com ارجاع داده بشه ولی تفاوت این موضوع با ریدایرکت کردن کاربر در چی هستش؟ تفاوت این موضوع این هستش که درسته که محتوای نمایش داده شده متعلق به آدرس cafebazaar.formmakers.com هست، اما آدرس نشون داده شده در مرورگر form.cafebazaar.ir هست و این موضوع اعتبار سازمان رو بالا میبره و برای کاربر اعتماد بیشتری رو بوجود میاره. تصویر زیر رو ببینید:
همانطور که در تصویر بالا مشاهده میکنید، پروسه وارد کردن آدرس form.cafebazaar.ir در مرورگر تا نتیجه نهایی در تصویر بالا رو بنده براتون طراحی کردم.
حالا که دلیل اهمیت وجود CNAME رکورد و مابقی ماجرا رو متوجه شدید بریم و ببینیم آسیب پذیری چطور بوجود میاد.
پیرو سناریو قبلی که صحبت کردیم در نظر بگیرید حالا کافه بازار کمپین خودش رو تموم میکنه و اکانت خودش رو داخل وب سایت فرم ساز آنلاین یعنی formmakers.com حذف میکنه و دیگه الان از این به بعد وقتی افراد آدرس form.cafebazaar.ir رو وارد میکنن چون دیگه اکانت فرم ساز مربوط به آدرس cafebazaar.formmakers.com حذف شده، کاربران با خطای “چنین اکانت فرم سازی وجود ندارد” روبرو میشن و سایت formmakers.com میگه همچین دامنه ای یعنی cafebazaar.formmakers.com وجود نداره.
اگر یادتون باشه اول مقاله گفتیم که:
Subdomain Takover و یا تصاحب ساب دامنه به پروسه ثبت یک دامنه ای ناموجود جهت تصاحب تمامی دامنه های موجود میباشد یعنی در صورت کشف این آسیب پذیری دامنه اصلی و همچنین تمامی ساب دامین های یک سازمان در معرض خطر نفوذ میگیرند.
متوجه شدید؟ سایت formmakers.com میگه که این اکانت وجود نداره!!!! معنیش اینه که ما میتونیم این اکانت رو بسازیم.
حالا ما باید نام حساب اصلی یعنی Destination Domain مربوط به این Source Domain رو بدست بیاریم تا بتونیم بریم و ثبتش کنیم، برای بدست آوردن نام اصلی یعنی نام دامنه ثبت شده در سایت formmakers.com باید ببینیم که DNS Server کافه بازار داره برای دامنه form.cafebazaar.ir به کدوم ساب دامنه formmakers.com اشاره میکنه، برای انجام این کار، باید رکورد CNAME در DNS Server کافه بازار رو ازش درخواست کنیم و مقدارش رو ببینیم تا بتونیم بریم و ثبتش کنیم، باید یک درخواست از نوع NS برای DNS Server کافه بازار ارسال کنیم:
یعنی اگه ما داخل وب سایت formmakers.com ثبت نام کنیم و در زمان انتخاب نام دامنه که در ابتدای مقاله صحبت کریدم، آدرس cafebazaar رو برای خودمون انتخاب کنیم، وب سایت formmakers.com میاد و برای ما آدرس cafebazaar.formmakers.com رو ثبت میکنه و به ما تحویل میده. (!jesus)
ولی خب یعنی از این به بعد ما آدرس cafebazaar.formmakers.com رو به افراد بدیم؟ این که خیلی سطح پایین هستش و دامنه تصاحب شده به cafebazaar.ir ختم نمیشه؟!
پاسخ: چون هنوز DNS Server کافه بازار CNAME Record قدیمی رو داره و داره به آدرس cafebazaar.formmakers.com اشاره میکنه و مقدار این رکورد form.cafebazaar.ir هست این به این معنی هستش که ما دامنه form.cafebazaar.ir رو هم تصاحب کردیم و تمام این موارد به دلیلMisconfiguration اعمال شده برروی DNS Server هستش.
تصویر زیر مربوط به بخش تنطیمات مربوط به formmakers.com هست که در اون نام دامنه هدف که میخوایم TakeOver کنیم رو ذکر میکنیم:
حالا چرا این همه سره یه ساب دامنه باید قاطی کنیم؟ مگه حالا چی شده؟ بزارید بهتون بگم که چی شده:
- بر اساس استاندارد مرورگر مربوط به کوکی ها یعنی RFC6265 تمامی کوکی های یک دامنه به تمامی ساب دامنه های اون ارسال میشه و تمامی ساب دامنه ها قابلیت خوندن اون رو دارن
- توانایی خوندن کوکی های از نوع HTTPonly توسط javascript
- توانایی خوندن کوکی های از نوع secure به علت وجود ssl برروی دامنه تصاحب شده
- توانایی ارائه فرم نظرسنجی و جمع آوری اطلاعات کاربران از طرف دامنه مورد اعتماد form.cafebazaar.ir
- توانایی اکسپلویت کردن آسیب پذیری های احتمالی OpenRedirect در کافه بازار که فقط اجازه ریدایرکت به ساب دامنه های YYY.cafebazaar.ir رو میدن و چون ما دامنه form.cafebazaar.ir رو تصاحب کردیم، پس میتونیم جای YYY رو پرکنیم و با توجه به مکانیزم OAuth پیاده سازی شده در کافه بازار اقدام به AccountTakeOver کنیم
- توزیع اپلیکیشن های مخرب از طرف بزرگترین مارکت پخش اپلیکیشن های اندرویدی از طرف دامنه مورد اعماد form.cafebazaar.ir
- پخش اخبار غلط و خدشه دار کردن اعتبار از طرف دامنه مورد اعتماد form.cafebazaar.ir
- و اقدامات بیشتر با توجه به خلاقیت نفوذگر……
خب در رابطه با مبحث اول باید خلاصه بگم که شما میتونید cookie های ست شده برروی یک دامنه رو توسط ساب دامنه های اون بخونید، تصویر زیر برگرفته از ارائهی یاشار شاهینزاده در آفسکانف با عنوان «حمله به زیرساخت وب Alibaba، یکی از بزرگترین پلتفرمهای تجارت الکترونیک در دنیا» واقعا جایه تحسین داره و پیشنهاد میکنم ارائه رو مطالعه بفرمایید، مطالب ارائه شده در رابطه با این موضوع در آفسکانف فوق العاده بود و واقعا خلاقیتهای زیادی در اون استفاده شده بود.
اما یک موضوعی وجود داره و اون هم این هستش که ما برای خوندن کوکی های دامنه های دیگر و اعمال خطرات بیشتر نیازمند توانایی اجرای کد جاوا اسکریپ برروی دامنه تصاحب شده داریم، و من نمیتونستم با تئوری اینکه با تصاحب دامنه میشه اینکار رو کرد ولی هیچ PoC نداشته بشم برم جلو و مشکل بعدی اینجا بوجود اومد که این سیستم ساخت فرم اجازه وارد کردن کد های JavaScript رو نمیده 🙁 چیکار کنیم؟ بیخیال شدم؟! خیر.
برای حیاتی کردن این آسیب پذیری و رسیدن به موارد حساس امنیتی که بالا خدمتتون ذکر شد، شروع کردم به پیدا کردن ZeroDay XSS برروی این پلتفرم فرم سازی، و بعد از پیدا کردن 5 آسیب پذیری Reflected XSS اونم بعد از 3 روز، هنوز هم سطح آسیب پذیری پایین بود چون باید لینکی حاوی اکسپلویت XSS به کاربر داده میشد و من نمیخواستم با کاربرهیچ تعاملی داشته باشم چون سطح آسیب پذیری پایین میومد. چیکار کنیم؟ بیخیال شیم؟! خیر.
روز 7، بعد از ساعت ها تست کردن، بالاخره تونستم آسیب پذیری Stored XSS رو پیدا کنم که اینجا این آسیب پذیری به بالاترین سطح ممکنش میرسید. حیاتی (Critical)
به شخصه احترام فراوانی برای تیم کافه بازار قائل هستم، اما رفتاری که با گزارش این آسیب پذیری داشتن حرفه ای نبوده و دلیل اون هم این هستش:
آسیب پذیری پیدا شده با توجه با پالیسی کافه بازار در سطح حیاتی قرار داره و این فقط مربوط به Subdomain TakeOver تنها هستش و نه Stored XSS + Subdomain TakeOver که انتظار میره با توجه به Escalate (ارتقا) آسیبپذیری رفتار متفاوتی رو شامل بشه.
پس از ارسال گزارش و توضیح موارد، ایمیل دریافتی از تیم کافه بازار به صورت زیر بود:
😐 حالا چیکار کنیم، بیخیال شیم؟ خیر
شروع کردم به بررسی In Scope های کافه بازار و متوجه مورد زیر شدم:
همانطور که در اواسط مقاله صحبت کردیم، آسیب پذیری بوجود اومده مربوط به دامنه form.cafebazaar.ir نبوده، بلکه مربوط به رکورد DNS قدیمی بوده، ولی باید ثابت میشد. عکس بالا لیست In Scope هستش، عکس پایین نشون میده که DNS Server مربوط به کافه بازار شامل این Range IP میشده:
توی خیلی از برنامههای بانتی، سایتهایی از شرکت که از سرویسدهندههای بیرونی استفاده میکنند جزء برنامه بانتی بهحساب نمیان، چرا که اون قسمت از امنیتشون رو برونسپاری کردند و وظیفه برطرف کردن آسیبپذیری، با سرویسدهنده بیرونی است. اما در مورد تصاحب دامنه، این موضوع فرق میکند، چرا که این مشکل از سمت خود شرکت بوده و خطرات بسیاری برای خودشون و امنیت کاربرانشون وجود داشته، من مطمئنم تصمیم بر کم اهمیت بودن این باگ، یک اشتباه فنی از سمت داوران تیم امنیت کافه بوده. بازهم میگم که تیم کافه بازار برخورد کاملا عالی داره و از نظر شخصی خودم، از دیدگاه فنی بچه های فوق العاده قوی هستن و کارهایی که میکنن حرف نداره، امیدوارم توضیحات موجود در این مقاله نظر این دوستان حرفه ای رو تغییر بده.
در آخر، دست از تلاش کردن بر ندارید.
سینا خیرخواه، محقق امنیت
اینجا از تجربیات و باگ های که پیدا میکنم براتون مینویسم.
“در صورت کشف این آسیب پذیری دامنه اصلی و همچنین تمامی ساب دامین های یک سازمان مورد نفوذ قرار میگیرند.”
متوجه نمیشم، چجوری با تصاحب یه ساب دامین بقیه ساب دامین ها و دامین اصلی هم مورد نفوذ قرار میگیره؟؟!
یا من تاحالا درک نکرده بودم این اسیب پذیری رو یا شما حرفتون رو دارید به صورت کلی میزنید(با چشم پوشی از شرایط متعدد)
ممنون میشم توضیح بدین
در ارتباط با اینکه چگونه به Stored XSS رسیدید هم توضیح میدید؟
سینا!
پسر تو خیلییییی خفنییییی
خیلیییییی
عالی بود، مثل همیشه ازت یاد گرفتم??
دمت گرم حرفه ای?