بررسی مشکل امنیتی در Elementor Pro وردپرس
در این مقاله میخوانید
اگر با وردپرس کار کرده باشید، حتماً میدانید که المنتور یکی از ابزارهای صفحهساز بسیار محبوب برای این سیستم مدیریت محتواست که به شما کمک میکند تا هر آنچه در ظاهر وبسایتتان نیاز دارید، بهراحتی و فقط با Drag & Drop بسازید. بااینحال، همین ابزار محبوب و کارآمد در نسخه Pro خود ضعف امنیتی بزرگی داشت که براساس معیارهای CVSS Ver3.1، عدد ۸.۸ را گرفت و این یعنی مهیابودن شرایط برای حملههای سایبری! اگرچه وردپرس این مشکل امنیتی را حل کرد، هنوزهم کاربرانی هستند که Elementor Pro خود را بهروزرسانی نکردهاند؛ بههمیندلیل، وبسایت آنها همچنان درمعرض تهدید قرار دارد. در این مطلب از آموزش وردپرس بلاگ پارس پک، قصد داریم تا درباره نقص و مشکل امنیتی در Elementor Pro و رفع آن با شما صحبت کنیم؛ پس تا پایان با ما همراه باشید.
مشکل امنیتی در Elementor Pro از کجا شروع شد؟
در همین ابتدا، باید به این نکته توجه کنید که نقص امنیتی یادشده فقط در نسخه Pro المنتور وجود داشت. بنابراین، افرادی که از نسخه رایگان المنتور استفاده میکردند، درمعرض این تهدید نبودند. بااینحال، وقتی Elementor Pro روی وبسایت فروشگاهی نصب میشد که افزونه WooCommerce را نیز فعال کرده بود، کامپوننت elementor-pro/modules/woocommerce/module.php نیز Load میشد. این کامپوننت باعث ایجاد چند عملکرد 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'] ); }
یکی از وظایف این تابع آن است که به مدیر وبسایت یا مدیر فروشگاه اجازه دهد تا برخی از گزینههای خاص WooCommerce را بهروزرسانی کند؛ اما درعینحال مسئله این است که از یک سو ورودیهای کاربر تعریف نشده و از سوی دیگر نیز عملکرد فاقد قابلیتی بهمنظور محدودسازی برای دسترسی بهعنوان کاربری حرفهای است.
المنتور از کنترلر 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 لود شدهاند:
add_action( 'admin_enqueue_scripts', [ $this, 'register_scripts' ] );
نتیجه این میشود که در Source صفحه، به تمامی کاربران واردشده نشت میکند:
بدینترتیب هکر یا نیروی مهاجم که بهدرستی احرازهویت شده است، با فعالکردن ثبتنام (users_can_register) و تنظیم مشخصه default_role روی Administrator، بهسادگی میتواند آدرس ایمیل ادمین وبسایت را عوض کند و هدایت کل وبسایت را برعهده بگیرد:
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)
شاید با خود بگویید که این باگ امنیتی به ووکامرس نیاز دارد. بله، اما کاربر احرازهویتنشده هم میتواند حساب مشتری ووکامرس ایجاد و پس از واردشدن به حساب کاربریاش، از این باگ امنیتی استفاده کند. برای توضیح بیشتر باید بگوییم فردی که حساب مشتری در ووکامرس داشته باشد، با افزودن wc-ajax=1 به کوئری (بهعنوان مثال https://example.com/wp-admin/?wc-ajax=1)، میتواند به قسمت بکاِند دسترسی پیدا کند و همان اتفاق را رقم بزند.
تاریخ کشف باگ امنیتی Elementor Pro و حل آن
همانطورکه گفتیم، باگ امنیتی در افزونه ممکن است هزینه بسیار گزافی برایتان در پی داشته باشد. ۱۸مارس۲۰۲، این باگ امنیتی در المنت پرو کشف و به تیم توسعهدهنده وردپرس اطلاع داده شد. ۲۲مارس۲۰۲۳ نیز، باگ امنیتی مذکور با انتشار نسخه ۳.۱۱.۷ رفع و به قفسه باگهای امنیتی حلشده ارجاع داده شد. بنابراین، اگر هنوز از نسخههای قبلی Element Pro استفاده میکنید، همینحالا آن را به جدیدترین نسخه ارتقا دهید.
هر آنچه باید درباره سیستم مدیریت محتوای وردپرس بدانید را در مقاله زیر بخوانید.
جمعبندی
هکرها از هر روزنهای برای نفوذ و خرابکاری در وبسایت شما استفاده میکنند؛ بههمیندلیل، امنیت سایبری یکی از مفاهیم بسیار مهم در دنیای وب است. ۱۸مارس۲۰۲۳، حفره امنیتی بسیار مهمی در ساختار Elementor Pro وردپرس کشف شد که هکرها با استفاده از آن میتوانستند کنترل کامل وبسایت را در دست بگیرند. اگرچه رفع این مشکل از زمان کشفش فقط چهار روز طول کشید، هنوزهم وبسایتهایی هستند که باگ امنیتی یادشده را در وبسایت خود حل نکردهاند. در این مقاله از بلاگ پارس پک، درباره این مشکل امنیتی و نحوه رفع آن صحبت کردیم.
سؤالات متداول
۱. آیا نسخه رایگان المنتور هم مشکل امنیتی دارد؟
خیر، باگ امنیتی کشفشده فقط در نسخه المنتور پرو وجود دارد.
۲. برای حل مشکل امنیتی المنتور پرو چه باید کرد؟
تنها کاری که باید انجام دهید، این است که المنتور پرو خود را به جدیدترین نسخه ارتقا دهید.
۳. از کجا متوجه شویم که المنتور پرو ما مشکل امنیتی دارد؟
درصورتیکه از نسخه قبل از ۳.۱۱.۷ المنتور پرو استفاده میکنید، وبسایت شما درمعرض این تهدید امنیتی است.