یک آسیبپذیری بحرانی از نوع PHP Object Injection در افزونه وردپرس GiveWP کشف شده است که در نهایت منجر به اجرای کد از راه دور بدون نیاز به تصدیق هویت میشود. شناسه CVE-2024-5932 به این آسیبپذیری اختصاص یافته و دارای امتیاز 10 و سطح بحرانی میباشد. بیش از 100 هزار وبسایت از این افزونه استفاده میکنند. افزونه GiveWP برای جمعآوری کمکهای مالی مورد استفاده قرار میگیرد و برخی از سرویسهای پرداختیار ایرانی نیز دارای ماژول برای این افزونه میباشند.
زبان PHP جهت ذخیرهسازی دادههای پیچیده از serialization استفاده میکند. دادههای Serialized شده برای ذخیرهسازی در حجم بالا مناسب هستند و وردپرس از آن برای بسیاری از تنظیمات خود استفاده میکند. اما این میتواند یک مشکل امنیتی باشد، زیرا میتوان برای ذخیره object های PHP از آن استفاده کرد.
اگر یک افزونه دادههای ارسال شده توسط کاربر را بدون تایید اعتبار unserialize کند، آنگاه یک مهاجم میتواند اقدام به تزریق یک پیلود نماید که موقع unserialize شدن تبدیل به یک PHP object شود. در حالی که یک PHP object ساده خطرناک نیست، اما موقعی که کلاس دارای magic method باشد این وضعیت متفاوت خواهد بود.
افزونه GiveWP دارای ویژگیهای متعددی از جمله فرمهای کمک مالی شخصیسازی شده، و یکپارچهسازی با درگاهها و سرویسهای شخص ثالث و ... است. با بررسی کد منبع این افزونه مشاهده میشود که تابع give_process_donation_form() برای رسیدگی و پردازش کمکهای مالی مورد استفاده قرار میگیرد. در داخل این تابع از توابع دیگری جهت تایید اعتبار دادهها استفاده میشود، اما متاسفانه در نسخه آسیبپذیر بر روی پارامتر POST به نام give_title تایید اعتبار کافی انجام نمیشود که این در نهایت باعث بهرهبرداری از آسیبپذیری خواهد شد و میتوان یک وبشل را بر روی سرور آپلود کرد.
محصولات تحت تاثیر
نسخه 3.14.1 و تمام نسخههای پایینتر افزونه GiveWP تحت تاثیر این آسیبپذیری قرار دارند.
توصیههای امنیتی
این آسیبپذیری در نسخه 3.14.2 برطرف شده است. لذا توصیه میشود در اسرع وقت نسبت به نصب این نسخه یا نسخههای بالاتر اقدام نمایید.
منبع خبر:
https://www.wordfence.com/blog/2024/08/4998-bounty-awarded-and-100000-wordpress-sites-protected-aga…
- 39