حمله زنجیره تأمین علیه پروژه Injective Labs منجر به انتشار نسخهای آلوده از پکیج @injectivelabs/sdk-ts در مخزن npm شد. این پکیج با هدف سرقت کلیدهای خصوصی و عبارتهای بازیابی (Mnemonic Seed Phrases) کیف پولهای رمزارزی منتشر شده بود. در این حمله زنجیره تأمین، مهاجمان پس از نفوذ به مخزن گیتهاب پروژه، نسخه آلوده این پکیج را از طریق npm منتشر کردند.
ابعاد حمله زنجیره تأمین در اکوسیستم Injective SDK
شرکتهای فعال در حوزه امنیت اپلیکیشن شامل Socket، Ox Security و StepSecurity موفق شدند حمله زنجیره تأمین را در نسخه 1.20.21 پکیج @injectivelabs/sdk-tsدر مخزن مدیریت بسته نود (Node Package Manager – npm) شناسایی کنند.
Injective SDK یک کیت توسعه نرمافزار (SDK) مبتنی بر تایپاسکریپت (TypeScript) و جاوااسکریپت (JavaScript) است که برای توسعه اپلیکیشنهای مبتنی بر بلاکچین Injective طراحی شده است. این شبکه یک بلاکچین لایه یک (Layer-1) است که با تمرکز بر امور مالی غیرمتمرکز (DeFi)، داراییهای توکنیزهشده (Tokenized Assets) و صرافیهای غیرمتمرکز (DEXs) توسعه یافته است.
این پکیج بهطور میانگین 50 هزار بار در هفته از npm دانلود میشود و توسعهدهندگان از آن برای ساخت کیف پولهای رمزارزی، رباتهای تریدر یا معاملهگر (Trading Bots)، صرافیهای غیرمتمرکز، اپلیکیشنهای امور مالی غیرمتمرکز و ابزارهای پرداخت استفاده میکنند.
نفوذ به حساب گیتهاب و انتشار نسخه مخرب
بر اساس بررسی پژوهشگران، مهاجم پس از نفوذ به حساب گیتهاب یکی از مشارکتکنندگان معتبر پروژه، در 8 ژوئن چند کامیت مشکوک را به مخزن پروژه اضافه کرد و مدت کوتاهی بعد نسخه مخرب این پکیج را در npm منتشر نمود.
در ادامه، مهاجم نسخه 1.20.21 را برای 17 پکیج دیگر مرتبط با پروژه نیز منتشر و وابستگی (Dependency) همه آنها را به نسخه آلوده Injective SDK روی همین نسخه پین کرد. این حمله زنجیره تأمین باعث شد همه این پکیجها از نسخه آلوده Injective SDK استفاده کنند.
مالک اصلی حساب تنها چند دقیقه پس از نفوذ، تغییرات مخرب را شناسایی کرد، آنها را بازگرداند و نسخه 1.20.23 را منتشر کرد. با این حال، سیستمهای توسعهدهندگانی که پیش از انتشار نسخه پچشده، پکیجهای آلوده را از طریق بهروزرسانی دریافت کرده یا از آنها استفاده کرده بودند، به احتمال زیاد در معرض آلودگی قرار گرفتهاند.
گستردگی دامنه آلودگی پکیجهای npm در جریان حمله زنجیره تأمین
شرکت Socket اعلام کرد نسخه مخرب این پکیج پیش از آنکه منسوخ (Deprecated) شود، 310 بار دانلود شده است. با این حال، این پکیج همچنان از مخزن npm حذف نشده و آرتیفکتهای انتشار (Release Artifacts) مربوط به نسخه مخرب آن همچنان در گیتهاب قابل دسترسی هستند.
همچنین پژوهشگران اعلام کردند این پکیج دارای 87 وابستگی مستقیم در npm است و به احتمال زیاد تعداد قابلتوجهی وابستگی غیرمستقیم نیز تحت تأثیر قرار گرفتهاند. گزارش Ox Security نیز نشان میدهد که این حمله زنجیره تأمین میتواند دامنه بسیار گستردهتری داشته باشد، زیرا 87 پکیج وابسته در مجموع بیش از 112 هزار بار دانلود شدهاند.
بدافزار چگونه کلیدهای کیف پول را سرقت میکند؟
برخلاف بسیاری از بدافزارها، این کد مخرب بلافاصله پس از نصب فعال نمیشود. بدافزار تنها زمانی اجرا میشود که توسعهدهنده از توابع Injective SDK برای ایجاد یا وارد کردن (Import) کلیدهای کیف پول استفاده کند.
بدافزار پس از فراخوانی این توابع، عبارت بازیابی و کلید خصوصی کیف پول را استخراج کرده، اطلاعات را با فرمت Base64 کدگذاری میکند و سپس آنها را از طریق یک درخواست HTTP POST به یکی از endpointهای زیرساخت عمومی Injective Labs ارسال میکند. این حمله زنجیره تأمین بهگونهای طراحی شده است که ترافیک خروجی کاملاً عادی و معتبر به نظر برسد و توجه سامانههای امنیتی را جلب نکند.
StepSecurity گزارش داده است که بدافزار اطلاعات سرقتشده را بلافاصله ارسال نمیکند. این بدافزار ابتدا چندین کلید خصوصی و عبارت بازیابی را برای حدود دو ثانیه بهصورت موقت در حالت انتظار ارسال قرار میدهد، سپس آنها را در هدر یک درخواست HTTP قرار داده و به سرور مهاجم ارسال میکند.
مهاجم چگونه از اطلاعات سرقتشده سوءاستفاده میکند؟
مهاجم پس از دستیابی به عبارت بازیابی یا کلید خصوصی میتواند کیف پول قربانی را روی دستگاههای خود بازیابی کرده و به داراییهای دیجیتال آن دسترسی پیدا کند. در این شرایط، مهاجم قادر خواهد بود داراییهای رمزارزی قربانی را مشاهده کرده یا به کیف پولهای تحت کنترل خود منتقل کند. این حمله زنجیره تأمین نشان میدهد که آلودگی یک پکیج نرمافزاری میتواند منجر به سرقت مستقیم داراییهای دیجیتال کاربران شود.
پژوهشگران به توسعهدهندگانی که احتمال میدهند سیستم یا محیط توسعه آنها درگیر این آلودگی شده باشد، توصیه میکنند داراییهای رمزارزی خود را در سریعترین زمان ممکن به کیف پولهای جدید منتقل کنند. همچنین، تمامی اطلاعات محرمانه موجود در محیط توسعه باید تعویض شوند تا از سوءاستفاده احتمالی مهاجمان جلوگیری گردد.