یک کارزار بدافزاری فعال در اکوسیستم npm، با استفاده از بستهٔ indexed-btree، نشان میدهد مهاجمان چگونه با پنهان کردن کد مخرب در رفتار عادی بسته هنگام اجرای برنامه، بهجای قراردادن آن در اسکریپتهای نصب، از سد دفاعی زنجیره تامین نرمافزار عبور میکنند.
این بسته که پژوهشگران Checkmarx آن را شناسایی کردهاند، تلاش میکند خود را بهجای کتابخانه معتبر sorted-btree جا بزند و شمار دانلودهای هفتگی آن تاکنون به ۲ میلیون رسیده است.
این کارزار ممکن است سود قابل توجهی نیز برای مهاجمان به همراه داشته باشد. به گفته Checkmarx، آنها از کیف پولی استفاده میکنند که موجودی آن ۱۰۹ اتر (ETH) است. با این حال، در گزارش مشخص نشده که این دارایی از سرقت رمزارز به دست آمده باشد.
دور زدن تازهترین تدابیر امنیتی
گیتهاب در ژوئن ۲۰۲۶ مجموعهای از تدابیر امنیتی برای npm معرفی کرد. هدف این تدابیر، کمک به جلوگیری از حملات زنجیره تامین نرمافزار بود؛ حملاتی که از اواخر سال ۲۰۲۵ بارها اکوسیستمهای متنباز را تحت تاثیر قرار دادهاند.
یکی از تدابیر اصلی، مسدود کردن اجرای اسکریپتهای چرخه حیات وابستگیها، مانند preinstall، install و postinstall است؛ مگر اینکه اجرای آنها صراحتا تایید شده باشد.
تدابیر دیگر نیز مانع میشوند npm بدون مجوز، وابستگیها را بهصورت خودکار از مخازن Git یا نشانیهای اینترنتی دریافت کند.
بستهٔ مخرب indexed-btree با استفاده نکردن از اسکریپتهای نصب، این سازوکارهای حفاظتی را دور میزند. در عوض، کد بارگذار بدافزار را در متد BTree.prototype.set() پنهان میکند. این کد زمانی فعال میشود که برنامه هنگام اجرا، متد مذکور را با مقدار مشخصی برای کلید فراخوانی کند.
در نتیجه، فرایند نصب پاک و بیخطر به نظر میرسد و هیچ یک از سازوکارهای درخواست تایید در npm نسخهٔ ۱۲ فعال نمیشوند.
«بارگذار بدافزار درون متد
BTree.prototype.setخود کتابخانه پنهان شده است؛ همان تابع اصلی که هر کاربر کتابخانه مرتبا آن را فراخوانی میکند.این فراخوانی باعث اجرای فایل
sharedLoad.min.jsمیشود که مرحله نخست بدافزار را بهصورت مبهمسازی شده در خود جای داده است. این روش با طراحی حسابشدهای، ابزارهای متداول تحلیل جریان داده آلوده (taint analysis) و بیشتر اسکنرهای ایستا را دور میزند.»
پس از اجرا، بدافزار میتواند اطلاعات سیستم، از جمله معماری سختافزاری، نام میزبان، مشخصات پردازنده، حافظه و مدت زمان روشن بودن سیستم را جمعآوری کند. سپس این اطلاعات را از طریق کانالهای Slack و Telegram که نشانی آنها بهصورت ثابت در کد درج شده است، به بیرون ارسال میکند.
بدافزار همچنین برای دریافت اطلاعات فرماندهی و کنترل (C2)، بهصورت دورهای یک قرارداد هوشمند اتریوم را در شبکه آزمایشی Sepolia بررسی میکند. این بدافزار از سازوکار تبادل کلید X25519 برای مشتقسازی یک کلید AES استفاده میکند و با آن، محموله مرحله دوم را که در قرارداد ذخیره شده است، رمزگشایی میکند.
هنگامی که گردانندگان تصمیم به پایان دادن حمله بگیرند، بدافزار میتواند فایلهای خود را حذف کند و کد فعال کننده مخرب را نیز از کد بسته بردارد تا ردپای خود را پاک کند.
پژوهشگران میگویند مهاجمان برای معتبر جلوه دادن پروژه تلاش زیادی کردهاند؛ از جمله ایجاد یک مخزن ظاهرا معتبر در گیتهاب، ساختن سابقه کامیت و پرداختن به حساب کاربری توسعهدهنده برای طبیعی و معتبر نشاندادن آن.
Checkmarx همچنین ۹ بسته دیگر npm را شناسایی کرده که با همین عملیات مرتبط بودهاند و اکنون از npm حذف شدهاند. این بستهها نیز، همانطور که در فهرست زیر دیده میشود، تعداد دانلود قابلتوجهی داشتهاند:
| نام بسته | تعداد دانلود |
|---|---|
ordered-kv-index |
۴۴۸٬۱۸۴ |
btree-leaderboard |
۴۹۳٬۶۸۵ |
priority-slot-queue |
۴۰۲٬۸۶۰ |
btree-range-store |
۴۶۸٬۰۹۲ |
btree-core |
۱٬۹۵۱٬۲۷۴ |
btree-time-index |
۴۲۵٬۳۱۲ |
btree-lru-cache |
۳۷۲٬۱۸۵ |
neighbor-key-map |
۳۶۶٬۰۱۹ |
sliding-score-window |
۴۴۸٬۰۲۴ |
به توسعهدهندگان توصیه میشود صرفا به اسکن هنگام نصب اتکا نکنند و تحلیل رفتار برنامه هنگام اجرا را نیز به کار بگیرند.
کسانی که indexed-btree یا هرکدام از بستههای فهرست شده را نصب کردهاند، باید تمام اطلاعات محرمانه دسترسی (secrets)، مانند رمزهای عبور، توکنها و کلیدها را تعویض و مقادیر قبلی را بیاعتبار کنند. همچنین باید محیط توسعه خود را از یک نسخه پشتیبان سالم و مطمئن بازیابی کنند.




