امنیت وب سایتهای وردپرسی و محافظت در برابر بدافزار یا کدهای مخرب در سال 2023 بیش از هر زمان دیگری مهم شده است. چراکه در حال حاضر بر اساس آمارها منتشر شده بیش از 40٪ وب سایتها بر اساس وردپرس طراحی شدهاند. به عبارتی دیگر تا به حال 64 میلیون وب سایت از وردپرس استفاده کردهاند.
از طرفی دیگر بیش از 400 میلیون نفر هر ماه از وب سایت های وردپرس بازدید میکنند. به همین دلیل آسیب پذیری و اقدام به هک سایتهای وردپرسی در سال 2023 بشدت رو به افزایش است.
در 22 مارس 2023، Elementor Pro نسخه 3.11.7 خود را منتشر کرد که آسیبپذیری حیاتی نسخههای قبل را رفع کرده است.
این افزونه در ادغام با افزونه WooCommerce به هر کاربر تأیید شده اجازه میدهد تنظیمات وردپرس را بهروزرسانی نماید. این کار از طریق یک اقدام AJAX از Elementor Pro انجام می شود که مزیت کنترل مناسبی ندارد. در نسخههای 3.11.6 و پایینتر این موضوع امنیت سایت را به خطر میاندازد.
به طوری که این امکان را برای یک کاربر مخرب فراهم میکند که صفحه ثبت نام را (در صورت غیرفعال بودن) فعال کند و نقش پیش فرض کاربر را روی مدیر تنظیم کند تا بتواند یک حساب کاربری ایجاد نماید که فوراً دارای امتیازات سرپرست باشد. پس از این، آنها احتمالاً سایت را به یک دامنه مخرب دیگر هدایت میکنند یا یک افزونه یا درپشتی مخرب را برای سوء استفاده بیشتر از سایت آپلود می کنند.
شواهد آسیبپذیری در افزونه المنتور پرو
این آسیبپذیری در حال حاضر مورد سوء استفاده قرار گرفته و ما شاهد حملاتی از چندین آدرس IP هستیم که بیشتر این حملات از آدرسهای IP زیر هستند:
- 193.169.194.63
- 193.169.195.64
- 194.135.30.6
همچنین شاهد آپلود فایلهایی با نامهای زیر هستیم:
- wp-resortpack.zip
- wp-rate.php
- llll.zip
علاوه بر این شاهد تغییر URL سایت به آدرس زیر نیز هستیم:
away[dot]trackersline[dot]com
آسیبپذیری المنتور پرو چگونه رخ میدهد؟
وقتی Elementor Pro روی سایتی نصب میشود که افزونه WooCommerce روی آن فعال است، مؤلفه elementor-pro/modules/woocommerce/module.php خود را بارگیری میکند، که چند عمل AJAX را ثبت میکند:
/** * Register Ajax Actions. * * Registers ajax action used by the Editor js. * * @since 3.5.0 * * @param Ajax $ajax */ public function register_ajax_actions( Ajax $ajax ) { // `woocommerce_update_page_option` is called in the editor save-show-modal.js. $ajax->register_ajax_action( 'pro_woocommerce_update_page_option', [ $this, 'update_page_option' ] ); $ajax->register_ajax_action( 'pro_woocommerce_mock_notices', [ $this, 'woocommerce_mock_notices' ] ); }
یکی از آنها pro_woocommerce_update_page_option است که توسط ویرایشگر داخلی Elementor استفاده میشود. update_option را فراخوانی میکند، تابعی که میتواند برای تغییر گزینههای وردپرس در پایگاه داده، با دو ورودی ارسالشده توسط کاربر استفاده شود:
/** * Update Page Option. * * Ajax action can be used to update any WooCommerce option. * * @since 3.5.0 * * @param array $data */ public function update_page_option( $data ) { update_option( $data['option_name'], $data['editor_post_id'] ); }
این تابع قرار است به مدیر یا مدیر فروشگاه اجازه دهد برخی از گزینههای خاص WooCommercerce را بهروزرسانی کند، اما ورودی کاربر تأیید نشده است و عملکرد فاقد بررسی قابلیتی برای محدود کردن دسترسی آن به یک کاربر با امتیاز بالا است.
المنتور از کنترلر AJAX خود برای مدیریت بیشتر کنشهای AJAX خود، از جمله pro_woocommerce_update_page_option، با عملکرد جهانی elementor_ajax استفاده میکند.
در اسکریپت elementor/core/common/modules/ajax/module.php نسخه رایگان (که برای اجرای Elementor Pro لازم است) قرار دارد:
/** * Handle ajax request. * * Verify ajax nonce, and run all the registered actions for this request. * * Fired by `wp_ajax_elementor_ajax` action. * * @since 2.0.0 * @access public */ public function handle_ajax_request() { if ( ! $this->verify_request_nonce() ) { $this->add_response_data( false, esc_html__( 'Token Expired.', 'elementor' ) ) ->send_error( Exceptions::UNAUTHORIZED ); }
میتوانیم ببینیم که شامل یک بررسی غیرمنتظره است که میتواند به طور بالقوه مانع از سوء استفاده بازیگران بد از آسیبپذیری شود. اما nonce و تمام کدهای JS مربوط به آن از طریق قلاب admin_enqueue_scripts در elementor/core/common/app.php بارگیری میشوند:
بنابراین در منبع صفحه به همه کاربران وارد شده نشت می کند:
یک مهاجم احراز هویت شده میتواند با فعال کردن ثبت نام (users_can_register) و تنظیم نقش پیشفرض (default_role) روی «administrator»، تغییر آدرس ایمیل سرپرست (admin_email) یا، همانطور که در زیر نشان داده شده است، هدایت کل ترافیک به وب سایت مخرب خارجی با تغییر siteurl در میان بسیاری از احتمالات دیگر:
MariaDB [example]> SELECT * FROM `wp_options` WHERE `option_name`='siteurl'; +-----------+-------------+------------------+----------+ | option_id | option_name | option_value | autoload | +-----------+-------------+------------------+----------+ | 1 | siteurl | <https://evil.com> | yes | +-----------+-------------+------------------+----------+ 1 row in set (0.001 sec)
از آنجا که مؤلفه آسیبپذیر به نصب WooCommerce نیاز دارد، یک کاربر احراز هویت نمیتواند یک حساب مشتری WooCommerce ایجاد کند، وارد شود و از آسیبپذیری نیز سوءاستفاده کند.
مشتریان WooCommerce میتوانند با افزودن wc-ajax=1 به پرسوجو، به عنوان مثال، https، به پشتیبان دسترسی پیدا کنند. ://example.com/wp-admin/?wc-ajax=1).
چگونه مشکل آسیبپذیری افزونه المنتور پرو را رفع کنیم؟
در صورتی که سایت شما جز سایت ها آلوده به این vulnerability است، مطابق مراحل ذیل میتوانید موضوع این چالش را رفع کنید:
مرحله اول: بروزرسانی هسته وردپرس
ابتدا بایستی احتمال وجود کد های مخرب در سایت را به حداقل برسانیم که برای این منظور هسته اصلی وردپرس بایستی جایگذاری گردد.
برای اینکار یک دایرکتوری جدید ایجاد نمایید و دو دایرکتوری wp-include و wp-admin را به آن منتقل نمایید. سپس تمامی فایل های موجود جز فایل .htaccess و wp-config.php را نیز به دایرکتوری ایجاد شده منتقل نمایید.
در نهایت یک وردپرس را از سایت مرجع دانلود و فایل هایی که در پوشه قرنطینه قرار داده اید را جایگذاری نمایید.
توصیه میگردد حتما سایت مرجع و آخرین نسخه وردپرس استفاده نمایید.
مرحله دوم: بررسی فایل htaccess
به جهت اطمینان در این مرحله تمام کد های موجود در فایل .htaccess را حذف و قطعه کد پیش فرض htaccess برای وردپرس را قرار دهید
# BEGIN WordPress RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase / RewriteRule ^index\\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] # END WordPress
مرحله سوم: پاکسازی دیتابیس
باتوجه به موارد بررسی شده، اکثر تغییرات در دیتابیس سایت ها اعمال گردیده است که جهت رفع بایستی مراحل ذیل را پیش بروید:
1-3 یافتن جداول آلوده:
مطابق تصویر پیوست از قسمت جستجو phpMyadmin، آدرس (https://away.trackersline.com/do.js?l=1#‘) جستجو نمایید.
2-3 پاکسازی:
برای رفع این و اصلاح جداول بایستی آدرس های موجود در جداولی که یافت گردید را با دامنه سایت جایگزین نمایید.
قطعه کد زیر کوئری اصلی برای جایگزینی است و بسته به نوع فیلد بایستی تغییر یابد:
UPDATE wp_options SET option_value = REPLACE(option_value ,'[<https://away.trackersline.com/do.js?l=1#>](<https://away.trackersline.com/do.js?l=1#>)','[https://](<https://devedoping.ir/>)domainName.com'); UPDATE wp_options SET option_value = REPLACE(option_value ,'[<https://away.trackersline.com/go.php?v=2#>](<https://away.trackersline.com/do.js?l=1#>)','[https://](<https://devedoping.ir/>)domainName.com');
پس از جایگزینی آدرس دهید ها میتوانید مجدد در کل دیتابیس مانند مرحله 3-1 از پاکسازی کامل اطمینان حاصل نمایید.
مرحله چهارم: حذف Cashe
به جهت تکمیل فرایند پاکسازی، بایستی کش های موجود در دایرکتوری wp-content را حذف نمایید.
- litespeed
- cache
- advanced-cache.php
- wp-rocket-config
مرحله پنجم: بروزرسانی و افزایش امنیت
اصلی ترین مرحله پس از پاکسازی سایت بروزرسانی منشا اصلی آلودگی یعنی افزونه Elementor Pro است که در صورتی سهلانگاری و عدم بروزرسانی آن مجدد سایت آلوده میگردد. بنابراین اگر از نسخه 3.11.6 یا پایینتر المنتور پرو استفاده میکنید، فوراً بروزرسانی کنید
۱- اولین و مهم ترین مسئله عدم نصب پلاگین و یا قالب نال شده است. (یعنی پلاگین و یا قالبی که فروشی است اما در برخی سایت ها رایگان گذاشته می شود)
۲- حتما رمز عبورهای هاست، پیشخوان وردپرس و دیتابیس و اکانت FTP را بصورت دوره ای تغییر دهید و از رمز عبور های قوی استفاده کنید.
۳- بروزرسانی های وردپرس و پلاگین ها را حتما انجام دهید.
۴- پلاگین امنیتی Wordfence نسخه ای که در مخزن وردپرس موجود است را نصب نمایید و سایت را هر چند وقت یکبار بوسیله ی آن اسکن نمایید.
۵- حتما بصورت دوره ای از وبسایت بکاپ گرفته و در سیستم خود نگهداری کنید.آموزش بکاپ گرفتن مربوط به کنترل پنل های مختلف در بلاگ و مرکز آموزش ایران سرور موجود است.
۶- در صورتی که قالب شما بصورت بسته نصبی بوده است حتما بعد از نصب فایل های مربوط به بسته نصبی مانند فایل installer.php را بصورت کامل از هاست حذف نمایید.
۷- حتما بر روی وبسایت خود کپچا فعال کنید. برای اینکار میتوانید از پلاگین Advanced noCaptcha & invisible Captcha استفاده نمایید که در مخزن وردپرس موجود است.