آسیب‌پذیری در پلاگین Ninja Forms وردپرس که سایت را در معرض خطر هک قرار می‌دهد

این پلاگین محبوب با بیش از یک میلیون نصب فعال در سایت‌های وردپرسی، حاوی ۴ آسیب‌پذیری بحرانی است که سایت را در معرض خطر حملات جدی قرار می‌دهد، نمونه‌ای از این حملات، در دست گرفتن کنترل کامل سایت توسط هکر و email hijacking می‌باشد.

Ninja Forms یک پلاگین محبوب برای وردپرس است که به طراحان سایت اجازه می‌دهد بدون داشتن مهارت برنامه‌نویسی فرم‌هایی با قابلیت drag-and-drop ایجاد کنند.
این ۴ آسیب‌پذیری برای کاربری با سطح دسترسی پایین (حتی یک کاربر ساده که فقط در سایت ثبت‌نام کرده باشد) امکان انجام فعالیت‌‌های مخربی را فراهم می‌آورد. این فعالیت‌های مخرب می‌توانند شنود ایمیل‌های سایت، در دست گرفتن حساب‌های کاربری ادمین، نصب پلاگین‌‎های دلخواه در سایت مورد هدف و هدایت مالکان سایت به مقصدهای مخرب باشند.
سه مورد از آسیب‌پذیری‌ها برای بهره‌برداری موفقیت‌آمیز، به مهندسی اجتماعی نیاز دارند.


•    آسیب‌پذیری اول: ربودن ایمیل‌های معتبر و در دست گرفتن حساب‌های کاربری با پلاگین SendWP
به گفته‌ی محققان، این نقص به مهاجمان دارای سطح دسترسی اعضا یا بالاتر اجازه می‌دهد تا از SendWP برای دریافت ترافیک ایمیل، شامل پیوندهای بازیابی رمز عبور برای حساب‌های کاربری ادمین سوءاستفاده کنند. SendWP یک سرویس تحویلِ ایمیل و ورود به سیستم است که به منظور ساده‌سازی مدیریت ایمیل‌ها در وردپرس طراحی شده است.
مهاجمان با سطح دسترسی اعضا یا بالاتر به سایت وردپرسیِ آسیب‌پذیر می‌توانند با برقراری یک ارتباط SendWP با حساب کاربری SendWP خویش، تمام ایمیل‌های ارسال شده به سایت وردپرسی را به حساب کاربری SendWP خود که با آن وارد شده‌اند هدایت کنند. به گفته‌ی Wordfence، بهره‌برداری موفق از این آسیب‌‌پذیری می‌تواند منجر به اجرای کد از راه دور و در دست گرفتن کنترل کامل سایت با استفاده از حساب کاربری ادمین شود. مهاجم می‌تواند از حساب کاربری ادمین برای ویرایش قالب/فایل‌های پلاگین یا بارگذاری یک قالب/ پلاگین مخرب استفاده کند. گفته می‌شود این آسیب‌پذیری دارای شدت ۹.۹ از ۱۰ می‌باشد (هنوز شناسه‌ای برای نقص‌ها در نظر گرفته نشده است).
محققان هشدار دادند: "هنگام برقراری ارتباط SendWP توسط مهاجمان، آن‌ها می‌توانند تمام داده‌های ایمیل شده را که از طریق فرم ثبت‌ اطلاعات قابل شناسایی افراد (PII) _که به منظور گزارش‌گیری در سایت در نظر گرفته شده‌اند_ به دست می‌آیند، مانیتور کنند." به علاوه، اگر مهاجم بتواند نام کاربری یک حساب ادمین را به دست آورد، آنگاه قادر خواهد بود رمزعبور را برای آن حساب کاربری بازنشانی کند." به گفته‌ی Wordfence، دستیابی به این مسئله چندان دشوار نیست.
محققان تشریح کردند: "به منظور ارائه‌ی این عملکرد، پلاگین‌، کُنش AJAX مربوط به wp_ajax_ninja_forms_sendwp_remote_install را ثبت می‌کند." این کُنش AJAX به تابع wp_ajax_ninja_forms_sendwp_remote_install_handler متصل است که بررسی می‌کند پلاگین SendWP نصب و فعال شده باشد. اگر پلاگین در حال حاضر نصب نشده باشد، نصب و فعال‌سازی پلاگین را انجام می‌دهد.
به محض اینکه پلاگین با موفقیت نصب شود، تابع، url ثبت‌نام را به همراه client_name، client_secret، register_url  و client_url باز می‌گرداند.  این برای نشان دادن صفحه‌ی ثبت‌نام به کاربران و اتصال آسان نمونه سایت وردپرسی با SendWP می‌باشد.
تجزیه و تحلیل‌ها نشان می‌دهد متأسفانه این کُنش AJAX  قابلیت بررسی پلاگین SendWP و هیچگونه محافظتی بر nonce ندارد، بنابراین، نصب و فعال‌سازی آن این امکان را می‌دهد که کاربران سطح پایین، مانند اعضای عادی سایت بتوانند این پلاگین را نصب و فعال کنند و کلید client_secret را که برای ایجاد ارتباط SendWP مورد نیاز است بازیابی نمایند.
البته محققان خاطرنشان کردند که خوشبختانه پلاگین SendWP یک پلاگین غیررایگان است _ماهیانه ۹ دلار برای هر سایت_ و این را می‌توان یک راه کاهش خطر بالقوه برای نقص مذکور در نظر گرفت.


•    آسیب‌پذیری دوم: افشای کلید اتصال برای پروتکل احراز هویت OAuth
برای این آسیب‌پذیری شدت ۷.۷ از ۱۰ برآورد شده است و در سرویس" Add-on Manager" از پلاگین Ninja Forms وجود دارد. این سرویس یک داشبورد متمرکز است که به کاربران امکان می‌دهد از راه دور تمام افزونه‌های خریداری شده Ninja Forms را مدیریت کنند.
به گفته‌ی Wordfence، مهاجمان می‌توانند با حساب کاربری خود یک ارتباط OAuth برای سایت وردپرسی آسیب‌پذیر برقرار کنند و هرگونه پلاگینِ افزونه‌ایِ خریداری شده را در سایت مورد نظر خود نصب کنند.
به منظور تکمیل این ارتباط مخرب، مهاجمان باید مدیران سایت را برای کلیک بر روی یک لینک خاص فریب دهند تا پارامتر client_id در پایگاه داده سایت با یک action AJAX تغییر یافته آپدیت شود.
طبق این تجزیه و تحلیل، پلاگین نامبرده، کُنش AJAX  مربوط به wp_ajax_nf_oauth را ثبت می‌کند که برای بازیابی connection_url که حاوی اطلاعات مهمی است _مانند client_secret برای برقراری ارتباط OAuth با پورتال Ninja Forms Add-On Management _ مورد استفاده قرار می‌گیرد و متأسفانه قابلیت بررسی این تابع وجود ندارد. و این بدان معناست که کاربران سطح پایین، مانند اعضای عادی سایت، می‌توانند action را فعال کرده و URL مورد نیاز برای برقراری ارتباط با داشبورد را بازیابی کنند. مهاجمان همچین می‌توانند client_id را برای ارتباطِ فعلیِ OAuth بازیابی کنند.


•    آسیب‌پذیری سوم: حمله‌ی CSRF برای قطع ارتباط سرویس OAuth
آسیب‌پذیری سوم نیز در قابلیت مدیریت افزونه‌های Ninja Forms وجود دارد که به راحتی یک ارتباط OAuth را با چند کلیک ساده قطع می‌کند. برای این آسیب‌پذیری شدت متوسط با مقدار ۶.۱ در نظر گرفته شده است.
مهاجمان می‌توانند با ارسال یک درخواست، ارتباط فعلی OAuth را قطع کنند. Wordfence خاطرنشان کرد که: "این می‌تواند یک تجربه‌ی گیج‌کننده برای مالک سایت باشد." برای انجام این کار، مهاجمان باید یک درخواست معتبر بسازند، آن را در خارج از سایت مورد هدف میزبانی کنند و مدیر سایت هدف را مجاب کنند تا بر روی یک لینک یا فایل پیوست کلیک کند.
به گفته‌ی Wordfence، "به منظور ارائه این عملکرد، پلاگین، کُنش AJAX مربوط به wp_ajax_nf_oauth_disconnect را که متصل به تابع ()disconnect می‌باشد ثبت می‌کند. تابع ()disconnect به سادگی یک ارتباط را با حذف موارد مربوط به تنظیمات ارتباط در پایگاه داده، قطع می‌کند."


•    آسیب‌پذیری چهارم: نقص Administrator Open Redirect
آخرین نقص، در فرایند پردازش ارتباط OAuth وجود دارد. شدت این آسیب‌پذیری متوسط و مقدار آن ۴.۸ از ۱۰ می‌باشد.
به منظور بهره‌برداری از این آسیب‌پذیری، مهاجم باید یک URL خاص با پارامتر تغییر مسیر بسازد که برای هدایت به سایت دلخواهی تنظیم شود، سپس با مهندسی اجتماعی ادمین را وادار به کلیک بر روی یک لینک نماید. اگر این فرایند موفقیت‌آمیز باشد، ادمین به یک سایت خارجی مخرب هدایت  می‌شود که می‌تواند سیستم وی را با بدافزار آلوده کند.
تجزیه و تحلیل‌ها نشان می‌دهد، این پلاگین، کُنش AJAX مربوط به wp_ajax_nf_oauth_connect را ثبت می‌کند که متصل به تابع ()connect می‌باشد. این تابع برای هدایت مالک سایت و بازگشت وی به سرویس Ninja Forms وردپرس پس از اتمام فرایند برقراری ارتباط OAuth می‌باشد. این تابع به طور پیش‌فرض برای هدایت مالک سایت و بازگشت به صفحه‌ی admin.php?page=ninja-forms#services از wp_safe_redirect استفاده می‌کند.
اکنون مسئله این است که پارامتر ‘redirect’ می‌تواند با مقادیر مختلفی جایگزین شود تا ادمین سایت را به URL دلخواهی که در این پارامتر آمده است هدایت کند.
محققان تشریح کردند: "هیچ‌گونه محافظتی جهت اعتبارسنجی مقصدی که در URL هدایت مسیر می‌آید وجود ندارد و همچین برای جلوگیری از استفاده از این تابع توسط مهاجمان که ادمین را به مقاصد مخرب هدایت نکنند راهی وجود ندارد." البته پیش از این، تابع ()wp_verify_nonce مورد استفاده قرار می‌گرفت اما پس از ارائه توضیحاتی، منسوخ و غیرقابل استفاده شد.
آسیب‌پذیری‌های مذکور در نسخه‌ی ۳.۴.۳۴.۱ پلاگین Ninja Forms برطرف شده‌اند.


منبع خبر: https://threatpost.com/ninja-forms-wordpress-plugin-hacks/164042