افزونه محبوب وردپرس Gravity Forms در آنچه به نظر میرسد یک حمله زنجیره تأمین باشد، به خطر افتاده است. فایلهای نصب دستی این افزونه که از وبسایت رسمی دانلود شدهاند، به یک بکدور (backdoor) آلوده بودند.
Gravity Forms یک افزونه غیررایگان برای ایجاد فرمهای تماس، پرداخت و سایر فرمهای آنلاین است. بر اساس آمار ارائهشده توسط توسعهدهنده، این افزونه روی حدود یک میلیون وبسایت نصب شده است که برخی متعلق به سازمانهای شناختهشدهای مانند Airbnb، Nike، ESPN، Unicef، Google و Yale هستند.
جزئیات آسیبپذیری Gravity Forms
شرکت امنیتی وردپرس PatchStack گزارش داد که درخواستهای مشکوکی از افزونههای دانلودشده از وبسایت Gravity Forms شناسایی شده است. بررسیهای این شرکت تأیید کرد که فایل مخرب gravityforms/common.php، که از وبسایت رسمی دانلود شده بود، یک درخواست POST به دامنه مشکوک gravityapi.org/sites ارسال میکرد.
تحلیل بیشتر نشان داد که این افزونه اطلاعات گستردهای از وبسایت، شامل URL، مسیر ادمین، تم، افزونهها و نسخههای PHP و وردپرس را جمعآوری کرده و به مهاجمان ارسال میکرد. پاسخ سرور شامل بدافزار PHP کدگذاریشده با base64 بود که در فایل wp-includes/bookmark-canonical.php ذخیره میشد.
این بدافزار خود را بهعنوان ابزار مدیریت محتوای وردپرس معرفی میکرد و امکان اجرای کد از راه دور بدون نیاز به احراز هویت را از طریق توابعی مانند handle_posts()، handle_media()، و handle_widgets() فراهم میکرد. PatchStack توضیح داد که این توابع از طریق زنجیرهای از فراخوانیها (construct__> init_content_management > handle_requests > process_request) فعال میشوند و میتوانند توسط کاربران غیرمجاز اجرا شوند. این فرآیند با فراخوانی eval روی ورودی ارائهشده توسط کاربر، به اجرای کد از راه دور روی سرور منجر میشود.
اقدامات اصلاحی
RocketGenius، توسعهدهنده Gravity Forms، از این مشکل مطلع شد و یکی از اعضای تیم تأیید کرد که بدافزار تنها دانلودهای دستی و نصبهای انجامشده از طریق Composer را تحت تأثیر قرار داده است. PatchStack به کاربران توصیه کرد که اگر به تازگی افزونه Gravity Forms را دانلود کردهاند، نسخه تمیزی از آن را مجددا نصب کنند و وبسایتهای خود را برای نشانههای آلودگی اسکن کنند. دامنههای مرتبط با این عملیات در تاریخ ۸ جولای ثبت شدهاند.
RocketGenius در گزارش پس از حادثه اعلام کرد که تنها نسخههای 2.9.11.1 و 2.9.12 از Gravity Forms که بین ۱۰ و ۱۱ جولای برای دانلود دستی در دسترس بودند، آلوده شدهاند. همچنین، نصبهای انجامشده از طریق Composer برای نسخه 2.9.11 در این دو روز شامل نسخههای آلوده بود.
RocketGenius تأکید کرد که سرویس Gravity API، که مجوزها، بهروزرسانیهای خودکار و نصب افزونهها را از داخل افزونه مدیریت میکند، هیچگاه به خطر نیفتاده است و تمام بهروزرسانیهای ارائهشده از طریق این سرویس تحت تأثیر قرار نگرفتهاند. کد مخرب مانع از تلاشهای بهروزرسانی میشد، با یک سرور خارجی ارتباط برقرار میکرد تا پیلودهای مخرب بیشتری دریافت کند، و یک حساب مدیریتی ایجاد میکرد که به مهاجم کنترل کامل وبسایت را میداد.
RocketGenius روشهایی برای مدیران ارائه کرده است تا با بررسی لینکهای خاصی در وبسایتهای خود، احتمال آلودگی را شناسایی کنند.