سلام دوستان! در این نگاره، به آسیب پذیری Path Traversal using File Upload یا همان File Upload Directory Traversal که در سایت ویرگول وجود داشت، میپردازیم. پیش از آن لازم است معرفی کوتاهی از این آسیبپذیری و علت رخ دادن آن داشته باشیم.
معرفی آسیبپذیری
آسیب پذیری File Upload Directory Traversal به زبان ساده بدین معناست که هکر میتواند فایل دلخواهی را در مسیری جز دایرکتوری مورد نظر برنامهنویسِ وبسایت بارگزاری کند. این آسیبپذیری اگرچه در نگاه اول آسیبپذیریِ کمریسکی به نظر میرسد، اما تحت شرایطی میتواند منجر به بوجود آمدن مشکلات بزرگی نظیر Deface یا حتی RCE در وبسایت نیز بشود. به عنوان مثال فرض کنید شما بتوانید فایلی با نام دلخواه در دایرکتوری دلخواهی قرار دهید. دور از ذهن نیست که با قرار دادن فایلی مانند index.html میتوان وبسایت را Deface کرد یا با بارگزاری یک فایل اجرایی روی وبسرور میتوان امکان اجرای دستورات دلخواه مهاجم روی سرور را فراهم کرد.
علت اصلی بُروز این آسیبپذیری، عدم سنجش یا سنجش ناقص صحت و اعتبار دادههای ورودی کاربر – در این مورد نام فایل – در تابع بارگزاری فایل است. به عبارت سادهتر، ماژولی که فایلی را از کاربر سایت دریافت میکند و آن را روی سرور ذخیره میکند، نباید به اسم فایلِ ارائه شده توسط کاربر اعتماد کند؛ بلکه باید نام آن را به لحاظ عدم وجود کاراکترهای خاصی نظیر «/» و «..» بسنجد. زیرا غالبا مهاجم با قرار دادن این کاراکترها در نام فایل است که میتواند از آسیبپذیری مذکور بهره ببرد.
ویرگول
در سایت ویرگول چنانچه شما فایلی را بارگزاری کنید، این فایل درون دایرکتوری زیر – که عدد 60636 آیدی کاربری شماست – قرار داده میشود:
/home/virgoolir/public_html/uploads/upload/users/60636/posts/
اگر مهاجم بتواند فایل را در مسیر زیر قرار دهد:
/home/virgoolir/public_html/
و همچنین اگر بتواند فایلهایی مانند htaccess را دستکاری کند و به واسطهی آن یک فایل اجرایی روی سرور بارگزاری و استفاده کند، به راحتی قادر به Deface و RCE روی وبسایت خواهد بود. علت این مشکل همانگونه که پیشتر ذکر شد، عدم سنجش درست نام فایل ارائه شده توسط کاربر بود و این سنجش اشتباه این امکان را در اختیار یک کاربر قرار میداد که بتواند فایلی را درون مسیر اختصاصی کاربر دیگری بارگزاری کند.
کجای سایت ویرگول؟
چنانچه هنگام نوشتن یک پست در ویرگول، عکسی در میان متن اضافه کنید؛ یک درخواست POST برای آپلود شما به مسیر زیر به سمت سرور ارسال میشود:
در قسمت Body این درخواست پارامتری با عنوان foldername با مقدار پیشفرض تصادفی وجود دارد:
که اگر مقدار آن را به صورت زیر تغییر دهید، سرور بدون بازگردادن خطا، فایل شما را در دو دایرکتوری بالاتر از دایرکتوری مورد نظر برنامه نویس بارگزاری میکند:
بنابراین مهاجم میتوانست با تغییر دادن نام و مسیر این فایل، حملات ذکر شده در فوق را پیادهسازی کند.
در پایان از علی آجودانیان عزیز و تیمِ دوستداشتنی ویرگول که بلافاصله بعد از گزارش، به سرعت آسیبپذیری را رفع کردند، تشکر میکنم.
عالی
سلام وقت بخیر خسته نباشید …. اگه میشه راجع به oob و حملات کمتر شنیده شده مثل json base هم پست بگذارید تو سایت ….در ضمن سایتتون حرف نداره اگه میشه سریعتر رودمپ مهندسی معکوس رو قرار بدین تو سایت
Well said