اصلاح چندین آسیب پذیری در PHP + کد POC 8.3.5

d8a7d8b5d984d8a7d8ad da86d986d8afdb8cd986 d8a2d8b3db8cd8a8 d9bed8b0db8cd8b1db8c d8afd8b1 php daa9d8af poc

زمان مطالعه: 3 دقیقه

تیم توسعه ی PHP اعلام کرده که یسری آسیب پذیری رو اصلاح کرده که امکان Command Injection ، دور زدن احرازهویت و DoS رو به مهاجم میده.

PHP پر مصرف ترین زبان برنامه نویسی اسکریپتی هستش که تقریبا 79.2% از وب سایتهای کل جهان ازش استفاده میکنن، که حدود 40 درصدش مرتبط با وردپرس هستش.

با توجه به این استفاده ی گسترده  ، وجود چنین آسیب پذیری هایی ،سطح حمله ی بزرگی رو ممکن میکنه ، بنابراین نیازی نیست که روی اصلاح اون تاکید بشه.

آسیب پذیری CVE-2024-1874 :

بدلیل مدیریت نادرست آرگومانهای خط فرمان در ویندوز، مهاجم با استفاده از پارامتر command$ در proc_open ، امکان command injection رو داره حتی اگه bypass_shell فعال باشه. آسیب پذیری امتیاز 9.4 و شدت بحرانی داره.

proc_open دستورات خارجی رو که از طریق آرگومانهاشون پاس داده میشن رو اجرا میکنه.

آسیب پذیری اینجوریه که وقتی فایلهای bat یا cmd اجرا میشن، CreateProcess بطور ضمنی CMD.EXE رو اجرا میکنه، در نتیجه آرگومانهای خط فرمان در CMD.EXE تجزیه میشه. با این حال در مستندات بیان شده که SHELL اجرا نمیشه.

در حالیکه proc_open تلاش میکنه تا کاراکترهای خاص (Escape) مدیریت کنه، خط فرمان \ رو بعنوان کاراکتر خاص در نظر نمیگیره. مثلا اگه بخواییم calac.exe رو اجرا کنیم، میتونیم از دستور زیر استفاده کنیم :

POC :

یک فایل test.bat ایجاد کنید و محتوای زیر توش بریزید :

یک فایل test.php ایجاد کنید و محتوای زیر توش بریزید :

اگه فایل php رو با PHP آسیب پذیر اجرا کنید، notepad.exe اجرا میشه.

همچنین اگه از محتوای زیر در فایل php استفاده کنید، مشاهده میکنید که فعال بودن bypass_shell تاثیری نداره.

بنابراین آسیب پذیری این امکان رو میده تا آرگومانهایی که در دستورات به فایل bat یا cmd پاس داده میشن از طریق proc_open اجرا بشن.

نسخه های تحت تاثیر :

نسخه های اصلاح شده :

آسیب پذیری CVE-2024-2756 :

بدلیل اصلاح ناقص CVE-2022-31629 ، مهاجمان شبکه یا same-site ، میتونن یک کوکی ناامن استاندارد در مرورگر قربانی تنظیم کنن که برنامه ی PHP ، بعنوان کوکی -HOST__ یا -Secure__ باهاشون رفتار میکنه. امتیاز 6.5 و شدت نسبتا بالا داره. آسیب پذیری در کل امکان session hijacking یا حملات cross-site رو میده.
در حقیقت کوکی هایی که با -Host]__ شروع میشن، بعنوان -Host__ در نظر گرفته میشن.

PoC :

نسخه های تحت تاثیر:

> 8.1.11, < 8.1.28
نسخه ی اصلاح شده :

آسیب پذیری CVE-2024-3096 :

اگه پسورد ذخیره شده با password_hash ، با یک null byte (\x00) شروع بشه، بررسی رشته خالی بعنوان پسورد در password_verify ، مقدار true برمیگردونه. اگه یه کاربری از یک پسورد با null byte استفاده کنه، خیلی بعیده اما امکانپذیره، مهاجم با یک رشته خالی میتونه اکانتش رو تصاحب کنه.

POC:

محتوای زیر داخل فایل pw_bug.php بریزید :

اگه فایل اجرا کنید :

نسخه های تحت تاثیر:

نسخه های اصلاح شده:

آسیب پذیری CVE-2024-2757 :

ورودیهای مخرب به mb_encode_mimeheader  ، منجر به ایجاد حلقه بی پایان میشن که در نتیجه امکان DoS رو میده. برای این آسیب پذیری یک الگوی قابل تشخیص شناسایی نشده اما یک رشته خاص میتونه منجر به این قضیه بشه. امتیاز 7.5 و شدت بالا داره.

با توجه به اینکه تابع mb_encode_mimeheader در خیلی از روالهای پردازش ایمیل ، بخصوص مواردی که وروردیهای کاربر مدیریت میکنن، استفاده میشه، امکان حملات DoS رو فراهم میکنه. مثلا در CakePHP 5 ، از این تابع برای انکد کردن موضوع ایمیل استفاده میشه.

PoC :

در PHP 8.3.3 ، کد زیر اجرا کنید، میتونید آسیب پذیری رو مشاهده کنید :

نسخه ی تحت تاثیر:

< 8.3.5