بیش از 30 پکیج npm متعلق به فضای نام (Namespace) @redhat-cloud-services شرکت Red Hat در جریان حمله زنجیره تأمین npm آلوده شدند؛ رخدادی که منجر به توزیع گونهای جدید از بدافزار رباینده اعتبارنامه Shai-Hulud با نام میاسما (Miasma) شد. این حمله زنجیره تأمین npm که توسط شرکتهای امنیتی Aikido و OX Security شناسایی شد، با هدف سرقت اعتبارنامههای توسعهدهندگان، دادههای محرمانه سرویسهای ابری، کلیدهای SSH، توکنهای CI/CD و سایر اطلاعات حساس انجام شده است.
بر اساس گزارش Aikido، پکیجهای آلوده در مجموع حدود 117 هزار دانلود هفتگی داشتهاند. Red Hat نیز اعلام کرده است که پس از آگاهی از این رخداد، پکیجهای آلوده را از مخزن npm حذف کرده و تحقیقات داخلی خود را آغاز کرده است.
جزئیات حمله زنجیره تأمین npm به پکیجهای Red Hat
به گفته محققان Aikido، مهاجمان احتمالاً به حساب GitHub یکی از کارکنان Red Hat دسترسی غیرمجاز پیدا کرده و از آن برای ارسال کامیتهای مخرب به چندین مخزن کد استفاده کردهاند. این کامیتها شامل یک گردشکار (Workflow) در GitHub Actions و اسکریپتی بودند که از سازوکار انتشار npm برای توزیع نسخههای دارای بکدور سوءاستفاده میکرد.
بر اساس یافتههای Aikido، این گردشکار پس از اجرا، ابتدا ابزار Bun را نصب میکرد و سپس فایل _index.js را به اجرا درمیآورد. فهرست پکیجهای هدف نیز از طریق متغیر محیطی (Environment Variable) OIDC_PACKAGES به این اسکریپت منتقل میشد.
اسکریپت مذکور با استفاده از مجوز id-token: write یک توکن OIDC با مدت اعتبار محدود از GitHub دریافت میکرد و سپس از همان توکن برای احراز هویت مستقیم در Endpoint مربوط به قابلیت انتشار امن و بدون توکن npm یا همان انتشار مورد اعتماد (trusted publishing) استفاده میکرد تا نسخههای آلوده پکیجها منتشر شوند.
پکیجهای آلوده و اجرای بدافزار در مرحله نصب
در ادامه حمله زنجیره تأمین npm، بررسیهای Aikido نشان میدهد پکیجهای آلوده دارای یک اسکریپت مخرب پیش از نصب (Preinstall Script) بودند که هنگام نصب پکیج توسط توسعهدهنده، بهصورت خودکار فایل index.js را اجرا میکرد؛ فایلی که بهشدت مبهمسازیشده (Obfuscated) بود تا تحلیل و شناسایی آن دشوارتر شود.
نکته مهم این است که پیلود مخرب پیش از آنکه توسعهدهنده از پکیج استفاده کند و تنها در مرحله نصب فعال میشد؛ روشی که اثربخشی این حمله زنجیره تأمین npm را بهطور قابلتوجهی افزایش میداد.
ساختار اجرای کد مخرب در پکیجهای آلوده به صورت زیر بوده است:
"scripts": {
"preinstall": "node index.js"
}
بر اساس تحلیل محققان Aikido، فایل مخرب index.js حدود 4.2 مگابایت حجم داشته و برای سرقت طیف گستردهای از اطلاعات حساس طراحی شده بود. دادههای هدف این بدافزار شامل موارد زیر بود:
دادههای محرمانه در GitHub Actions
اعتبارنامههای سرویس ابری آمازون (AWS)
اعتبارنامههای Google Cloud
اعتبارنامههای حسابهای سرویس Azure
توکنهای HashiCorp Vault
توکنهای حسابهای سرویس کوبرنتیز (Kubernetes)
توکنهای انتشار npm و PyPI
کلیدهای SSH
اطلاعات احراز هویت داکر (Docker)
کلیدهای رمزنگاری GPG
فایلهای پیکربندی محیطی .env
به گفته Aikido، این رخداد در مجموع 32 پکیج و 96 نسخه مختلف از پکیجها را تحت تأثیر قرار داده است. در میان آنها چندین کتابخانه سمت کاربر نیز قرار دارند که تحت فضای نام @redhat-cloud-services توسعه داده و منتشر میشدند.
واکنش Red Hat به حمله زنجیره تأمین npm
Red Hat پس از انتشار گزارشهای امنیتی درباره برخی از پکیجهای npm متعلق به اکوسیستم توسعه خود، اعلام کرد که بلافاصله بررسیهای داخلی را آغاز کرده و تمامی پکیجهای آلوده را از مخزن npm حذف کرده است.
این شرکت در بیانیهای تأکید کرد که پکیجهای آلوده صرفاً در ابزارها و زیرساختهای توسعه داخلی مورد استفاده قرار میگرفتند و کد مخرب هرگز از طریق سامانه console.redhat.com در اختیار مشتریان قرار نگرفته است.
بر اساس اعلام Red Hat، تحقیقات اولیه تاکنون هیچ نشانهای از تأثیرگذاری این رخداد بر محیطهای مشتریان، شرکای تجاری یا سامانهها و زیرساختهای عملیاتی این شرکت نشان نداده است.
Red Hat همچنین اعلام کرده است که بررسی ابعاد این رخداد همچنان ادامه دارد. با این حال، این شرکت جزئیاتی درباره نحوه دسترسی مهاجمان به حساب کاربری مورد سوءاستفاده یا چگونگی وقوع نفوذ اولیه منتشر نکرده و به پرسشهای مطرحشده در این زمینه پاسخی نداده است.
میاسما؛ بدافزاری با شبیه به Shai-Hulud
در ماههای اخیر، چندین حمله زنجیره تأمین با استفاده از بدافزار Shai-Hulud مشاهده شده است؛ حملاتی که هدف اصلی آنها سرقت اعتبارنامهها و گسترش آلودگی به پروژهها و مخازن دیگر بوده است. این موج حملات پیشتر پروژهها و سازمانهای شناختهشدهای از جمله Bitwarden، SAP، Mistral، TanStack، OpenAI و GitHub را نیز تحتتأثیر قرار داده بود.
در ادامه همین روند، حمله زنجیره تأمین npm علیه پکیجهای Red Hat از نمونهای جدید استفاده کرده که پژوهشگران امنیتی آن را میاسما (Miasma) نامیدهاند. این بدافزار از نظر ساختار و عملکرد، شباهت قابلتوجهی به Mini Shai-Hulud دارد؛ یک فریمورک بدافزاری که کد منبع آن در ماه می توسط گروه تهدید TeamPCP بهصورت عمومی منتشر شد. انتشار عمومی این کد، امکان استفاده مجدد، تغییر و سفارشیسازی آن را برای سایر عاملان تهدید فراهم کرده است.
به گفته محققان، نسخه میاسما که در حمله به پکیجهای Red Hat استفاده شد، عبارت زیر را بهعنوان کامنت در مخازن آلوده GitHub ثبت میکرد:
Miasma: The Spreading Blight
با وجود شباهتهای فنی میان این دو بدافزار، هنوز مشخص نیست کمپین اخیر مستقیماً توسط TeamPCP اجرا شده یا عامل تهدید دیگری با استفاده از کد منبع افشاشده، نسخه تغییریافتهای از آن را توسعه داده است.
مخازن GitHub آلودهشده توسط Miasma
قابلیتهای میاسما و دامنه نفوذ در GitHub
بر اساس گزارش OX Security، بدافزار میاسما قابلیتهای اصلی Mini Shai-Hulud در سرقت اعتبارنامهها را حفظ کرده است، اما در نسخه جدید از لایههای پیشرفتهتر مبهمسازی کد، سازوکارهای چندمرحلهای انتقال پیلود و قابلیتهای گستردهتر برای سرقت داده و جمعآوری اعتبارنامهها استفاده میکند.
در این بخش از حمله زنجیره تأمین npm، تمرکز بدافزار بر جمعآوری اطلاعاتی بوده که میتوانند برای دستیابی به دسترسیهای بعدی در محیطهای توسعه نرمافزار، زیرساختهای ابری و مخازن خصوصی کد مورد سوءاستفاده قرار گیرند.
در زمان انتشار این گزارش، دستکم 309 مخزن GitHub در ارتباط با کمپین میاسما آلوده شده یا تحت تأثیر آن قرار گرفته بودند.
سازمانهایی که هر یک از نسخههای آلوده را نصب کردهاند، باید فوراً تمامی اعتبارنامهها، دادههای محرمانه و توکنهای دسترسی را تغییر دهند.