یک آسیبپذیری با شدت بحرانی در افزونه Better Search Replace برای وردپرس که بیش از 1 میلیون وبسایت نصب فعال دارد، کشف و اصلاح شد. حملات موفقیت آمیز می تواند منجر به حذف دلخواه فایل، بازیابی اطلاعات حساس و اجرای کد شود.
سطح شدت آسیب پذیری
شدت آسیبپذیریها در یک سیستم امتیازی با رتبهبندیهایی که از کم تا بحرانی توصیف میشوند، امتیازدهی میشوند:
- پایین 0.1-3.9
- متوسط 4.0-6.9
- بالا 7.0-8.9
- بحرانی 9.0-10.0
شدت آسیبپذیری کشفشده در افزونه Better Search Replace بهعنوان بحرانی رتبهبندی میشود که بالاترین سطح است، با امتیاز 9.8 در مقیاس شدت 1-10.
جستجوی بهتر جایگزین افزونه وردپرس شود
این افزونه توسط WP Engine توسعه یافته است اما در اصل توسط شرکت توسعه Delicious Brains ساخته شده است که توسط WP Engine خریداری شده است. Better Search Replace یک ابزار وردپرس صنوبر است که فرآیند اجرای یک کار جستجو و جایگزینی در پایگاه داده وب سایت وردپرس را ساده و خودکار می کند، که در کار انتقال سایت یا سرور مفید است. این افزونه در نسخه حرفه ای رایگان و پولی ارائه می شود.
وب سایت افزونه ویژگی های زیر را از نسخه رایگان فهرست می کند:
- “پشتیبانی از سریال سازی برای همه جداول
- امکان انتخاب جداول خاص
- امکان اجرای یک “اجرای خشک” برای مشاهده تعداد فیلدهایی که به روز می شوند
- بدون نیاز به سرور به غیر از نصب در حال اجرا وردپرس
- پشتیبانی از چند سایت وردپرس”
نسخه Pro پولی دارای ویژگیهای اضافی مانند امکان ردیابی تغییرات، امکان پشتیبانگیری و وارد کردن پایگاه داده در حین اجرای افزونه و پشتیبانی گسترده است.
محبوبیت این افزونه به دلیل سهولت استفاده، مفید بودن و سابقه قابل اعتماد بودن افزونه است.
آسیب پذیری PHP Object Injection
یک آسیبپذیری PHP Object Injection، در زمینه وردپرس، زمانی رخ میدهد که ورودی ارائهشده توسط کاربر بهطور ناامن سریالسازی نشده باشد. Unserialization فرآیندی است که در آن بازنمایی رشته ای از اشیاء به اشیاء PHP تبدیل می شود.
پروژه غیرانتفاعی Open Worldwide Application Security Project (OWASP) یک توضیح کلی از آسیب پذیری PHP Object Injection ارائه می دهد:
PHP Object Injection یک آسیبپذیری در سطح برنامهای است که به مهاجم اجازه میدهد تا انواع مختلفی از حملات مخرب مانند تزریق کد، تزریق SQL، پیمایش مسیر و انکار سرویس را بسته به زمینه انجام دهد.
این آسیبپذیری زمانی رخ میدهد که ورودی ارائهشده توسط کاربر قبل از ارسال به تابع PHP ()unserialize بهدرستی پاکسازی نشده باشد. از آنجایی که PHP امکان سریالسازی اشیاء را فراهم میکند، مهاجمان میتوانند رشتههای سریالسازی شده ad-hoc را به یک فراخوانی آسیبپذیر ()unserialize ارسال کنند که در نتیجه یک شی (های) PHP دلخواه به محدوده برنامه تزریق میشود.
برای بهره برداری موفقیت آمیز از آسیب پذیری PHP Object Injection دو شرط باید رعایت شود:
- برنامه باید دارای کلاسی باشد که یک روش جادویی PHP (مانند __wakeup یا __destruct) را پیاده سازی کند که می تواند برای انجام حملات مخرب یا برای راه اندازی یک زنجیره POP استفاده شود.
- تمام کلاسهایی که در طول حمله استفاده میشوند باید هنگام فراخوانی آسیبپذیر unserialize اعلان شوند، در غیر این صورت بارگذاری خودکار شی باید برای چنین کلاسهایی پشتیبانی شود.
اگر یک مهاجم بتواند یک ورودی را آپلود (تزریق) کند تا شیء سریالی مورد نظر خود را شامل شود، به طور بالقوه می تواند کد دلخواه را اجرا کند یا امنیت وب سایت را به خطر بیندازد. همانطور که در بالا ذکر شد، این نوع آسیبپذیری معمولاً به دلیل سالمسازی ناکافی ورودیهای کاربر ایجاد میشود. پاکسازی فرآیندی استاندارد برای بررسی داده های ورودی است به طوری که فقط انواع ورودی های مورد انتظار مجاز هستند و ورودی های ناامن رد و مسدود می شوند.
در مورد افزونه Better Search Replace، این آسیبپذیری در نحوه مدیریت deserialization در طول عملیات جستجو و جایگزینی آشکار شد. یکی از ویژگیهای امنیتی حیاتی که در این سناریو وجود ندارد، یک زنجیره POP بود – مجموعهای از کلاسها و توابع مرتبط که مهاجم میتواند از آنها برای راهاندازی اقدامات مخرب در زمانی که یک شی غیر سریالی است استفاده کند.
در حالی که افزونه Better Search Replace حاوی چنین زنجیره ای نبود، اما این خطر همچنان وجود داشت که اگر افزونه یا موضوع دیگری در همان وب سایت نصب شده باشد، دارای یک زنجیره POP باشد، می تواند به مهاجم اجازه دهد تا حملاتی را انجام دهد.
Wordfence این آسیب پذیری را شرح می دهد:
افزونه Better Search Replace برای وردپرس در برابر PHP Object Injection در همه نسخهها و از جمله 1.4.4 از طریق deserialization ورودی نامعتبر آسیبپذیر است.
این امکان را برای مهاجمان احراز هویت نشده برای تزریق یک شی PHP فراهم می کند.هیچ زنجیره POP در افزونه آسیب پذیر وجود ندارد. اگر یک زنجیره POP از طریق یک پلاگین یا تم اضافی نصب شده در سیستم هدف وجود داشته باشد، می تواند به مهاجم اجازه دهد فایل های دلخواه را حذف کند، داده های حساس را بازیابی کند یا کد را اجرا کند.
در پاسخ به این کشف، WP Engine به سرعت به این موضوع پرداخت. ورودی تغییرات برای به روز رسانی به نسخه 1.4.5 که در 18 ژانویه 2024 منتشر شد، اقدامات انجام شده را برجسته می کند:
“امنیت: غیر سریالی کردن یک شی در حین عملیات جستجو و جایگزینی اکنون “allowed_classes” => false است تا از نمونه سازی شی و اجرای کدهای مخرب بالقوه ذخیره شده در پایگاه داده جلوگیری شود.”
این بهروزرسانی پس از افشای مسئول Wordfence در مورد آسیبپذیری در 18 دسامبر 2023، که توسط WP Engine توسعه و آزمایش رفع آن را دنبال کرد، ارائه شد.
در پاسخ چه باید کرد
از کاربران افزونه Better Search Replace خواسته می شود که فوراً به آخرین نسخه به روز رسانی کنند تا از وب سایت خود در برابر فعالیت های ناخواسته محافظت کنند.