همه فکر میکنن حفرهی امنیتی بیشتر مال فیلمهاس یا کدبیسهای خیلی بزرگ مثل تلگرام و فیسبوک، ولی داستان اینجاس که روی یه فایل آپلود ۱۰ خطی ممکنه یه حفره به وجود بیاد، البته شاید هم دو تا =).
داستان از آپلود کردن فایلهای نامتعارف بجای عکس پروفایل شروع میشه، توی داستان ما دوستی طبق رسوم باگی رو هانت کردن و برای گزارشش باید bounty به شخص باگهانتر تقدیم بشه، بسیار هم عالی. گفته شد حتی اگر access رایت گرفته شده باشه خیلی ارزشمنده،شرایط قبول شد و خیلی ساده بود. باگ ارسال شد، حفرهی آپلود فایل غیر از عکس یا به عبارتی آپلود کد مخرب بود، که شما میتونی mimetype فایل رو عوض کنی و اسکریپتی رو آپلود کنی روی سرور.
از اونجایی که استک سرور php نبود، مطابق باتهای attacker ران کردن php روی سرور خورد توی دیوار، از طرف دیگه اسکریپت htmlی که باگهانتر داستان ما آپلود کرده بودن JS بود و این زبون توی مرورگر قدرت داره نه سرور، توی سرور هم برای استفاده ازش باید از shell دستور اجرای Node فراخوانی بشه.
میرسیم به داستان آپلود کردن شل اسکریپت که حقیقتا ترسناکه، ولی خوب از اونجایی که میکروسرویس بود و سرویس آپلود و بقیه کانتیترهای جدا بودن دسترسی root و پراسس هایپروایزر و نمیگرفت و پایین نمیرفت، ولی هنوز sh آپلود کردن داستانه =))
البته خیلی داستان جالب میشد که بتونن رو استک React/Nodeی که ما داشتیم سطح دسترسی بگیرن، ولی خوب چندبار که گفتم میتونین با فایل آپلود سطح دسترسی بگیرید یا نه با حرفایی آلوده به شوآف و XSS گویان صحنه رو ترک کردن و یکم چیز بار ما هم کردن :)))) نمیدونم چرا به دوستمون برخورد یا چیز دیگه ولی حس میکنم خاطرهی خوبی از کار کردن با مجموعهها قبلی نداشتن و کاملا تدافعی با ما برخورد کردن ( بگذریم که ریئکت در مقابل XSS مقاومه )
ماحصل داستان ما بهبود Regexp فایل فیلتر بود، طبق عرف هم از باگهانتر عزیز چند مرتبه درخواست شد Bounty پیشنهادیش رو بگه برای پیشکش کردن در مقابل این قبیل حرکتهای ارزشمند، ولی خوب نمیدونم چرا آخر داستان دوستمون ناراحت شدن و رفتن [ منو "جوان جویاینام" نامید و بلاک کرد =) ]، وجود اخلاق حرفهای و سافتاسکیل در این کار از شروط ادامهی راهه، مخصوصا اینکه شما داری یه باگ و گزارش میدی حلوا خیرات نمیکنی :))))
در نهایت در هر استکی که هستید مخصوصا php دوستان حتما روی فایل فیلترهاتون strict کار کنید اجازه ندید mimetype خارج از کنترل شما آپلود شه، یعنی بهتره صراحتا mimetype های ساپورت شده رو توی بلاک ifتون بذاری، نه mimetypeهای ساپورت نشده.
و اینکه کیلویی یه directory رو پابلیک نکنید توی وبسرور که قابلیت Directory Traversal پیش نیاد :)))
در نهایت اگر باگهانتر عزیز این متن و مطالعه میکنه میتونن با ارسال اطلاعات بانکی و پستی خودشون به ایمیل SaeedSheikhi@outlook.com بانتی خودشون رو دریافت کنن :)))) هر چند ناقابل و کوچیک