کرم «چیندراپ» چگونه بستههای معتبر npm را برای سرقت اطلاعات توسعهدهندگان به سلاح تبدیل کرد
یک بدافزار خودانتشارشونده بیش از ۴۰۰ بسته پرکاربرد جاوااسکریپت را آلوده کرد و با سوءاستفاده از امضاهای رمزنگاری معتبر، بررسیهای امنیتی خودکار را دور زد.
به قلم دلناز نورانی
این خبر را به اشتراک بگذارید
- فروشندگان ابزارهای امنیتی
- استدلال میکنند که دفاع در زمان اجرا و ایزولهسازی سختگیرانه CI/CD ضروری است، زیرا تحلیل ایستا و بررسیهای گواهیدهی قابل دور زدن هستند.
- نگهدارندگان متنباز
- بر بار غیرقابل تحمل تحمیل شده بر داوطلبان بدون دستمزد برای ایمنسازی زیرساختهای حیاتی در برابر حملات بسیار پیچیده تأکید میکنند.
- تیمهای امنیتی سازمانی
- بر نیاز به محیطهای با اعتماد صفر (Zero-Trust)، چرخاندن تهاجمی اعتبارنامهها و محدود کردن شعاع انفجار ایستگاههای کاری توسعهدهنده به خطر افتاده تمرکز میکنند.
روند رویداد
۴ اوت ۲۰۲۶ (صبح زود)
مهاجمان حساب GitHub نگهدارنده اصلی اکوسیستم بسته keyv را به خطر میاندازند.
۴ اوت ۲۰۲۶ (۵:۳۹ صبح به وقت شرقی آمریکا)
ابزارهای نظارت امنیتی اولین موج بستههای مخرب را که در مخزن npm منتشر میشوند، شناسایی میکنند.
۴ اوت ۲۰۲۶ (اواسط صبح)
کرم چیندراپ به طور خودکار منتشر میشود و بیش از ۲,۲۰۰ نسخه در ۴۴۴ بسته را در کمتر از چهار ساعت آلوده میکند.
۵ اوت ۲۰۲۶
فروشندگان امنیتی تحلیلهای دقیقی از گونه مینی شای-هولود و قابلیتهای سرقت اعتبارنامه آن منتشر میکنند.
چرا مهم است
این حمله نشان میدهد که اگر هویتهای انسانی کنترلکننده امضاهای رمزنگاری و بررسیهای امنیتی خودکار به خطر بیفتند، این ابزارها نمیتوانند از نرمافزار محافظت کنند. توسعهدهندگان و شرکتها باید فرض کنند که محیطهای ساخت (build environments) آنها خصمانه هستند و باید عمر و دامنه دسترسی اعتبارنامههای خود را به شدت محدود کنند.
در تاریخ ۴ اوت ۲۰۲۶، یک کرم خودانتشارشونده به نام «چیندراپ» (ChainDrop) در مخزن مدیر بسته نود (npm) منتشر شد و ۴۴۴ بسته و ۲,۲۱۲ نسخه را در کمتر از چهار ساعت آلوده کرد. این حمله برخی از پرترددترین زیرساختهای اکوسیستم جاوااسکریپت، از جمله کتابخانه ذخیرهسازی keyv و flat-cache را که مجموعاً صدها میلیون بار در هفته دانلود میشوند، هدف قرار داد.[1][2]
برخلاف بدافزارهای معمولی که به جعل نام (typosquatting) یا بستههای ناشناخته متکی هستند، چیندراپ هویت نگهدارنده اصلی keyv را به خطر انداخت. مهاجمان با ارسال مستقیم فایلهای مخرب به شاخه اصلی مخزن و انتشار فوری نسخه جدید، از گردش کارهای خودکار خود پروژه سوءاستفاده کردند.[5]
این سازوکار یک نقطه کور حیاتی را در بازاریابی امنیت زنجیره تأمین مدرن برجسته میکند. نسخههای آلوده با گواهیهای معتبر SLSA Provenance منتشر شدند که توسط GitHub Actions به صورت رمزنگاری امضا شده بودند. در حالی که این گواهی اثبات میکند که یک کامیت خاص توسط یک گردش کار مشخص ساخته شده است، نمیتواند ثابت کند که خود کامیت مجاز یا بیخطر بوده است.[2]

این حمله که به عنوان گونهای از خانواده بدافزار «مینی شای-هولود» (Mini Shai-Hulud) شناسایی شد، بار خود را از طریق یک هوک چرخه حیات پیشنصب (preinstall lifecycle hook) اجرا کرد. این کار از یک ویژگی قانونی npm سوءاستفاده میکند که دستورات دلخواه را قبل از نصب کامل بسته اجرا میکند و نیازی به تعامل توسعهدهنده فراتر از اجرای یک دستور استاندارد npm install ندارد.[3][4]
پس از فعال شدن، اسکریپت توزیعکننده (که معمولاً setup.mjs نام دارد) یک محیط اجرای قانونی جاوااسکریپت Bun را به همراه ۷۱۰ کیلوبایت کد مرحله دوم به شدت مبهمسازی شده دانلود میکند. این بار چندسکویی، محیطهای لینوکس، macOS و ویندوز را هدف قرار میدهد و ایستگاههای کاری توسعهدهندگان و خطوط لوله یکپارچهسازی/استقرار مداوم (CI/CD) را برای یافتن اسرار با ارزش بالا اسکن میکند.[1][3]
این بدافزار به طور سیستماتیک توکنهای npm، اعتبارنامههای GitHub، کلیدهای خدمات وب آمازون (AWS)، اسرار کوبرنتیس (Kubernetes) و پارامترهای HashiCorp Vault را جمعآوری میکند. همچنین زیرساختهای ارتباطی و پرداخت را هدف قرار میدهد و توکنهای Slack و Stripe را از محیطهای محلی استخراج میکند.[5]

پس از رمزگذاری دادههای سرقت شده با استفاده از کلیدهای عمومی RSA-۴۰۹۶ جاسازی شده، کرم اسرار را به نقاط پایانی HTTPS پویا یا مخازن عمومی GitHub ارسال میکند. مهاجمان با اشاره به کمپینهای قبلی، این مخازن مرده (dead-drop) را با شرح «Shai-Hulud: Here We Go Again» برچسبگذاری کردند.[1][5]
پس از رمزگذاری دادههای سرقت شده با استفاده از کلیدهای عمومی RSA-۴۰۹۶ جاسازی شده، کرم اسرار را به نقاط پایانی HTTPS پویا یا مخازن عمومی GitHub ارسال میکند.
آنچه چیندراپ را از یک سارق اطلاعات استاندارد به یک بحران زنجیره تأمین ارتقا میدهد، موتور انتشار خودکار آن است. پس از به دست آوردن توکن انتشار npm یک توسعهدهنده، کرم هر بسته دیگری را که هویت به خطر افتاده حق تغییر آن را دارد، فهرست میکند.[1]
سپس فایلهای فشرده (tarballs) آخرین نسخههای آن بستهها را دانلود میکند، بدافزار و بارگذار را در آنها قرار میدهد، نسخه پچ را افزایش میدهد و بستههای اصلاح شده را دوباره در مخزن npm منتشر میکند. این انتشار مجدد خودکار باعث شد که تعداد کل تکرارهای مخرب در عرض چند ساعت از ۲,۲۰۰ مورد فراتر رود.[1][2]

این کرم همچنین از اعتبارنامههای دزدیده شده GitHub برای ایجاد پایداری در مخازن کد منبع استفاده میکند. این بدافزار فایلهای پیکربندی دستیارهای کدنویسی هوش مصنوعی مانند Claude و محیطهای توسعه یکپارچه (IDE) مانند Visual Studio Code را مستقیماً به پایگاه کد تزریق میکند.[1][4]
مهاجمان با کامیت کردن این فایلهای هوک – که اغلب برای فرار از بررسیهای سطحی به حسابهای رباتهای خودکار نسبت داده میشوند – یک مسیر عفونت اضافی توسعهدهنده به توسعهدهنده ایجاد کردند. باز کردن یک مخزن در یک ویرایشگر پیکربندی شده میتواند بار مخرب را حتی بدون اجرای دستور npm install فعال کند.[4]
محققان امنیتی خاطرنشان میکنند که اسکنرهای وابستگی اغلب در شناسایی این هوکهای سطح منبع شکست میخورند، زیرا به دنبال بستههای مخرب شناخته شده هستند تا فایلهای پیکربندی محلی آلوده. این تکنیک شبیه حملات قبلی است که عوامل کدنویسی هوش مصنوعی را هدف قرار داده بودند و نشاندهنده تغییر به سمت سوءاستفاده از ابزارهای بهرهوری توسعهدهندگان است.[4]
پیامدهای کمپین چیندراپ، تلاش گستردهای برای ترمیم محیطهای نرمافزاری سازمانی را ایجاب کرده است. سازمانهایی که از بستههای آسیبدیده استفاده میکنند، از جمله پلتفرمهای بزرگی مانند Deliveroo و Qlik، باید فرض کنند که هر اعتبارنامهای که در دستگاههای آلوده وجود داشته، به خطر افتاده است.[5]

تیمهای واکنش به حادثه به توسعهدهندگان توصیه میکنند که سیستمهای آسیبدیده را فوراً ایزوله کنند. به جای حذف صرف بدافزار، تیمها باید فایلهای فشرده بسته (tarballs)، لاگهای npm و تصاویر CI runner را حفظ کنند تا دامنه قرار گرفتن در معرض خطر را محدود کرده و دقیقاً متوجه شوند چه چیزی به سرقت رفته است.[1]
بازسازی CI runnerها، چرخاندن تمام اعتبارنامههایی که احتمالاً در معرض خطر قرار گرفتهاند، و ممیزی مخازن GitHub برای یافتن کامیتهای غیرعادی، اکنون گامهای اجباری برای سازمانهای آسیبدیده است. این حادثه یادآوری تلخی است که امضاهای رمزنگاری و بررسیهای خودکار تنها به اندازه هویتهای انسانی که آنها را کنترل میکنند، قابل اعتماد هستند.[1][6]
نکات کلیدی
- کرم چیندراپ ۴۴۴ بسته npm و ۲,۲۱۲ نسخه را در کمتر از چهار ساعت به خطر انداخت.
- مهاجمان حساب GitHub یکی از نگهدارندگان اصلی را ربودند تا کد مخرب را از طریق گردش کارهای انتشار قانونی ارسال کنند.
- بستههای آلوده دارای گواهیهای معتبر SLSA Provenance بودند و بررسیهای امنیتی خودکار را دور زدند.
- این بدافزار اعتبارنامههای ابری و زیرساختی را سرقت میکند و از آنها برای آلوده کردن خودکار مخازن دیگر استفاده میکند.
بررسی عمیق دیدگاهها
فروشندگان ابزارهای امنیتی
استدلال میکنند که اتکای صنعت به تحلیل ایستا و گواهیدهی کافی نیست.
فروشندگان امنیتی تأکید میکنند که چون چیندراپ از امضاهای رمزنگاری معتبر و خطوط لوله ساخت قانونی استفاده کرده است، سازمانها باید نظارت رفتاری در زمان اجرا را اتخاذ کنند. آنها استدلال میکنند که تحلیل ایستا و گواهیهای زنجیره تأمین به راحتی دور زده میشوند، زمانی که هویت یک نگهدارنده به خطر میافتد، و ایزولهسازی سختگیرانه شبکه برای محیطهای CI/CD برای شناسایی اجرای مخرب در حین وقوع ضروری است.
تیمهای امنیتی سازمانی
بر کاهش شعاع انفجار و معماریهای اعتماد صفر تمرکز میکنند.
مدافعان سازمانی استدلال میکنند که ایستگاههای کاری توسعهدهنده و CI runnerها ذاتاً محیطهایی با ریسک بالا هستند و نباید اعتبارنامههای طولانیمدت و بیش از حد مجاز داشته باشند. اولویت آنها اجرای توکنهای کوتاهمدت و معماریهای اعتماد صفر است تا آنچه را که یک کرم میتواند بدزدد، محدود کنند، با فرض اینکه نقض زنجیره تأمین نرمافزار اجتنابناپذیر است.
اصطلاحات کلیدی
- SLSA Provenance
- چارچوب امنیتی که سوابق قابل تأیید رمزنگاری شدهای از نحوه ساخت یک بسته نرمافزاری ارائه میدهد، اگرچه تضمین نمیکند که کد بیضرر باشد.
- Preinstall Hook
- اسکریپتی که در پیکربندی یک بسته تعریف شده و به طور خودکار قبل از نصب کامل بسته اجرا میشود؛ اغلب توسط بدافزارها برای اجرای کد بدون تعامل کاربر مورد سوءاستفاده قرار میگیرد.
- Tarball
- یک فرمت فایل آرشیو فشرده که برای بستهبندی چندین فایل با هم استفاده میشود و معمولاً برای توزیع بستههای نرمافزاری در مخازنی مانند npm به کار میرود.
- Worm
- نوعی بدافزار خودانتشارشونده که برای گسترش خودکار در شبکهها یا سیستمها بدون نیاز به دخالت کاربر طراحی شده است.
آنچه نمیدانیم
- هویت دقیق بازیگران تهدید پشت کمپین چیندراپ، اگرچه این بدافزار با خانواده Shai-Hulud همریشه است.
- میزان کامل نقضهای ثانویه ناشی از اعتبارنامههای AWS، Kubernetes و HashiCorp Vault که به سرقت رفتهاند.
پرسشهای متداول
چگونه بفهمم پروژه من تحت تأثیر چیندراپ قرار گرفته است؟
درخت وابستگی خود را برای بستههای به خطر افتاده مانند keyv، flat-cache یا cacheable که در تاریخ ۴ اوت ۲۰۲۶ یا پس از آن منتشر شدهاند، بررسی کنید. اسکنرهای امنیتی و ابزارهای npm audit برای علامتگذاری نسخههای مخرب بهروزرسانی شدهاند.
چرا بررسیهای گواهیدهی (provenance) جلوی بدافزار را نگرفت؟
مهاجمان حساب نگهدارنده را به خطر انداختند و از گردش کارهای قانونی GitHub Actions پروژه برای ساخت نسخه استفاده کردند. گواهیدهی ثابت میکند که کد از گردش کار رسمی آمده است، اما نمیتواند تشخیص دهد که خود کامیت مخرب بوده است.
اگر یک بسته آلوده نصب شده باشد، چه کاری باید انجام دهم؟
با دستگاه مانند یک سیستم کاملاً به خطر افتاده رفتار کنید. سیستم را ایزوله کنید، تمام اعتبارنامهها (npm، GitHub، AWS، Vault) را لغو و بچرخانید و CI runnerهای خود را از تصاویر تمیز بازسازی کنید.
منابع
[1]SecurityWeekنگهدارندگان متنباز
ChainDrop Worm Hits 400+ npm Packages with Two Billion Monthly Installs
مطالعه در SecurityWeek →[2]StepSecurityفروشندگان ابزارهای امنیتی
ChainDrop npm worm: 444 packages and 2212 versions poisoned
مطالعه در StepSecurity →[3]Elastic Security Labsفروشندگان ابزارهای امنیتی
Elastic Security Labs identified the return of Shai-Hulud
مطالعه در Elastic Security Labs →[4]SafeDepفروشندگان ابزارهای امنیتی
An npm worm published 2234 poisoned versions across 444 package names
مطالعه در SafeDep →[5]Infosecurity Magazineتیمهای امنیتی سازمانی
ChainDrop Worm Hits 400+ npm Packages with Two Billion Monthly Installs
مطالعه در Infosecurity Magazine →[6]Deepwatchفروشندگان ابزارهای امنیتی
Prevent keyv npm supply chain attacks
مطالعه در Deepwatch →
نظرات
هر زاویه. هر روز.
دریافت فناوری اخبار همراه با پوشش کامل منابع و تحلیل دیدگاهها، مستقیم در صندوق ورودی شما.








