سوءاستفاده مهاجمان از بستههای محبوب npm برای انتشار بدافزار از طریق فیشینگ
در جریان یک حمله زنجیره تأمین (Supply Chain Attack) که از طریق فیشینگ هدفمند و سرقت اعتبارنامهها انجام شد، تعدادی از کتابخانههای محبوب JavaScript این هفته مورد نفوذ قرار گرفته و به ناشران بدافزار (malware droppers) تبدیل شدند.
بستهی npm با نام eslint-config-prettier که بهطور هفتگی بیش از ۳۰ میلیون بار دانلود میشود، پس از آنکه نگهدارنده آن قربانی حمله فیشینگ شد، مورد نفوذ قرار گرفت. سایر بستهها شامل eslint-plugin-prettier، synckit، @pkgr/core و napi-postinstall که همگی توسط همین توسعهدهنده نگهداری میشدند نیز هدف قرار گرفتند.
مهاجم یا مهاجمان با استفاده از اعتبارنامههای سرقتشده، نسخههای غیرمجاز و آلودهای از این بستهها را منتشر کردند که حاوی کدهای مخرب برای آلودهسازی سیستمهای ویندوزی بودند.
فریب نگهدارنده، نفوذ به کتابخانهها
در تاریخ ۱۸ جولای، توسعهدهندگان پس از نصب نسخههای ۸٫۱۰٫۱، ۹٫۱٫۱، ۱۰٫۱٫۶ و ۱۰٫۱٫۷ از بستهی eslint-config-prettier متوجه رفتارهای مشکوکی شدند. این نسخهها در مخزن npm منتشر شده بودند، اما هیچ تغییری متناظر با آنها در مخزن GitHub ثبت نشده بود، که بلافاصله موجب جلب توجه و شک جامعه متنباز شد.
کتابخانههایی مانند eslint-config-prettier و eslint-plugin-prettier برای توسعهدهندگان این امکان را فراهم میکنند که با Prettier و ESLint بهصورت هماهنگ کار کرده و قواعد قالببندی کد (code formatting rules) را در کل پروژه بدون تضاد یا linting تکراری، یکپارچه نگه دارند.
توسعهدهندهای به نام Dasa Paddock اولین بار با ایجاد یک issue در مخزن GitHub این پروژه، موضوع را مطرح کرد که با واکنش سریع اعضای جامعه همراه شد.
کمی بعد، نگهدارنده بسته، JounQin، تأیید کرد که قربانی یک حمله فیشینگ شده است. این حمله منجر به افشای توکن npm وی شد و مهاجم توانست نسخههای آلوده را منتشر کند.
JounQin در GitHub نوشت:
«این همان ایمیل فیشینگ بود»، و تصویری از ایمیل جعلی با عنوان “Verify your account” که ظاهری معتبر داشت، منتشر کرد.
این ایمیل فیشینگ بهگونهای spoof شده بود که گویا از آدرس “support@npmjs.com” ارسال شده، اما لینک موجود در آن، کاربر را به دامنه جعلی npnjs[.]com هدایت میکرد.
JounQin در ادامه نوشت:
«من توکن npm را حذف کردهام و بهزودی نسخه جدیدی را منتشر خواهم کرد.»
او در همان رشته افزود:
«از همه سپاسگزارم و بابت سهلانگاریام عذرخواهی میکنم.»
اجرای DLL مخرب از طریق اسکریپت postinstall
در نسخههای مخرب منتشرشده، یک اسکریپت npm postinstall با نام “install.js” پیکربندی شده است تا بلافاصله پس از نصب بسته اجرا شود.
این فایل “install.js” شامل تابعی مشکوک به نام logDiskSpace() است که برخلاف نامش، هیچ ارتباطی با پایش فضای دیسک ندارد. در عوض، این تابع تلاش میکند تا فایل DLL با نام “node-gyp.dll” که درون بسته گنجانده شده، از طریق پردازش سیستمی rundll32 در ویندوز اجرا گردد.
در زمان نگارش این گزارش، فایل DLL مذکور که بهعنوان یک تروجان شناسایی شده، در سرویس VirusTotal امتیاز شناسایی ۱۹ از ۷۲ را دارد؛ به این معنا که هنوز اکثریت موتورهای آنتیویروس موفق به شناسایی آن نشدهاند.
چه اقداماتی باید انجام دهید؟
از نصب نسخههای زیر از بستههای آسیبدیده خودداری کنید:
- eslint-config-prettier: نسخههای ۸٫۱۰٫۱، ۹٫۱٫۱، ۱۰٫۱٫۶ و ۱۰٫۱٫۷
- eslint-plugin-prettier: نسخههای ۴٫۲٫۲ و ۴٫۲٫۳
- synckit: نسخه ۰٫۱۱٫۹
- @pkgr/core: نسخه ۰٫۲٫۸
- napi-postinstall: نسخه ۰٫۳٫۱
فایلهای package-lock.json یا yarn.lock پروژه خود را برای وجود ارجاع به نسخههای فوق بررسی کنید.
در صورتیکه بیلدهایی پس از تاریخ ۱۸ جولای منتشر کردهاید، لاگهای CI و محیطهای اجرایی (runtime) را بهویژه در سیستمهای ویندوزی برای نشانههای احتمالی نفوذ بررسی نمایید.
در نظر داشته باشید که هرگونه secrets (توکنها، کلیدهای API، رمزهای عبور و …) که ممکن است در فرآیند build آسیبدیده افشا شده باشند را تعویض (rotate) کنید.
نگهدارنده بسته، نسخههای آلوده را در مخزن npmjs بهصورت رسمی deprecated کرده است. همچنین یک کاربر GitHub هشدار داده که تمامی بستههای دیگر منتشرشده توسط این توسعهدهنده نیز باید برای احتمال دستکاری یا آلودگی مورد بررسی قرار گیرند.
این نفوذ در ادامهی مجموعهای از حملات مهندسی اجتماعی مشابه رخ داده است که در ماههای اخیر، توسعهدهندگان کتابخانههای محبوب را هدف قرار دادهاند.
در ماه مارس، بیش از ده بستهی پرکاربرد در مخزن npm مورد نفوذ قرار گرفتند و به info-stealer تبدیل شدند. در ماه گذشته نیز، تعداد ۱۷ بسته از Gluestack که مجموعاً بیش از یک میلیون بار در هفته دانلود میشوند، بهمنظور انتشار یک Remote Access Trojan (RAT) مورد سوءاستفاده قرار گرفتند.
تنها یک کلیک اشتباه میتواند میلیونها کاربر را در معرض خطر قرار دهد.