پژوهشگران Bloom Security متوجه نقص امنیتی در قابلیت Trusted Publishing در سرویس npm شدهاند که به مهاجمان اجازه میداد بدون نیاز به سرقت اعتبارنامهها (Credentials)، نسخههای جدیدی از بستههای (Packages) دیگران را منتشر کنند. برای بهرهبرداری از این آسیبپذیری، مهاجم تنها کافی بود نام مخزن (Repository) در GitHub را که توسط توسعهدهنده رها شده بود، ثبت کند.
تاثیرات و ابعاد آسیبپذیری
بر اساس گزارشها، بیش از ۱۵۰۰ بسته npm در معرض این تهدید قرار داشتند که در مجموع بیش از ۱۰ میلیون بار دانلود شدهاند و ماهانه بیش از یک میلیون دانلود دارند. خطر اصلی در اینجا استفاده از postinstall script است؛ کدهایی که npm بهطور خودکار هنگام نصب یا بهروزرسانی یک بسته روی سیستم کاربر اجرا میکند و میتواند منجر به اجرای کد از راه دور (RCE) شود.
تحلیل فنی مکانیسم حمله
قابلیت Trusted Publishing که از جولای ۲۰۲۵ بهطور گسترده عرضه شده، جایگزین توکنهای طولانیمدت برای انتشار بستهها شده است. در این روش، توسعهدهنده به npm اعلام میکند که کدام مخزن GitHub و کدام فایل Workflow مجاز به انتشار بسته هستند. سپس GitHub یک توکن شناسایی امضا شده را صادر کرده و npm آن را با یک اعتبارنامه موقت تعویض میکند.
مشکل اینجاست که npm مخزن را بر اساس نام آن (که در GitHub به آن Slug میگویند) شناسایی میکرد، در حالی که GitHub برای هر مخزن و مالک یک ID عددی دائمی دارد که با تغییر نام یا انتقال مخزن تغییر نمیکند. npm این IDهای عددی را بررسی نمیکرد. بنابراین، اگر توسعهدهندهای نام مخزن خود را تغییر میداد، آن را منتقل میکرد یا کلاً حذف میکرد، آن Slug آزاد میشد. هر کسی میتوانست مخزنی با همان نام بسازد و با افزودن یک فایل Workflow مشابه، اعتبارنامه انتشار بسته را دریافت کند.
پاسخ GitHub و اقدامات اصلاحی
سرویس GitHub اعلام کرد که پس از دریافت گزارش از طریق برنامه Bug Bounty، اصلاحاتی را اعمال کرده است. اکنون پیکربندیهای تاییدنشده Trusted Publishing پس از ۴۸ ساعت منقضی میشوند و دیگر نمیتوانند عملیات انتشار را مجاز کنند. همچنین در مستندات npm ذکر شده است که اولین انتشار موفقیتآمیز، پیکربندی را به Immutable Identity (هویت تغییرناپذیر) مخزن متصل میکند تا ریسک تغییر مالکیت نام مخزن کاهش یابد.
نقش عوامل هوش مصنوعی در تشدید ریسک
پژوهشگران Bloom استدلال میکنند که عوامل کدنویسی مبتنی بر هوش مصنوعی (AI coding agents) این تهدیدات را گستردهتر میکنند. بر اساس دادههای تلهمتری، این ایجنتها بهطور متوسط ماهانه ۷۰ بسته روی سیستمهای معمولی و تا ۳۵۰ بسته روی سیستمهای توسعهدهندگان نصب میکنند، بدون اینکه محتوا یا مالک بسته مورد بررسی قرار گیرد.
توصیههای امنیتی برای توسعهدهندگان
- اگر از Trusted Publishing استفاده میکنید، دستور
npm trust listرا اجرا کرده و تأیید کنید که تمامی مخازن لیست شده همچنان تحت کنترل شما هستند. - هرگونه اتصال (Binding) که به مخازنی تغییر نام یافته یا منتقل شده اشاره دارد را حذف و دوباره ایجاد کنید.
- پیش از حذف هر مخزن، حتماً اتصال مربوط به آن را در npm حذف نمایید.
- از Provenance Attestation (گواهی اصالت) برای بررسی اینکه بسته واقعاً از مخزن مورد نظر شما منتشر شده است، استفاده کنید.