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

یکی از محققان شرکت Wallarm هنگام حل یک چالش فتح پرچم، باگی را در PHP کشف کرد که می‌تواند در برخی پیکربندی‌های Nginx منجر به اجرای کد شود.

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

یکی از محققان شرکت Wallarm هنگام حل یک چالش فتح پرچم، باگی را در PHP کشف کرد که می‌تواند در برخی پیکربندی‌های Nginx منجر به اجرای کد شود.

چالش‌های فتح پرچم (CTF)، نوعی بازی یا معما برای هکرها است تا توانایی‌های خود را آزمایش کنند و بهبود ببخشند. حل این معماها بیشتر از آنکه حل مشکلات واقعی امنیتی باشد، کاوش در محیطی شبیه‌سازی شده است. با این وجود، گاهی پیش می‌آید که شرکت‌کنندگان مشکلات امنیتی‌ای را کشف می‌کنند که حتی طراح سوال CTF هم از آن اطلاع ندارد. در یکی از رخدادهای این چنینی، اندرو دانائو (Andrew Danau) حین شرکت در مسابقه RealwordCTF باگی را در PHP کشف کرد.

این باگ به مهاجم اجازه می‌دهد تا کد دلخواه خود را روی سرور اجرا کند. این آسیب‌پذیری، که دارای شناسه CVE-2019-11043 است، در صورتی قابل بهره‌برداری است که وب سرور Nginx به همراه PHP-FPM مورد استفاده باشد. PHP-FPM ابزاری است که کمک می‌کند بعضی عملیات زمانبر سمت سرور سریعتر انجام شوند.

برای اینکه آسیب‌پذیری قابل بهره‌برداری باشد، باید در فایل پیکربندی Nginx چنین بلاکی وجود داشته باشد:

در خط دوم، دستور fastcgi_split_path_info، URL وارد شده توسط کاربر (مهاجم) را می‌گیرد و با استفاده از آن متغیرهای PATH_INFO و SCRIPT_FILENAME را مقداردهی می‌کند. اگر یک کاراکتر newline (%0a) در URL وجود داشته باشد، متغیر اول، مقدار تهی می‌گیرد که در ادامه باعث سرریز بافر می‌شود. توضیحات مفصلتر را اینجا بخوانید.

در خط دوم، دستور fastcgi_split_path_info، URL وارد شده توسط کاربر (مهاجم) را می‌گیرد و با استفاده از آن متغیرهای PATH_INFO و SCRIPT_FILENAME را مقداردهی می‌کند. اگر یک کاراکتر newline (%0a) در URL وجود داشته باشد، متغیر اول، مقدار تهی می‌گیرد که در ادامه باعث سرریز بافر می‌شود. توضیحات مفصلتر را اینجا بخوانید.

location ~ [^/].php(/|$) {

fastcgi_split_path_info ^(.+?.php)(/.*)$;
fastcgi_param PATH_INFO       $fastcgi_path_info;
fastcgi_pass   php:9000;

}

 

در خط دوم، دستور fastcgi_split_path_info، URL وارد شده توسط کاربر (مهاجم) را می‌گیرد و با استفاده از آن متغیرهای PATH_INFO و SCRIPT_FILENAME را مقداردهی می‌کند. اگر یک کاراکتر newline (%0a) در URL وجود داشته باشد، متغیر اول، مقدار تهی می‌گیرد که در ادامه باعث سرریز بافر می‌شود. توضیحات مفصلتر را اینجا بخوانید.

این آسیب‌پذیری در نسخه‌های جدید PHP برطرف شده است. کاربران می‌توانند نسخه PHP خود را طبق جدول زیر به‌روزرسانی کنند.

نسخه به‌روز شده

نسخه آسیب‌پذیر

7.1.33

7.1.x

7.2.24

7.2.x

7.3.11

7.3.x

منبع: Wallarm

کلمات کلیدی

تصاویر

 -