npm ورژن ۱۲ و یکی از مهمترین تغییرات امنیتی سال‌های اخیر

npm ورژن ۱۲ و یکی از مهمترین تغییرات امنیتی سال‌های اخیر

npm ورژن ۱۲ و یکی از مهمترین تغییرات امنیتی سال‌های اخیر

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

در نسخه جدید npm یعنی npm ورژن ۱۲ قراره یک تغییر مهم در همین رفتار ایجاد بشه. تغییری که می‌تونه امنیت کل اکوسیستم جاوااسکریپت رو تا حد زیادی افزایش بده.

در این نسخه، اجرای خودکار اسکریپت‌های نصب مانند preinstall، install و postinstall به‌صورت پیش‌فرض متوقف میشن. این تصمیم در واکنش به موج بزرگی از حملات Supply Chain در سال‌های اخیر گرفته شده.


⭕️ npm ورژن ۱۲ چه تغییری ایجاد میکنه؟

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

برای مثال:

  • preinstall
  • install
  • postinstall

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

در npm ورژن ۱۲ این رفتار تغییر میکنه. از این به بعد فقط پکیج‌هایی که در یک Allowlist قرار گرفته‌ان اجازه اجرای اسکریپت نصب رو دارن.

توسعه‌دهندها می‌تونن با استفاده از این دستورات این لیست رو مدیریت کنن:

  • npm approve-scripts
  • npm deny-scripts

در نتیجه، اگر یک پکیج ناشناس یا مخرب اسکریپت نصب داشته باشه، npm به‌صورت پیش‌فرض اون اسکریپت رو اجرا نمیکنه.


⭕️ چرا اسکریپت‌های postinstall خطرناک هستن؟

در سال‌های اخیر بسیاری از حملات امنیتی در npm از طریق postinstall scripts انجام شدن.

در این نوع حمله، مهاجم اول کنترل یک پکیج معتبر رو به دست میاره. مثلاً با:

  • فیشینگ اکانت maintainer
  • سرقت publish token
  • نفوذ به مخزن

بعد نسخه جدیدی از پکیج منتشر می‌کنه که درونش یک اسکریپت postinstall اضافه شده.

وقتی توسعه‌دهندها پروژه خودشون رو نصب می‌کنن، این اسکریپت به‌صورت خودکار اجرا میشه و می‌تونه:

  • توکن‌های GitHub رو سرقت کنه
  • کلیدهای SSH رو بخونه
  • credentialها رو استخراج کنه
  • یا بدافزار دانلود کنه

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


⭕️ نمونه‌هایی از حملات بزرگ npm

در یک سال گذشته چند حمله بزرگ از همین روش استفاده کردن:

Nx s1ngularity – 2025 👾

در این حمله یک نسخه آلوده از پکیج Nx منتشر شد که هنگام نصب، اطلاعات حساسی مثل:

  • توکن‌های GitHub
  • credentialهای npm
  • کلیدهای SSH
  • کیف پول‌های کریپتو

رو جمع‌آوری می‌کرد.


Shai‑Hulud – 2025 👾

یک کرم خودتکثیرشونده که صدها پکیج مختلف رو آلوده کرد و در زمان نصب، ابزارهایی برای استخراج secretها اجرا می‌کرد.


Axios hijack – 2026 👾

در این حمله یک وابستگی مخرب منتشر شد که تنها وظیفه‌اش اجرای یک اسکریپت postinstall برای نصب یک RAT (Remote Access Trojan) بود. این موضوع بسیار خطرناک بود چون axios حدود ۱۰۰ میلیون دانلود در هفته داره.


⭕️ تغییرات امنیتی دیگه در npm ورژن ۱۲

در کنار محدود کردن اسکریپت‌های نصب، چند تغییر مهم دیگه هم اضافه شده.

◉ محدود شدن وابستگی‌های گیت

از این به بعد وابستگی‌هایی که مستقیماً از Git نصب میشن، فقط در صورت استفاده از این فلگ اجازه نصب دارن:

--allow-git

این کار جلوی برخی مسیرهای مخفی اجرای کد رو میگیره.


◉ محدود شدن Remote URL dependencies

اگر پکیجی از طریق یک URL خارجی نصب بشه (مثل tarball)، npm تنها در صورتی اجازه میده که این فلگ فعال باشه:

--allow-remote

این تغییر مانع میشه که مهاجم‌ها payload خودشون رو از سرورهای خارجی بارگذاری کنن.


◉ کنترل buildهای native

برخی پکیج‌ها فایل binding.gyp دارن که باعث اجرای خودکار node-gyp موقع نصب میشه. حتی اگر در package.json هیچ اسکریپتی تعریف نشده باشه، این build می‌تونه کد اجرا کنه.

در npm ورژن ۱۲ این مورد هم مانند یک اسکریپت نصب در نظر گرفته میشه و بدون تأیید اجرا نخواهد شد.


⭕️ این تغییر چه تاثیری روی توسعه‌دهنده‌ها داره؟

برای بسیاری از پروژه‌ها این تغییر به معنی امنیت بیشتر هست، اما ممکنه در ابتدا باعث بشه برخی پکیج‌ها به‌درستی نصب نشن.

چرا که بعضی پکیج‌های معتبر از اسکریپت‌های نصب برای موارد زیر استفاده میکنن:

  • build ماژول‌های native
  • دانلود باینری‌ها
  • تنظیم محیط اجرا

در این حالت باید اون پکیج‌ها رو به لیست تأیید اضافه کنیم.


⭕️ چه کارهایی باید از الان انجام بدیم؟

اگر از npm استفاده میکنی بهتره قبل از انتشار npm ورژن ۱۲ چند کار ساده انجام بدی:

  1. npm را به نسخه ۱۱.۱۶ یا بالاتر آپدیت کن
  2. این دستور رو اجرا کن:
npm approve-scripts --allow-scripts-pending
  1. پکیج‌های قابل اعتماد رو تأیید کن
  2. تغییرات رو در پروژه commit کن

با این کار پروژه‌ات از همین حالا برای تغییرات npm ورژن ۱۲ آماده میشه.


⭕️ جمع‌بندی

نسخه npm ورژن ۱۲ یکی از مهمترین به‌روزرسانی‌های امنیتی این ابزار در سال‌های اخیر محسوب میشه.

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

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


اگر میخوای در مورد دیگر بروزرسانی‌های دنیای جاوااسکریپت بدونی میتونی این مقاله رو در مورد بروزرسانی فوق‌االعاده اخیر نکست جی اس بخونی :

Next.js ۱۶.۲ منتشر شد 🎉 جهش بزرگ در سرعت، رندر و ابزارهای هوش مصنوعی


npm ورژن ۱۲ و یکی از مهمترین تغییرات امنیتی سال‌های اخیر

در مشکلات امنیتی که اوایل توسط npm پیش اومد به پروژه‌هات ضربه‌ایی وارد شد ؟

دیدگاه‌ها ۲
ارسال دیدگاه جدید