آسیب پذیری SQL Injection در افزونه WooCommerce

دسته بندی: آموزش, امنیت
SQL injection

در ۱۵ جولای ۲۰۲۱ که اخبار مربوط به آسیب‌پذیری injection SQL در ووکامرس منتشر شد، ووکامرس پستی در بلاگ خود در خصوص این موضوع منتشر کرد (لینک مطلب).
این آسیب‌پذیری‌ها در سیزدهم جولای شناسایی شده و در نسخه های ۳.۳.۶ تا ۵.۵.۱ WooCommerce و نسخه های ۲.۵.۱۶ تا ۵.۵.۱ WooCommerce Blocks رفع شده‌اند. در ادامه یک تحلیل کوتاه از این آسیب‌پذیری، نحوه برطرف کردن و PoC آن خواهیم داشت.

منظور از PoC: مستنداتی که درباره آسیب‌پذیری موجود است و ما از آن برای رفع آسیب‌پذیری‌ها استفاده می‌کنیم.

بررسی اصلاحات انجام شده

در پست وبلاگ WooCommerce که در بالا لینک آن را دادیم، می‌توانیم آسیب‌پذیری‌ها را در WooCommerce و افزونه WooCoomerce Blocks مشاهده کنیم.

در اینجا ما ۲ مورد رفع مشکل امنیتی را می‌بینیم که در هر دو، فایل ‘class-wc-webhook-data-store.php’ اصلاح شده است. برای نمایش واضح‌تر روی عکس زیر کلیک کنید 👇

نحوۀ این اصلاحات واقعاً جالب است. آن‌ها برای بررسی بیشتر این موضوع، یک نسخه از source آسیب‌پذیر آن را بر روی یک سایت وردپرسی راه‌اندازی کرده‌اند (البته که این کار برای نمایش PoC نیز مفید خواهد بود).

از source برنامه می‌فهمیم که آسیب ‌پذیری بر روی API است و می توانیم با ‘woocommerce\packages\woocommerce-blocks\src\StoreApi\RoutesController.php، لیست خوبی از مسیرهای API را مشاهده کنیم.

با استفاده از آن می‌توانیم مسیر product-collection-data را ببینیم و داخل این مسیر را مشاهده کنیم:

woocommerce\packages\woocommerce-blocks\src\StoreApi\Routes\ProductCollectionData.php’ which looks promising!

مسیر ما در حال حاضر /wp-json/wc/store/products/collection-data است. از این فایل می‌توانیم به راحتی URL کامل را تهیه کنیم.

حتما بخوانید:  Opencart چیست؟ آیا به درد راه‌اندازی فروشگاه می‌خورد؟

اگر به patch اصلی برگردیم، wc_sanitize_taxonomy_name ما را به تایع زیر می‌رساند:

پس از جستجو و تحقیق در خصوص استفاده از sanitize_title، به این موارد دست پیدا کردیم:

به صورت پیش‌فرض کاراکترهای نماد آوا را به کارکترهای ASCII  تبدیل می‌کند و حروف الفبا را به مقادیر underscore (_) و dash(-) از طریق فیلتر sanitize_title محدودیت ایجاد می‌کند.

و این کد همچنین از urldecode استفاده می‌کند، بنابراین اگر ۳ بار URL را encode کنیم، باید یک PoC کاملاً کارا همراه با URL که قبلاً ایجاد شده است داشته باشیم.

استفاده از باگ

با اطلاعاتی که به‌دست آوردیم، اکنون می‌توانیم از این آسیب‌پذیری‌ها استفاده کنیم!

با تمام داده‌هایی که به دست آورده‌ایم، URL نهایی ما به شکل زیر خواهد بود. این پیلود شامل یک دستور sleep ساده در SQL است که صحت آسیب‌پذیر بودن آن را نشان می‌دهد:

http://127.0.0.1:8080/wordpress/wp-json/wc/store/products/collection-data?calculate_attribute_counts[0][taxonomy]=test%252522%252529%252520or%252520sleep%25252810.1%252529%252523

اجرای این PoC در نسخه آسیب پذیر WooCommerce واقعاً کار می‌کند!

مطالعه بیشتر

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

مثل همیشه، هر سوالی داشتید بپرسید و نظرات‌تان را با ما در میان بگذارید.

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

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

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

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

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

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

فهرست