در صورتی که “فایروال برنامههای تحت وب”[۱] (WAF) شرکت Cloudflare به طور صحیح پیکربندی نشده باشد، مهاجمان میتوانند با عبور[۲] از آن، از دامنه وسیعی از آسیبپذیریهای برنامهها بهرهبرداری کنند. تیمهای تحقیقات امنیت سایبری (CSRT) و پاسخگویی به وقایع شرکت Swascan با استفاده از تکنیک Padding در طول انجام یک تست نفوذ این آسیبپذیری را کشف کردهاند.
برای بهبود امنیت برنامههای تحت وب محافظت شده توسط Cloudflare WAF و رفع خطر این تکنیک عبور از فایروال، Swascan فعالسازی قوانین را به شکل توصیف شده در بخش “دستورالعمل رفع آسیبپذیری” توصیه نموده است.
در ادامه این مطلب، برخی از جزئیات فنی این تکنیک از جمله “اثبات عملی بودن”[۳] آن بیان خواهد شد.
چگونه میتوان با استفاده از آسیبپذیری از Cloudflare WAF عبور کرد
در این قسمت، نحوه استفاده از درخواستهای multipart/form-data HTTP POST و یک تکنیک معروف و متداول برای عبور از WAFها به نام Padding توصیف خواهد شد.
محققان شرکت Swascan، با بررسی فایروال Cloudflare دریافتند که در صورت استفاده از پیکربندی پیشفرض این فایروال، افزودن تقریبا ۱۲۸ کیلوبایت Padding قبل از هر درخواست multipart/form-data POST منجر به این میشود که WAF آن را به حداکثر اندازه ممکن کوتاه کرده، قسمت اضافه را نادیده گرفته و آن را به برنامه موردنظر ارسال کند.
با توجه به این موضوع، یک مهاجم بالقوه میتواند با بارگذاری Payloadهای مخرب، به بهرهبرداری از آسیبپذیریهای برنامهها بپردازد. این سناریو در زمان انجام یک تست نفوذ واقعی توسط محققان Swascan مورد بهرهبرداری قرار گرفته است.
عملی بودن این تکنیک به این دلیل است که جهت پیشگیری از مصرف بیش از حد CPU توسط موتورهای WAF، اساسا بر روی همه آنها، محدودیت پردازشی قرار داده میشود.
بعد از تماس و اطلاعرسانی صورت گرفته توسط Swascan به شرکت Cloudflare، این شرکت فعال کردن قانون ۱۰۰۰۴۸ را به عنوان راهکاری موقت برای برطرف نمودن این مشکل ارائه کرده است. فعالسازی قانون ۱۰۰۰۴۸ منجر به محافظت در برابر حملات از نوع Padding میشود اما با توجه به اینکه فعالسازی این قانون در محیطهای مشتریان باعث افزایش تعداد موارد False positive خواهد شد، به طور پیشفرض بهکار گرفته نمیشود. با این حال و با توجه به شرایط حاضر، لازم است تا مشتریان WAF خود را بر این اساس تنظیم کنند. علاوه بر ارائه راهکار موقت ذکر شده، شرکت Cloudflare اعلام نموده که در حال کار بر روی یک راهکار بلندمدت و بهتر است.
اثبات عملی بودن عبور از Cloudflare WAF
محققان شرکت Swascan در عمل از این تکنیک برای عبور از Cloudflare WAF استفاده کرده و موفق شدهاند تا چندین آسیبپذیری حیاتی برای دستیابی به امکان “اجرای فرامین به صورت از راه دور”[۴] (RCE) بر روی سیستمهای هدف را مورد بهرهبرداری قرار دهند.
تحلیل درخواستها و پاسخهای HTTP
در این قسمت، با ارائه چندین درخواست و پاسخ HTTP با استفاده از کتابخانه CURL نحوه رفتار Cloudflare WAF، در صورت حفظ پیکربندی پیشفرض آن، نشان داده خواهد شد.
برای شبیهسازی حمله، یک Payload متداول کوچک “Shell معکوس”[۵]، که به طور موفقیتآمیز توسط قانون تزریق دستور[۶] فایروال Cloudflare تشخیص داده شده و مسدود گردیده، ایجاد شده است. همانطور که مشاهده میشود فایروال Cloudflare با خطای HTTP 403 (Forbidden) به Client پاسخ داده و صفحه هشدار Cloudflare نشان داده شده است.
برای نشان دادن چگونگی کارکرد تکنیک عبور موردنظر، علیرغم ناکافی بودن برای عبور از WAF، در ابتدا از تعداد کمی (۱۰۰۰) بایت Padding استفاده میکنیم.
در ادامه، تقریبا از ۱۲۸ کیلوبایت Padding (خط جدید[۷]) برای فعالسازی منطق کوتاهسازی[۸] WAF استفاده شده است.
همانطور که مشاهده میکنید کد پاسخ HTTP برابر با HTTP 200 است. این بدین معنی است که Payload مخرب تزریق دستور، توسط WAF نادیده گرفته شده است.
در نظر داشته باشید که میتوان با جایگزین کردن بایتهای Padding و نوع Payload مورداستفاده، سناریوهایی دیگر برای بهرهبرداری از انواع دیگری از آسیبپذیریها ایجاد کرد.
بارگذاری فایل بدون محدودیت
با هدف اثبات عملی بودن این تکنیک، فرض کنید قصد داشته باشیم تا از آسیبپذیری “بارگذاری فایل بدون محدودیت”[۹] بهرهبرداری کنیم.
برای انجام این کار، یک صفحه PHP ساده (upload.php) با محتوای زیر ایجاد میکنیم:
توجه داشته باشید که با توجه به عدم بررسی پسوند[۱۰] فایل در حال بارگذاری توسط این کد PHP، این کد آسیبپذیر است.
برای بهرهبرداری از این آسیبپذیری، از یک PHP web shell ساده، مانند آنچه در ادامه ارائه شده، استفاده میکنیم:
تلاش میکنیم تا این web shell را با استفاده از upload.php بارگذاری کنیم. همانطور که مشاهده میشود این محتوا به درستی توسط Cloudflare مسدود شده و بارگذاری انجام نخواهد شد.
حال، تلاش میکنیم تا از تکنیک Padding برای عبور از WAF استفاده کنیم. از آنجا که Web shell یک فایل متنی است، از کاراکتر خط جدید (0x0A) استفاده میکنیم:
همانطور که مشاهده میشود، Web shell با موفقیت بارگذاری و احتمالا اجرا شده است.
دستورالعمل رفع آسیبپذیری
برای کمک به برطرف کردن خطر بهکارگیری این نوع تکنیک عبور، Cloudflare توصیههای زیر را ارائه کرده است:
- فعالسازی قانون ۱۰۰۰۴۸،
- استفاده از فیلدهای زیر در یک قانون فایروال دلخواه با توجه به نیاز به بررسی سرآیندها[۱۱] و/یا بدنه[۱۲]:
- request.body.truncated
- request.headers.truncated
- حصول اطمینان از آزمایش این قوانین در حالت LOG، قبل از بهکارگیری آنها در یک حالت فعالتر (BLOCK یا موارد دیگر ) به این دلیل که حالتهای فعالتر، با توجه به ترافیک موردانتظار برنامه، مستعد تولید موارد False positive هستند.
علاوهبراین، برای امنیت در مقابل مواردی مانند این تکنیک، شناسایی و اصلاح آسیبپذیریهای موجود در برنامهها با استفاده از ابزارهای زیر از اهمیت زیادی برخوردار است:
نتیجهگیری
در این مطلب نحوه دور زدن و عبور از Cloudflare WAF با استفاده از درخواستهای multipart/form-data POST، مانند درخواست بارگذاری فایل ارائه شد. علاوهبراین، نحوه برطرف نمودن خطر این تکنیک با فعالسازی قوانین Cloudflare WAF به طور متناسب با نیازها، توضیح داده شد.
در صورت نیاز به کسب اطلاعات بیشتر در مورد جزئیات این تکنیک عبور از فایروال و نحوه مقابله با آن، میتوانید از طریق شماره ۰۲۱۴۲۲۳۸۰۰۰ با کارشناسان شرکت امنپردازان در ارتباط باشید.
[۱] Web Application Firewall
[۲] Bypass
[۳] Proof-of-concept
[۴] Remote Command Execution
[۵] Reverse shell
[۶] Command injection
[۷] Line feeds
[۸] Truncation
[۹] Unrestricted File Upload
[۱۰] Extension
[۱۱] Headers
[۱۲] Body
[۱۳] Vulnerability assessment
[۱۴] Security operation center