یک آسیبپذیری شناسه CVE-2024-2879 و شدت 9.8 از نوع Unauthenticated SQL Injection در افزونه وردپرس LayerSlider کشف شده است که به مهاجمان اجازه میدهد بدون نیاز به احراز هویت، دستورات SQL را به درخواستها اضافه نمایند که این امر میتواند برای استخراج دادههای پایگاه داده و اطلاعات حساس به کار گرفته شود. پیادهسازی نامناسب عملکرد slider popup markup query در این افزونه منجر به آسیبپذیری SQLi میشود. با بررسی کد منبع افزونه مشاهده میشود که از تابع ls_get_popup_markup() برای پرس و جوی slider markup جهت popup استفاده میشود که مقدار id میتواند توسط پارامتر id تعیین گردد:
اگر پارامتر id یک عدد نباشد بدون تایید اعتبار به تابع find() ارسال میشود که در کلاس LS_Sliders قرار دارد. در اینجا بررسی میشود آیا $args یک عدد یا رشته یا آرایه خاص از نوع integer است:
بر روی تمام مقادیر $args توسط تابع esc_sql() عمل escape انجام میشود به جز مقدار where که بدون استفاده از تابع prepare() وردپرس بر روی آن به query اضافه میگردد:
تابع prepare() پرس و جوی SQL را برای مقادیر مخرب بررسی و تایید اعتبار میکند تا بتوان آن را به طور امن در وردپرس اجرا کرد و این محافظت در برابر حملات SQL injection ایجاد میکند. از آنجایی که به دلیل ساختار پرس و جو امکان Union-Based SQL injection وجود ندارد، باید از روش time-based blind جهت بهرهبرداری از آسیبپذیری استفاده کرد. در اینجا از دستورالعملهای CASE به همراه تابع SLEEP() در زبان SQL میتوان جهت بهرهبرداری از آسیبپذیری استفاده کرد. این روش بهرهبرداری پیچیدهتر است اما در نهایت میتوان آن را با موفقیت اجرا کرد و اطلاعات حساس پایگاه داده را استخراج نمود.
محصولات تحت تاثیر
این آسیبپذیری نسخههای 7.9.11 تا 7.10.0 از افزونه وردپرس LayerSlider را تحت تاثیر قرار میدهد.
توصیههای امنیتی
این آسیبپذیری در نسخه 7.10.1 افزونه برطرف شده است. توصیه میشود در اسرع وقت نسبت به نصب آخرین نسخه اقدام نمایید.
منبع خبر:
https://www.wordfence.com/blog/2024/04/5500-bounty-awarded-for-unauthenticated-sql-injection-vulner…
- 30