سوءاستفاده از نقص امنیتی Zero-Day در وبسایتهای پرستاشاپ
در این مقاله میخوانید
نقص امنیتی Zero-Day در پرستاشاپ (PrestaShop) اطلاعات پرداخت کاربران را دردسترس هکران قرار میدهد. این آسیبپذیری که بهتازگی کشف شده است، یکی از لاگهای امنیتی بزرگ پرستاشاپ بهحساب میآید که امنیت این پلتفرم را بهخطر انداخته است. اگر از سیستم پرستاشاپ استفاده میکنید، این باگ امنیتی را باید سریعاً رفع و امنیت پلتفرمتان را حفظ کنید.
حمله Zero-Day در پرستاشاپ چگونه صورت میگیرد؟ چگونه باگ امنیتی Zero-Day را رفع کنیم؟ همگی از سؤالاتی هستند که دانستن آنها واجب است و حتی اگر از پرستاشاپ استفاده نمیکنید، باید از این نقص مطلع شوید.
پرستاشاپ چیست و کدام نسخه آن مشکل امنیتی دارد؟
پرستاشاپ یکی از پلتفرمهای فروشگاهساز مانند وردپرس و جوملا بهشمار میآید که به زبان PHP توسعه داده شده است و بهرایگان دراختیار عموم قرار دارد. درحالحاضر، بیش از ۳۰۰هزار فروشگاه آنلاین از پرستاشاپ استفاده میکنند و همگی آنها درمعرض این حمله امنیتی قرار گرفتهاند.
نسخههای 1.6.0.10 پرستاشاپ و جدیدتر تحتتأثیر این آسیبپذیری (CVE-2022-36408) قرار گرفتهاند و اگر صاحب فروشگاهی آنلاین با پرستاشاپ هستید، باید این نقص امنیتی را رفع کنید. نکته دیگر اینکه حمله مذکور ازطریق SQL Injection انجام میگیرد و به مهاجمان اجازه میدهد تا به دادهها دسترسی پیدا کنند. همچنین، اگر از نسخههای جدیدتر استفاده میکنید که برخی ماژولها مانند Wishlist 2.0.0 تا 2.1.0 روی آن نصب است، امکان دارد این خطر شما را نیز تهدید کند.
زمانی که سیستم مدیریت محتوای شما هک میشود باید چه اقداماتی انجام دهید؟ در مقالهی زیر بخوانید.
حمله Zero-Day در پرستاشاپ چگونه رخ میدهد؟
همانطورکه گفتیم، این حمله بهواسطه SQL Injection پرستاشاپ را هدف قرار میدهد. طبق تحقیقات پرستاشاپ، حملهها با ارسال درخواست POST به Endpointهای آسیبپذیر شروع و بهدنبال آن درخواست GET بدون هیچ پارامتری به صفحه اصلی ارسال میشود.
این کار باعث ایجاد فایل پوسته وبی با نام blm[.]php در دایرکتوری Root فروشگاه میشود. مهاجمان از این فایل پوسته وب برای ایجاد صفحه پرداخت جعلی استفاده میکنند. درنهایت، آنان درخواست GET را به فایل ایجادشده ارسال و دستورهای موردنیاز خود را وارد آن میکنند. مهاجمان پس از حمله، اثرهای حمله را از بین میبرند تا صاحبان فروشگاهها متوجه حمله نشوند.
جزئیات دقیقتر این حمله بدینشرح است:
- مهاجم درخواست POST را به Endpointهای آسیبپذیر دربرابر Injection SQL ارسال میکند.
- تقریباً پس از یک ثانیه، مهاجم درخواست GET را بدون هیچ پارامتری به صفحه اصلی ارسال میکند. این مسئله به ایجاد فایل PHP به نام blm.php در دایرکتوری فروشگاه منجر میشود.
- درادامه، مهاجم درخواست GET را به فایل جدید ایجادشده ارسال میکند و blm.php به او اجازه میدهد کدهای دلخواه را اجرا کند.
این حملهها ممکن است روی نسخههای قدیمیتر که از ماژولها و نرمافزارهای قدیمی استفاده میکنند، نیز انجام شود.
چگونه متوجه شویم که پرستاشاپ ما هک شده است یا خیر؟
طبق روش حملههایی که صورت میگیرد، ممکن است رکوردی مشابه زیر روی سرورتان ثبت شود. این نمونهای از انجام حمله یادشده محسوب میشود که یکی از هکرها منتشر کرده است:
– [14/Jul/2022:16:20:56 +0200] “POST /modules/XXX/XXX.php HTTP/1.1” 200 82772 “-” “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.14”
– [14/Jul/2022:16:20:57 +0200] “GET / HTTP/1.1” 200 63011 “-” “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36”
– [14/Jul/2022:16:20:58 +0200] “POST /blm.php HTTP/1.1” 200 82696 “-” “Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0”
توجه کنید که پیدانکردن لاگ مشابه صرفاً بدیندلیل نیست که وبسایت شما هک نشده؛ بلکه ممکن است هکرها از روشهای متفاوتی استفاده کرده باشند.
آسیبپذیری در فروشگاهساز پرستاشاپ
چگونه از حمله Zero-Day در پرستاشاپ جلوگیری کنیم؟
پرستاشاپ نسخه 17.7.8.7 را صرفاً برای رفع این حمله و دفاع دربرابر حملههای Injection منتشر کرد. این نسخه ایمنترین نسخه پرستاشاپ دربرابر حملههای ذکرشده است. درادامه، چند راه برای جلوگیری از حملههای پرستاشاپ ذکر شده است:
۱. جدیدترین نسخه پرستاشاپ را نصب و ماژولها را دائماً بهروز کنید
همانطورکه گفتیم، پرستاشاپ سریعاً نسخهای جدید برای جلوگیری از این حمله منتشر کرد. برای حفظ امنیت کامل سیستم خود، حتماً جدیدترین نسخه پرستاشاپ را نصب و دائماً ماژولهای خود را بهروزرسانی کنید؛ زیرا این حمله کاملاً جدید است و ماژولهای شما سریعاً بهروزرسانی امنیتی خود را منتشر میکنند.
۲. قطعه کد مخرب در پرستاشاپ را حذف کنید
یکی از روشهای احتمالی حمله که پرستاشاپ نیز به آن اشاره کرده، استفاده از ویژگیهای ذخیرهسازی حافظه پنهان MySQL Smarty است. این تابع بهطورپیشفرض غیرفعال است؛ زیرا بهندرت بهکار برده میشود. بااینحال، مهاجمان میتوانند آن را از راه دور فعال و به وبسایت شما حمله کنند. درصورت نیازنداشتن به این ویژگی، حتماً آن را غیرفعال کنید.
برای انجام این کار، مراحل زیر را طی کنید:
- فایل config/smarty.config.inc.php را در بخش installation پرستاشاپ پیدا کنید.
- خطوط 46-43 برای PrestaShop 1.7 یا 43-40 برای PrestaShop 1.6 را که تابع زیر است، حذف کنید:
نمونه کد مخرب در پرستاشاپ
همچنین، میتوانید این کد را جستوجو کنید:
if (Configuration::get('PS_SMARTY_CACHING_TYPE') == 'mysql') { include _PS_CLASS_DIR_.'Smarty/SmartyCacheResourceMysql.php'; $smarty->caching_type = 'mysql'; }
جمعبندی
پرستاشاپ، یکی از سیستمهای فروشگاهساز آنلاین، بهتازگی با حمله بسیاری از هکرها مواجه شده است. حمله Zero-Day که ازطریق SQL Injection انجام میشود، به مهاجمان اجازه میدهد تا فایل جدیدی ایجاد کنند و دستورهای خود را که معمولاً صفحات پرداخت جعلی است، درون آن اجرا و درنهایت به وبسایتتان اضافه کنند.
این نقص امنیتی بهتازگی کشف شده است و پرستاشاپ سریعاً آن را رفع و راهحل را در قالب بهروررسانی منتشر کرده است. اگر از نسخههای قدیمی پرستاشاپ استفاده میکنید، حتماً آن را به جدیدترین نسخه بهروزرسانی و ماژولهایی خود را نیز بهروز کنید تا این مشکل حل شود.
با خواندن مقالهی زیر آخرین نسخه جوملا ، وردپرس و فروشگاه آنلاین پرستاشاپ را خودکار و رایگان نصب کنید!
سؤالات متداول
۱. حمله Zero-Day در پرستاشاپ چیست؟
باگ امنیتی جدید پرستاشاپ حمله Zero-Day را ازطریق SQL Injection امکانپذیر میکند.
۲. آیا پرستاشاپ امن است؟
بستگی دارد. پرستاشاپ پلتفرمی امن است؛ اما احتمال دارد گاهی مشکلات امنیتی پیدا کند که باید رفع شود.
۳. حمله Zero-Day با SQL Injection در پرستاشاپ چگونه انجام میشود؟
- مهاجم درخواست POST را برای انجام حمله Injection SQL ارسال میکند.
- پسازآن، مهاجم درخواست GET را بدون هیچ پارامتری ارسال و فایلی به نام blm.php در دایرکتوری فروشگاه ایجاد میکند.
- مهاجم فایل blm.php را شخصیسازی میکند.
۴. چگونه از حمله Zero-Day در پرستاشاپ جلوگیری کنیم؟
- جدیدترین نسخه پرستاشاپ (نسخه 1.7.8.7 یا جدیدتر) را نصب کنید.
- ماژولهای خود را بهروررسانی کنید.
- MySQL Smarty را غیرفعال کنید.
منبع: