۱۰ مرداد ۱۳۹۷

کشف آسیب‏ پذیری ‏در EHCP

امروزه رایانه جزئی از زندگی بشر شده و خدمات زیادی برای وی به ارمغان داشته است. اکنون تصور زندگی روزمره بدون آن دشوار گردیده است و بسیاری از فعالیت‏ ها مهم در این بستر انجام می‏ پذیرند. همین امر این فضا را تبدیل به یک محیط مناسب برای استفاده سوء توسط مجرمان و کلاه‏برداران اینترنتی نموده است. بنابراین امنیت این فضا دارای اهمیت حیاتی است.

مجرمان فضای مجازی با استفاده از آسیب‏ پذیری‏های موجود در سیستم سعی در نقض امنیت آن دارند. به ‏طور کلی این آسیب‏ پذیری‏ها دارای انواع متنوعی هستند. یکی از این انواع، آسیب‏ پذیری تزریق است. آسیب‏ پذیری‏های تزریق در رتبه‏ بندی OWASP در سال  ۲۰۱۷ همانند سال‏های قبل (۲۰۱۰ و ۲۰۱۳) دارای رتبه نخست هستند. این دسته شامل چندین نوع آسیب‏ پذیری است که یکی از معروف‏ ترین آن‏ها، آسیب‏ پذیری SQL Injection یا تزریق دستورات SQL است. در این حمله که دارای انواع مختلفی (union based، error based، boolean based و time based) است، هدف اجرای کد SQL مخرب جهت دستیابی به اطلاعات پایگاه‏ داده، حذف اطلاعات مهم آن و یا انجام یک عملیات غیر مجاز (مانند ورود غیرمجاز) می‏باشد.

همچنین آسیب‏ پذیری‏ مهم دیگری با نام XSS وجود دارد که در رتبه هفتم این رتبه‏ بندی قرار گرفته است. با استفاده از این آسیب‏ پذیری امکان اجرای کدهای HTML و جاوا اسکریپت به‏ صورت غیر مجاز وجود دارد. حملاتی که از این آسیب‏ پذیری استفاده می‏کنند، شامل سه دسته Reflected، Stored و DOM هستند. این حملات برخلاف سایر انواع به‏ جای هدف قرار دادن سرویس‏ دهنده، مشتری را هدف گرفته ‏اند. در این حملات کد مخربی، (معمولاً جاوا اسکریپت) در نشانی یک سایت تعبیه می‏شود و با تکنیک‏ های مهندسی اجتماعی در اختیار قربانی قرار داده می‏ شود. حال در صورتی که قربانی، نشانی را در مرورگر خود وارد نماید، یک اقدام مخرب (مانند سرقت کوکی) روی سیستم او انجام خواهد گرفت.

‏EHCP یا Easy Hosting Control Panel یک پنل کنترل منبع‏ باز است. این پنل با زبان PHP نوشته شده و از سرویس ‏دهنده وب Nginx استفاده می‏کند. اخیراً یک آسیب‏ پذیری SQL Injection و دو آسیب‏ پذیری XSS روی نسخه‏ های قبل از نسخه ۰٫۳۸٫۵٫b این پنل پیدا شده است. آسیب‏ پذیری SQL Injection و یکی از آسیب ‏پذیری‏های XSS ناشی از آسیب ‏پذیری موجود در XFF است. XFF یا X-Forwarding-For یک فیلد سرآیند HTTP است که حاوی نشانی IP مبدأ در ارتباطات مشتری / سرویس‏ دهنده است. مقدار دریافتی این فیلد به‏ راحتی قابل تغییر است و می‏ توان از آن برای حمله استفاده نمود. بنابراین در صورتی‏که پس از دریافت مقدار بررسی نشود، می‏تواند موجب حملاتی مانند SQL Injection یا XSS شود. برای جلوگیری از این حملات باید مقدار دریافتی فیلتر شود که این کار باید در برنامه انجام شود.

آسیب ‏پذیری SQL Injection ناشی از مکانیزم تشخیص و جلوگیری از حملات نیروی بی‏رحم (Brute Force) به‏کار رفته در صفحه ورود کاربر است. در این مکانیزم نشانی IP متقاضی ورود بررسی می‏ شود و در صورتی که از این نشانی بیش از ۵ درخواست ناموفق برای ورود ارسال شده بود از ورود او جلوگیری می‏ شود. برای این منظور از سیستم ثبت (LOG) استفاده می‏شود. در پایگاه ‏داده جدولی با نام جدول ثبت برای نگهداری نشانی IP و نام‏کاربری درخواست شده ایجاد شده است. اگر تلاش کاربری برای ورود ناموفق بود، نام‏کاربری و نشانی IP او در جدول ثبت می‏ شود. برای تشخیص تعداد درخواست‏های ناموفق یک رایانه برای یک نام‏ کاربری تعداد سطرهایی از  این جدول که حاوی نام‏ کاربری و نشانی IP وارد شده هستند، شمارش می‏شود. در روش مذکور نشانی IP کاربر به‏ صورت مستقیم و بدون انجام هیچ آزمونی از فیلد XFF  خوانده شده و در پایگاه‏ داده ذخیره می‏شود. همان‏گونه که گفته شد، امکان حمله SQL Injection از طریق فیلد XFF وجود دارد. بنابراین به‏ سادگی و با کمک تزریق یک دستور SQL به نشانی می‏توان این حمله را انجام داد. این حمله به ‏سادگی با استفاده از نرم ‏افزارهای موجود مانند sqlmap امکان‏ پذیر است.

در روند مذکور می ‏توان به‏ جای استفاده از یک دستور SQL از یک تگ HTML یا یک دستور جاوا اسکریپت استفاده شود. یکی از آسیب‏ پذیری‏های SQL همین موضوع است. این عملیات می‏ تواند به‏ صورت حمله مردی در میان (Man in the Middle) و بدون نیاز به مهندسی اجتماعی انجام شود. برای این منظور کافی است نفوذگر مقدار فیلد XFF در سرآیند درخواست کاربر را، تغییر دهد. حمله XSS دیگر روی متغیر op قابل انجام است. این متغیر برای مشخص کردن عملیات مورد نظر استفاده می‏شود. با توجه به مقدار این متغیر عملیات موردنظر شناسایی و اجرا می‏شوند. درصورتی‏که مقدار این متغیر یکی از مقادیر مورد نظر نباشد، مقدار این متغیر به همراه یک رشته حاوی خطا نمایش داده می شود. از آن‏جا که فیلتری برای متغیر به‏ کار نرفته و این متغیر از نوع GET بوده و به‏ راحتی امکان مقداردهی در نشانی مرورگر را دارد، امکان سوء استفاده برای حملات XSS را دارد. در شکل۱ وجود این آسیب‏ پذیری نشان داده شده است.

شکل1. آسیب‏پذیری XSS روی پنل EHCP

شکل۱٫ آسیب‏پذیری XSS روی پنل EHCP

 

بهترین راه جهت مقابله با این آسیب‏ پذیری، به‏روزرسانی EHCP به آخرین نسخه آن است. این به‏ روزرسانی از طریق نشانی “http://www.ehcp.net/?q=node/1861” قابل دریافت است.

 

مراجع

[۱] “Easy Hosting Control Panel: SQL Injection & Multiple XSS Vulnerabilities” https://www.fortinet.com/blog/threat-research/easy-hosting-control-panel-sql-injection-and-multiple-xss-vulnerabilities.html, July 2018.
[۲] “X-Forwarded-For”, https://en.wikipedia.org/wiki/X-Forwarded-For.
[۳] “Top 10-2017 Top 10”, https://www.owasp.org/index.php/Top_10-2017_Top_10.