آسیب‌پذیری جدید PHP و امکان هک شدن سایت‌های درحال اجرا بر روی سرورهای Nginx!

آسیب‌پذیری جدید PHP و امکان هک شدن سایت‌های درحال اجرا بر روی سرورهای Nginx!

تاریخ ایجاد

#‫آسیب_پذیری جدید در وب سایت­های مبتنی بر PHP بر روی سرورهای NGINX کشف شده است.

اگر برای بهبود عملکرد و کارایی اینگونه وب­سایت­ها، قابلیت PHP-FPM را فعال کرده‌اید، بدانید که در معرض آسیب‌پذیری جدیدی قرار دارید که در آن مهاجمان غیرمجاز می‌توانند از راه دور سرور وب‌سایت شما را هک کنند.

به این آسیب‌پذیری شناسه "CVE-2019-11043" اختصاص داده شده است و وب‌سایت‌هایی با پیکربندی خاصی از PHP-FPM (که ظاهراً غیرمعمول هم نیست) را تحت تأثیر قرار می‌دهد. قابلیت PHP-FPM پیاده‌سازی دیگری از PHP FastCGI است که پردازش‌هایی پیشرفته و بسیار کارآمد را برای اسکریپت‌های نوشته شده در زبان برنامه‌نویسی PHP ارائه می‌دهد.

علت اصلی این آسیب‌پذیری، مشکل حافظه underflow"env_path_info" در ماژول PHP-FPMc است و ترکیب آن با سایر نقص‌ها می‌تواند مهاجمان را قادر سازد تا از راه دور کد دلخواه خود را بر روی وب‌سرورهای آسیب‌پذیر اجرا کنند.

آسیب‌پذیری مذکور، توسط یک محقق امنیتی در Wallarm به نام Andrew Danau در زمان برگزاری یکی از مسابقات Capture The Flag(CTF) کشف شد و وی با همکاری دو تن از محققان دیگر به نام‌های Omar Ganievو Emil Lernerتوانستند آن را به صورت یک اکسپلویت اجرای کد از راه دور توسعه دهند.

کدام یک از وب‌سایت‌های مبتنی بر PHP در برابر مهاجمان آسیب‌پذیرند؟

اگرچه اکسپلویت کد اثبات مفهومی (PoC) آسیب‌پذیری مورد بحث به صورت عمومی متتشر شده است اما به طور خاص برای هدف قرار دادن سرورهای آسیب‌پذیر در حال اجرای نسخه‌های PHP 7+طراحی شده است، با این وجود، نسخه‌های پیشین PHPنیز تحت تأثیر این آسیب‌پذیری قرار دارند.

به طور خلاصه، یک وب‌سایت آسیب‌پذیر خواهد بود اگر:

وب‌سرور NGINX به صورتی پیکربندی شده باشد که درخواست‌های صفحات PHPرا به پردازنده PHP-FPM ارسال کند.
دستور "fastcgi_split_path_info" در این پیکربندی وجود داشته و شامل یک عبارت معمولی باشد که با نماد '^' شروع می‌شود و با نماد '$' خاتمه می‌یابد.
متغیر PATH_INFO با دستور fastcgi_param تعریف شده است.
دستوری شبیه به "try_files $uri =404"و یا "-f $uri" برای مشخص کردن وجود یا عدم وجود یک فایل، وجد نداشته باشد.
پیکربندی آسیب‌پذیر NGINXو PHP-FPMمی‌تواند به صورت زیر باشد:
 

php

در این مثال، از دستور " fastcgi_split_path_info" برای تقسیم URLصفحات PHPوب به دو بخش استفاده می‌شود، بخش اول یک موتور PHP-FPM برای فهمیدن نام اسکریپت و بخش دوم شامل اطلاعات مسیر آن است.

اکسپلویت اجرای کد از راه دور در PHP FPM چگونه عمل می‌کند؟

به گفته محققان، عبارتی که دستور " fastcgi_split_path_info" را تعریف می‌کند، با استفاده از کاراکتر خط جدید می‌تواند به گونه‌ای دستکاری شود که در نهایت تابع تقسیم کننده URL تمامی اطلاعات مسیر را خالی کند.

در مرحله بعد، از آنجا که یک اشاره‌گر محاسباتی در کد FPM وجود دارد که به اشتباه " env_path_info" را بدون تأیید وجود فایلی بر روی سرور، یک پیشوند مساوی با مسیر اسکریپت php تلقی می‌کند، این مسئله می‌تواند توسط یک مهاجم برای بازنویسی داده‌ها در حافظه با درخواست URLهای خاص ساخته شده از وب‌سایت‌های مورد هدف اکسپلویت شود.

برای مطالعه کامل کلیک نمایید.