پکیج‌های مخرب npm با اجرای کد در زمان اجرا، مکانیزم‌های امنیتی اسکریپت‌های نصب را دور می‌زنند

اشتراک گذاری

پکیج‌های مخرب npm
❞ یک کمپین بدافزاری در اکوسیستم npm شناسایی شده است که نشان می‌دهد پکیج‌های مخرب npm چگونه با پنهان‌کردن کد مخرب در زمان اجرا (Runtime)، مکانیزم‌های امنیتی اسکریپت‌های نصب را دور می‌زنند. پکیج indexed-btree که خود را به‌عنوان یک کتابخانه معتبر معرفی می‌کند، حدود 2 میلیون دانلود هفتگی داشته است و اطلاعات سیستم را جمع‌آوری کرده و برای مهاجمان ارسال می‌کند. شناسایی 9 پکیج مرتبط دیگر نیز گستردگی این عملیات را نشان می‌دهد؛ رویکردی که بار دیگر اهمیت مانیتورینگ عملکرد وابستگی‌ها در زمان اجرا را نشان داده و پکیج‌های مخرب npm را به تهدیدی جدی برای زنجیره تأمین نرم‌افزار تبدیل می‌کند.

چگونه پکیج‌های مخرب npm مکانیزم‌های امنیتی جدید را دور می‌زنند؟

گزارش‌های منتشرشده نشان می‌دهد که کمپین مرتبط با پکیج‌های مخرب npm ممکن است درآمد قابل‌توجهی برای مهاجمان ایجاد کرده باشد. طبق گزارش شرکت امنیت سایبری Checkmarx، یک کیف پول رمزارزی مرتبط با این عملیات، حاوی 109 واحد اتریوم (ETH) است. بااین‌حال، در گزارش Checkmarx هیچ شواهدی ارائه نشده است که نشان دهد این دارایی‌ها از طریق سرقت رمزارز به دست آمده‌اند.

گیت‌هاب در ژوئن 2026، مجموعه‌ای از مکانیزم‌های امنیتی جدید برای npm را معرفی کرد که با هدف مقابله با حملات زنجیره تأمین نرم‌افزار طراحی شده‌اند؛ حملاتی که از اواخر سال 2025 بارها اکوسیستم‌های متن‌باز را تحت تأثیر قرار داده‌اند.یکی از اقدامات اصلی گیت‌هاب، جلوگیری از اجرای خودکار اسکریپت‌های چرخه عمر وابستگی‌ها (Dependency Lifecycle Scripts) مانند preinstall (پیش از نصب)، install (هنگام نصب) و postinstall (پس از نصب) است؛ مگر اینکه اجرای آن‌ها از قبل به‌طور صریح تأیید شده باشد.

در کنار این موارد، اقدامات امنیتی دیگری نیز در نظر گرفته شده است تا npm بدون مجوز، وابستگی‌ها را به‌صورت خودکار از مخازن گیت (Git) یا آدرس‌های اینترنتی راه دور (Remote URLs) دریافت نکند.

بااین‌حال، پکیج indexed-btree بدون استفاده از اسکریپت‌های نصب، این سازوکارهای امنیتی را دور می‌زند و لودر مخرب خود را در متدBTree.prototype.set()  پنهان می‌کند. این متد زمانی اجرا می‌شود که اپلیکیشن در زمان اجرا، آن را با یک کلید مشخص فراخوانی کند. در نتیجه، نصب پکیج بدون هیچ نشانه‌ای از فعالیت مخرب انجام می‌شود و هیچ‌یک از مکانیزم‌های تأیید npm نسخه 12 فعال نمی‌شوند. به این ترتیب، پکیج‌های مخرب npm می‌توانند بدون ایجاد هشدار در زمان نصب، کد مخرب خود را هنگام اجرای اپلیکیشن فعال کنند.

پنهان‌سازی لودر بدافزار در متد اصلی کتابخانه

پژوهشگران Checkmarx توضیح می‌دهند که لودر بدافزار در متد اصلی BTree.prototype.set کتابخانه پنهان شده است؛ متدی که کاربران به‌طور معمول و مکرر برای کار با این کتابخانه از آن استفاده می‌کنند. به همین دلیل، اجرای این متد می‌تواند نقطه‌ای مناسب برای فعال‌سازی کد مخرب باشد و پکیج‌های مخرب npm را از دید بسیاری از بررسی‌های امنیتی معمول پنهان نگه دارد.

با اجرای این متد، فایل sharedLoad.min.js فعال می‌شود که حاوی مرحله نخست مبهم‌سازی‌شده (Obfuscated)  بدافزار است. به گفته پژوهشگران، این روش به‌گونه‌ای طراحی شده است که می‌تواند از ابزارهای استاندارد تحلیل انتشار داده و بخش عمده‌ای از اسکنرهای ایستا عبور کند.

این شیوه نشان می‌دهد که بررسی امنیتی پکیج‌ها نباید فقط به زمان نصب محدود شود و تحلیل عملکرد آن‌ها هنگام اجرا نیز باید در فرآیند بررسی وابستگی‌ها مورد توجه قرار گیرد.

پکیج‌های مخرب npm
سازوکار فعال‌سازی کد مخرب در زمان اجرا

قابلیت‌های پکیج‌های مخرب npm برای جمع‌آوری اطلاعات و حذف آثار فعالیت بدافزار

پکیج‌های مخرب npm پس از اجرای بدافزار می‌توانند اطلاعات مختلفی از سیستم قربانی، از جمله معماری سیستم، نام میزبان (Hostname)، مشخصات پردازنده (CPU)، میزان حافظه و مدت زمان فعالیت سیستم (Uptime) را جمع‌آوری کنند. سپس این اطلاعات از طریق کانال‌های ازپیش‌تعیین‌شده در پیام‌رسان‌های اسلک (Slack) و تلگرام به زیرساخت مهاجمان ارسال می‌شوند.

همچنین بدافزار برای دریافت اطلاعات مربوط به فرماندهی و کنترل (C2)، یک قرارداد هوشمند اتریوم را در شبکه آزمایشی سپولیا (Sepolia) بررسی می‌کند. بدافزار با استفاده از تبادل کلید X25519، یک کلید AES استخراج کرده و سپس با استفاده از آن، پیلود مرحله دوم ذخیره‌شده در قرارداد هوشمند را رمزگشایی می‌کند.

مهاجمان قابلیتی برای پاک‌سازی آثار حمله نیز در بدافزار تعبیه کرده‌اند. بدافزار در صورت پایان عملیات می‌تواند فایل‌های مربوط به خود را حذف کند و بخشی از کد مخرب را که باعث فعال شدن آن شده است نیز از کد پکیج پاک کند تا اثری از فعالیت بدافزار باقی نماند.

همچنین به گفته پژوهشگران، مهاجمان برای واقعی و معتبر به نظر رسیدن پروژه، یک مخزن گیت‌هاب با ظاهر یک پروژه واقعی ایجاد کرده‌اند. در این مخزن نیز تاریخچه‌ای از کامیت‌ها (Commit) وجود دارد و حساب کاربری توسعه‌دهنده هم به‌گونه‌ای تنظیم شده است که فعالیت یک توسعه‌دهنده واقعی را نشان دهد.

بررسی تاریخچه کامیت‌ها نیز نشان می‌دهد که بخشی از این کامیت‌ها برای واقعی و معتبر نشان دادن پروژه ایجاد شده‌اند.

تاریخچه کامیت‌های جعلی

شناسایی 9 پکیج مرتبط دیگر و توصیه‌های امنیتی به توسعه‌دهندگان

شرکت Checkmarx در ادامه بررسی‌های خود، 9 پکیج دیگر را شناسایی کرده است که به همین عملیات مرتبط بوده‌اند. این پکیج‌ها اکنون از مخزن npm حذف شده‌اند، اما پیش از حذف، تعداد قابل‌توجهی دانلود داشته‌اند:

  • ordered-kv-index: 448,184 دانلود
  • btree-leaderboard: 493,685 دانلود
  • priority-slot-queue: 402,860 دانلود
  • btree-range-store: 468,092 دانلود
  • btree-core: 1,951,274 دانلود
  • btree-time-index: 425,312 دانلود
  • btree-lru-cache: 372,185 دانلود
  • neighbor-key-map: 366,019 دانلود
  • sliding-score-window: 448,024 دانلود

پژوهشگران به توسعه‌دهندگان توصیه می‌کنند برای شناسایی پکیج‌های مخرب npm، بررسی‌های امنیتی را فقط به زمان نصب محدود نکرده و عملکرد پکیج‌ها را هنگام اجرا نیز بررسی کنند.

توسعه‌دهندگانی که indexed-btree یا هر یک از پکیج‌های بالا را نصب کرده‌اند، باید تمام کلیدها، رمزها و سایر اطلاعات محرمانه مورد استفاده در محیط توسعه را تغییر دهند و محیط توسعه را با استفاده از یک نسخه پشتیبان سالم و مطمئن بازیابی کنند.

منابع

دیدگاهتان را بنویسید

مطالب مرتبط