یک نقص امنیتی در مکانیزم Trusted Publishing در npm شناسایی شده است که به مهاجمان اجازه میداد با تصاحب نام مخازن (Repository) رهاشده در GitHub، کنترل بستههای نرمافزاری معتبر را در دست بگیرند. این آسیبپذیری که SlugFest نامیده شده، پتانسیل ایجاد حملات گسترده در زنجیره تأمین (Supply-Chain Attacks) و قرار دادن میلیونها کاربر در معرض خطر داشت.
جزئیات فنی نقص امنیتی
محققان Bloom Security دریافتند که npm برای تأیید ناشران مورد اعتماد، به جای استفاده از شناسههای عددی دائمی و تغییرناپذیر مخازن GitHub، بر نامهای قابل خواندن توسط انسان (Owner/Repository Name) تکیه میکرد. در ساختار GitHub، زمانی که یک مخزن تغییر نام داده، منتقل یا حذف شود، نام قبلی آن ممکن است برای کاربران دیگر در دسترس قرار گیرد.
یک مهاجم میتوانست با ایجاد مخزنی با همان نام قدیمی و پیکربندی یک گردشکار (Workflow) در GitHub Actions، اعتبار انتشار بسته را به دست آورد. از آنجایی که npm تنها نام مخزن و نام فایل گردشکار را بررسی میکرد و شناسهی دائمی مخزن را اعتبارسنجی نمیکرد، مهاجم میتوانست بدون نیاز به دسترسی به حساب کاربری توسعهدهنده یا سرقت توکنها، نسخههای جدیدی از بسته را منتشر کند.
دامنه تأثیر و ریسکهای مرتبط
- تعداد بستههای آسیبپذیر: بیش از ۱۵۰۰ بسته، از جمله ابزارهای اسکن امنیتی، ابزارهای احرازهویت و بستههای رمزنگاری.
- حجم دانلودها: این بستهها در مجموع بیش از ۱۰ میلیون دانلود داشته و ماهانه بیش از یک میلیون بار دانلود میشوند.
- نقش هوش مصنوعی: محققان هشدار دادند که عوامل کدنویس مبتنی بر هوش مصنوعی (AI Coding Agents) میتوانند توزیع وابستگیهای مخرب را تسریع کنند، زیرا این ابزارها اغلب بدون نظارت انسانی مستقیم، بستهها را انتخاب و نصب میکنند.
اقدامات اصلاحی و توصیهها
تیم npm تأیید کرده است که این مشکل در تاریخ ۲ اکتبر برطرف شده است. راهکار اعمال شده شامل معرفی یک مهلت انقضای ۴۸ ساعته برای پیکربندیهای Trusted Publishing تأیید نشده است. همچنین، npm سختگیریهای بیشتری را در مورد توکنهای صادر شده از طریق رویدادهای issue_comment در GitHub Actions اعمال کرده است.
به مدیران امنیت و توسعهدهندگان توصیه میشود اقدامات زیر را انجام دهند:
- حسابرسی (Audit): پیکربندیهای Trusted Publishing خود را بررسی کنید تا مطمئن شوید هر نام مخزن مورد اعتماد، همچنان به مخزنی تحت کنترل شما اشاره میکند.
- بازسازی پیوندها: در صورت نیاز، پیوندهای اعتمادی (Bindings) را حذف و مجدداً ایجاد کنید.
- کنترل وابستگیها: ابزارهای مورد استفاده در محیطهای توسعه و CI/CD را بررسی کرده و کنترلهای سختگیرانهای بر روی بستههایی که توسط توسعهدهندگان یا عوامل AI نصب میشوند، اعمال کنید.