کشف باگ تزریق SQL در bbPress

دسته بندی: آموزش وردپرس به زبان ساده, امنیت
کشف-باگ-تزریق-SQL-در-bbPress.jpg

bbPress یک پلاگین سبک و کارا برای ایجاد انجمن می باشد. از طریق این افزونه می توانید با چند کلیک انجمن و زیر مجموعه های آن را ایجاد کنید، بتازگی نوعی آسیب پذیری از مدل  تزریق SQL در  bbPress کشف شده است که براساس آن  اگر شرایط مناسبی رخ دهد، هر بازدید کننده ای که از وب سایت قربانی دیدن کند با استفاده از این نقطه ضعف می تواند از  آن سوء استفاده کند.

توصیه می کنیم اگر شما نیز از این افزونه در سایت خود استفاده نمائید حتما این مقاله را مطالعه و جهت رفع این باگ امنیتی هر چه سریعتر این افزونه را بروزرسانی کنید.

از آنجاییکه هم اکنون جزئیات این باگ در گزارش Hackerone منتشر شده است و  ورد پرس هم در آپدیت اخیر خود این  مشکل را به طور ریشه ای حل  کرده است، ما تصمیم گرفتیم این اشکال را افشاء کرده و جزئیات را به صورت عمومی منتشر کنیم.

 

تایم لاین  افشای این آسیب پذیری بدین شکل است:

  • بیستم مارس – گزارش اولیه به تیم bbPress  ارسال شد.
  • بیستم مارس – اولین پاسخ از طرف bbPress مبنی بر اینکه  بسته آپدیت ظرف 40 ساعت آینده منتشر خواهد شد.
  • پنجم آپریل – Sucuri اولین تقاضای آپدیت خود را ارسال کرد.
  • هجدهم آپریل – بسته آپدیت برای نسخه های 2.5 و در آینده 2.6 برنامه ریزی شد.
  • بیست و پنجم آپریل – Sucuri یک زمان تخمینی برای انتشار این آپدیت ها از bbPress خواست.
  • نهم ژوئن – Sucuri دومین درخواست خود را برای آپدیت ها ارسال کرد.
  • نهم زوئن – دو بسته آپدیت روی  Trac سرور ، bbPress در دسترس گذاشته شد( برای نسخه های 2.5 و 2.6)، نه در سایت رسمی WordPress.org .
  • یازدهم جولای – Sucuri اعلام کرد به زودی وجود این مشکل را  به طور عمومی منتشر خواهد کرد اما بسته آپدیت هنوز در سایت رسمی ورد پرس وجود نداشت.
  • بیستم جولای – Sucuri متوجه شد که این آپدیت مشکل را برطرف نمی کند، بنابراین برنامه اطلاع رسانی عمومی خود را متوقف کرد. ما بسته ای برای کمک ارائه دادیم.
  • بیست و یکم جولای – bbPress مشکل را اذعان کرد و گفت در اسرع وقت اطلاعات بیشتری در این مورد ارائه می دهد.
  • سی و یکم اکتبر – وردپرس 4.8.3 منتشر شد و این نقطه ضعف پوشش داده شد.
  • سیزدهم نوامبر – همین باگ bbPress در  گزارش Hackerone افشا شد.

آیا سایت شما در خطر است؟

از این باگ زمانی استفاده می شود که گزینه ارسال پیام ناشناس در سایت وردپرسی bbPress فعال باشد، و این چیزی است که مهاجم به راحتی می تواند متوجه شود.

 

اگر مطمئن نیستید که این گزینه را فعال کردید یا نه ، به صفحه تنظیمات افزونه مراجعه کنید.

 

هنگامی که این گزینه فعال باشد، باگ امنیتی می تواند توسط هکر ها از طریق ایجاد یک پست جدید یا پاسخ به پست های قبلی به عنوان یک کاربر ناشناس مورد سوء استفاده قرار گیرد. به دلیل شیوه ای که حملات تزریق SQL بر مبنای آن کار می کنند، راه های بسیاری وجود دارد که مهاجمان می تواند ایجاد مشکل کنند. مثال های آن  عبارتند از هک رمز عبور و سایر کلیدهای رمزنگاری.

 

جزئیات فنی

 

بردار حمله ای که در اینجا استفاده شده همان چیزیست که در پست قبلی خود توضیح دادیم که چگونه یک تزریق SQL را در Gallery Nextgen پیدا کردیم که به علت استفاده نادرست از کلاس انتزاعی پایگاه داده وردپرس (wp-db) ایجاد شده بود.

 

خلاصه اینکه، ممکن است ورودی کاربر  با استفاده از متد آماده سازی $ wpdb درون یک کد از قبل آماده شده ، درج شود. از آنجا که این روش از تگهای قالب بندی sprintf سوء استفاده می کند و پردازش اضافی روی آن انجام می دهد، حتی ورودی هایی که در برابر تزریق SQL ایمن  شده اند  نیز می توانند برای قرار دادن عبارات دلخواه SQL استفاده شوند.

مشکل در تابع bbp_check_for_duplicate واقع در bbpress / includes / common / functions.php جای گرفته است.

 

همانطور که در قطعه کد بالا مشاهده می کنید، تابع get_meta_sql طراحی شده است برای اینکه بخشی از عبارت WHERE را ایجاد کند که به کوئریSQL  ای که بعدا در کد آماده می شود متصل می شود، این کار با استفاده از برخی پارامترهایی که ما کنترل می کنیم، مثل آرایه $ r [ ‘anonymous_data’] انجام می شود. البته، خروجی تولید شده شامل ورودی ما است، که برای جلوگیری از حملات سنتی تزریق SQL، آماده شده است.

حالا بیایید عمیق تر به این قطعه کد آخر نگاهی بیاندازیم. این قطعه کد یک عبارت where ایجاد می کند و مستقیما آن را به اولین کوئری $wpdb->prepare()  اضافه می کند. این کار عملا مفید نیست. چون حتی اگر دستور SQL در برابر حملات سنتی تزریق مقاوم شود، هیچ کاری برای جلوگیری از مهاجمین در مقابل درج کردن مشخص کننده های فرمت SPrintf نمی تواند انجام دهد، ممکن است شما دوباره آن ها را فراخوانی کنید، و به ما اجازه دهید دستور SQL دلخواه خود را به query اضافه کنیم.

با توجه به این جزئیات، به راحتی می توانید ببینید ورودی کاربر از کجا می آید: آنها از فرم پاسخ افرادی که عضو سایت نیستند (ناشناس) / یا فرم های ارسال پست جدید نشات می گیرند.

 

در نتیجه، ارسال چنین ظرفیتی باعث اجرای کوئری زیر سمت سرور می شود:

 

 SELECT ID FROM wp_posts  INNER JOIN wp_postmeta ON (
 wp_posts.ID = wp_postmeta.post_id ) WHERE post_type = 'reply' AND
 post_status != 'trash' AND post_author = 0 AND post_content = 'or 1=1))
 #'  AND (
 ( wp_postmeta.meta_key = '_bbp_anonymous_email' AND wp_postmeta.meta_value = 'or 1=1)) #'or 1=1)) #'@test.com' )
 ) AND post_parent = 11 LIMIT 1

بنابرین  چنین پیکربندی می تواند به عنوان یک تزریق کلاسیک SQL مورد سوء استفاده قرار بگیرد.

جهت مصون ماندن از این باگ حتما در اسرع وقت پلاگین را آپدیت کنید

اگر از این پلاگین با پیکربندی فوق استفاده می کنید و سایت شما به طور خودکار به 4.8.3 بروز نمی شود، آن را در اسرع وقت آپدیت کنید.

 

برگرفته از [sucuri.net]

 

برچسب ها:
امتیاز شما

مایلید هر دو هفته یک ایمیل مفید دریافت کنید؟

ما را در شبکه‌های اجتماعی دنبال کنید

همچنین شاید دوست داشته باشید!

نظرات کاربران

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.

این فیلد را پر کنید
این فیلد را پر کنید
لطفاً یک نشانی ایمیل معتبر بنویسید.
شما برای ادامه باید با شرایط موافقت کنید

فهرست