یک حمله زنجیره تأمین گسترده در اکوسیستم npm با استفاده از بدافزار دارای قابلیت انتشار خودکار با نام ChainDrop، بیش از 1,300 پکیج نرمافزاری را آلوده کرده است؛ پکیجهایی که در مجموع حدود 2 میلیارد دانلود ماهانه دارند. این حمله زنجیره تأمین که پس از نفوذ به حساب گیتهاب یکی از توسعهدهندگان آغاز شد، پکیجهای محبوبی مانند Keyv، Cacheable، flat-cache و file-entry-cache را تحت تأثیر قرار داده و مسیر انتشار بدافزار در زنجیره توسعه نرمافزار را هموار کرده است. بررسیهای امنیتی نشان میدهد ChainDrop علاوه بر انتشار خودکار میان پکیجهای npm، قابلیت سرقت اطلاعات حساس توسعهدهندگان، اعتبارنامهها، توکنهای دسترسی و دادههای مرتبط با محیطهای ابری و CI/CD را دارد و بار دیگر آسیبپذیری زنجیره تأمین نرمافزار در برابر تهدیدات پیچیده را آشکار کرده است.
نفوذ به حساب گیتهاب و گسترش حمله زنجیره تأمین در npm
این حمله زنجیره تأمین زمانی آغاز شد که مهاجمان با نفوذ به حساب گیتهاب توسعهدهنده پکیج Keyv، کنترل آن را به دست گرفتند و از این دسترسی برای انتشار نسخههای مخرب و گسترش آلودگی در میان پکیجهای npm استفاده کردند. مهاجمان پس از این نفوذ، بهسرعت حمله را به پکیجهای مرتبط با سازمانهای شناختهشدهای مانند Deliveroo، Ornikar، OneReach، Picsart، Qlik و ServiceTitan گسترش دادند.
چندین شرکت فعال در حوزه امنیت اپلیکیشن این رخداد را شناسایی کردند و دریافتند که این حمله با استفاده از یک کرم (Worm) مبتنی بر Shai-Hulud با نام ChainDrop انجام شده است.
بر اساس گزارش شرکت Aikido، این کرم تاکنون دستکم 868 پکیج را در 1381 نسخه مختلف آلوده کرده است. پژوهشگران اعلام کردند مهاجم فایلهای مخرب را مستقیماً به شاخههای اصلی پروژهها تزریق کرده و سپس نسخههای جدیدی از پکیجها را منتشر کرده است.
از آنجا که فرآیند ساخت و انتشار این پکیجها از طریق گردشکارهای (Workflow) معتبر گیتهاب اکشنز (GitHub Actions) انجام شده بود، نسخههای مخرب npm همچنان دارای اطلاعات معتبر منشأ انتشار بودند؛ قابلیتی که باعث شد این پکیجهای آلوده در نگاه اول مانند نسخههای قانونی و قابل اعتماد به نظر برسند و شناسایی آنها پیچیدهتر شود.
ساختار بدافزار ChainDrop و اجرای پیلود سرقت اطلاعات
پکیجهای آلودهشده به ChainDrop شامل دو فایل مخرب اصلی هستند که هرکدام نقش مشخصی در اجرای زنجیره آلودگی و سرقت دادهها دارند:
- فایل mjs بهعنوان دراپر پیلود عمل میکند و وظیفه دریافت و اجرای کامپوننت مخرب بعدی را بر عهده دارد.
- فایل js یک اسکریپت سرقت اطلاعات است که برای جمعآوری دادههای حساس از سیستمهای آلوده طراحی شده است.
در جریان این حمله زنجیره تأمین، مهاجمان با ایجاد تغییر در فایل پیکربندی package.json پکیجهای آلوده، یک اسکریپت پیشنصب (Preinstall Script) را به فرآیند نصب اضافه کردند:
"preinstall": "node setup.mjs"به گفته پژوهشگران Aikido، هر کاربری که نسخه آلوده یکی از این پکیجها را با استفاده از دستور npm install نصب کند، فایل setup.mjs بدون نیاز به اجرای دستی، بهصورت خودکار و پیش از تکمیل فرآیند نصب اجرا میشود.
پس از اجرا، فایل setup.mjs ابتدا محیط اجرای جاوااسکریپت Bun (Bun JavaScript Runtime) را از نسخه رسمی منتشرشده آن در گیتهاب دریافت میکند و سپس از این محیط برای اجرای فایل مخرب Math_Symbol.js استفاده میکند؛ اسکریپتی که قابلیت سرقت اطلاعات حساس را دارد.
نمونه کد زیر نحوه اجرای Math_Symbol.js از طریق فایل اجرایی Bun را نشان میدهد:
execFileSync(, ['/Math_Symbol.js'], {
stdio: 'inherit',
cwd:
})پس از دانلود فایل اجرایی Bun و اجرای اسکریپت سرقت اطلاعات، setup.mjs دایرکتوری موقت ایجادشده برای اجرای این فرآیند را حذف میکند تا آثار فعالیت مخرب روی سیستم باقی نماند و شناسایی آن دشوارتر شود.
قابلیت انتشار خودکار و سرقت اطلاعات حساس
شرکت Aikido اعلام کرده است که بدافزار ChainDrop پس از نفوذ به محیطهای آلوده، اعتبارنامههای توسعهدهندگان و سرویسهای ابری را جمعآوری میکند، آنها را رمزنگاری کرده و سپس به یک مخزن عمومی در گیتهاب با توضیح “Shai-Hulud: Here We Go Again” ارسال میکند.
کد جاوااسکریپت مخرب این بدافزار بهشدت مبهمسازیشده (Obfuscated) است و قابلیت انتشار خودکار دارد؛ به این معنا که میتواند با سوءاستفاده از پکیجهایی که پیشتر آلوده شدهاند، به پکیجهای متعلق به سایر توسعهدهندگان نیز نفوذ کند و دامنه آلودگی را گسترش دهد.
اگرچه بررسیهای پژوهشگران Aikido نشان داد فایل اجرایی Bun، اسکریپت Math_Symbol.js را اجرا میکند، اما تحلیلهای انجامشده مشخص کرد برخی پکیجهای آلوده npm شامل اسکریپت مخرب دیگری با نام math_init.js نیز بودهاند.
این بدافزار پیش از سرقت هر توکن، اعتبار آن را بهصورت بلادرنگ (Real-time) از طریق سرویس زیر در رجیستری npm بررسی میکند
registry.npmjs[.]org/-/whoami
اهداف حمله زنجیره تأمین ChainDrop در محیطهای توسعه
این حمله زنجیره تأمین با هدف سرقت اطلاعات حساس، محیطهای توسعه آلوده و اجراکنندههای CI/CD را هدف قرار میدهد تا اعتبارنامههایی را استخراج کند که میتوانند دسترسی مهاجمان به مخازن کد، پکیجهای npm و سایر منابع نرمافزاری را فراهم کنند.
بدافزار ChainDrop طیف گستردهای از دادههای حساس را از محیطهای توسعه جمعآوری میکند که مهمترین آنها شامل موارد زیر است:
- محیط کامل اجرای پردازهها
- فایلهای پیکربندی لوکال و فایلهای حاوی اطلاعات احراز هویت
- توکنهای دسترسی شخصی گیتهاب (GitHub PAT)، توکنهای گردشکار و سایر توکنهای گیتهاب با پیشوندهای ghp_، gho_ و ghs_
- توکنهای دسترسی npm با پیشوند npm_
- اطلاعات حساس گیتهاب اکشنز، از جمله کدی که برای استخراج مقادیر دارای ویژگی isSecret:true از اجراکنندههای خودمیزبان طراحی شده است.
- اعتبارنامههای AWS، پارامترهای ذخیرهشده در سرویس ذخیره پارامترهای AWS SSM (SSM Parameter Store) با امکان رمزگشایی (WithDecryption:true) و اطلاعات محرمانه ذخیرهشده در بخش مدیریت اطلاعات حساس (Secrets Manager)
- اطلاعات حساس کلاسترهای کوبرنیتز (Kubernetes) از فضاهای نام (Namespace) قابل دسترس
- توکنهای HashiCorp Vault و اطلاعات محرمانه KV (Key-Value)
- اعتبارنامههای پایگاههای داده، کلیدهای خصوصی و اعتبارنامههای سرویسهای Stripe، Slack، Twilio، Azure و GCP
این حجم از دادههای هدف نشان میدهد ChainDrop صرفاً به آلودهسازی پکیجهای npm محدود نیست و با تمرکز بر محیطهای توسعه، به دنبال دستیابی به اعتبارنامههایی است که میتوانند مسیر نفوذ به زیرساختهای نرمافزاری و سرویسهای ابری را برای مهاجمان هموار کنند.
شاخصهای نفوذ و توصیههای امنیتی
بر اساس گزارش شرکت امنیت ابری Wiz، دامنه npm-cache[.]com برای استخراج دادهها مورد استفاده قرار گرفته است و باید بهعنوان یک شاخص نفوذ (IOC) مهم در بررسیهای امنیتی در نظر گرفته شود.
مدیران سیستم در صورت نصب نسخه آلوده یک پکیج باید فرض را بر این بگذارند که ایستگاه کاری توسعهدهنده یا اجراکنندههای CI/CD نیز آلوده شدهاند؛ حتی اگر پکیج مخرب بعداً از سیستم حذف شده باشد.
کارشناسان امنیتی توصیه میکنند در چنین شرایطی، سیستمهایی که احتمال آلودگی آنها وجود دارد، یا از طریق نسخههای پشتیبان سالم بازیابی شوند یا بهصورت کامل بازسازی و راهاندازی مجدد گردند. همچنین تمامی توکنها و اعتبارنامههایی که در محیط آلوده در دسترس بودهاند باید تغییر کنند و لاگهای سیستم برای شناسایی دسترسیهای غیرمجاز، همراه با مخازن کد برای بررسی کامیتها و تغییرات مشکوک، مورد بازبینی قرار گیرند.
از آنجا که این حمله زنجیره تأمین همچنان در حال گسترش است، احتمال افزایش تعداد پکیجهای آلوده و نسخههای مخرب وجود دارد. به همین دلیل، استفاده از فهرست مجاز وابستگیها (Dependency Allowlisting)، بررسی یکپارچگی فایلها و پکیجها (Integrity Checks) و کنترلهای منشأ انتشار برای کاهش ریسک چنین حملاتی اهمیت بالایی دارد.













