چگونه یک حمله بزرگ به NPM تنها با سرقت ۱۵۹ دلار پایان یافت

چگونه یکی از خطرناک‌ترین حملات به NPM تنها با سرقت 159 دلار پایان یافت
۱۸ شهریور ۱۴۰۴
~5 دقیقه خوانده شده

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

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

پیگیری کنید که قیمت بیت‌کوین چگونه به شوک‌های بازار واکنش نشان می‌دهد با Quickex.

چگونه حمله شکل گرفت

اولین کسی که در شب 8 سپتامبر گزارش داد چه اتفاقی در حال وقوع است، شارل گیوم، مدیر ارشد فناوری Ledger بود. او هشدار داد که حساب یک توسعه‌دهنده شناخته‌شده هک شده و نسخه‌های آلوده ابزارهایی مانند chalk، debug، ansi-styles و strip-ansi در NPM بارگذاری شده‌اند. این بسته‌ها اساس بیشتر برنامه‌های وب را تشکیل می‌دهند، بنابراین آلودگی می‌توانست کل اکوسیستم را تهدید کند.

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

NPM (Node Package Manager) بزرگ‌ترین کاتالوگ بسته‌های جاوااسکریپت است که توسعه‌دهندگان در آن ماژول‌های آماده کد را منتشر و دانلود می‌کنند. به عنوان مثال، chalk برای قالب‌بندی رنگی متن استفاده می‌شود، debug برای لاگ‌برداری، و ansi-styles و strip-ansi برای کار با کاراکترهای کنسول. زمانی که مهاجمان نسخه‌های جدید را منتشر کردند، این نسخه‌ها به طور خودکار در پروژه‌ها نصب شدند، مگر اینکه توسعه‌دهندگان نسخه‌های قبلی را ثابت کرده باشند.

با انتشار خبر حمله، پروژه‌های کریپتو به سرعت در شبکه‌های اجتماعی خود اعلام کردند که این حادثه بر آن‌ها تأثیری نداشته است.

کد مخرب چگونه کار می‌کرد

برنامه جاسازی‌شده مانند یک «کریپتو کلیپر» عمل می‌کرد — نوعی حمله که در آن آدرس کیف‌پول در تراکنش جایگزین می‌شود. کاربر فکر می‌کند پول را به حساب خود یا یک دوست ارسال می‌کند، اما در واقع پول به آدرس مهاجم می‌رود.

StarPlatinum مکانیزم را به تفصیل توضیح داد. به گفته او، کد دو حالت داشت.

  1. در حالت «غیرفعال»، آدرس‌ها مستقیماً در رابط کاربری برنامه‌ها جایگزین می‌شدند.
  2. در حالت «فعال»، تراکنش‌ها پیش از امضا رهگیری شده و جزئیات مقصد تغییر می‌کرد.

برای استتار، از الگوریتم لوِنشتاین استفاده می‌شد که رشته‌های مشابه را انتخاب می‌کرد: کاراکترهای اول و آخر آدرس مطابقت داشتند و این جایگزینی را تقریباً نامرئی می‌ساخت.

او همچنین حساب‌های مشخصی را ذکر کرد که وجوه سرقت‌شده قرار بود به آن‌ها منتقل شود: حساب اصلی 0xFc4a4858bafef54D1b1d7697bfb5c52F4c166976 و چندین آدرس ذخیره.

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

توسعه‌دهندگان برای اولین بار زمانی از مشکل مطلع شدند که بیلدهای خودکار شروع به شکست کردند. در لاگ‌ها خطاهای غیرمعمولی مانند «fetch is not defined» ظاهر می‌شد. بررسی نشان داد که کد مبهم‌سازی شده و توابع مشکوط مربوط به Ethereum و Solana وجود دارد.

چرا خسارت حداقلی بود

اگرچه ایده حمله خطرناک به نظر می‌رسید، در عمل کار نکرد. کد بیش از حد ناپایدار بود و فرایندهای بیلد را مختل می‌کرد. این امر به جامعه اجازه داد تا سریعاً ناهنجاری‌ها را شناسایی کرده و نسخه‌های آلوده را مسدود کند.

شارل گیوم بعداً توضیح داد که حمله عملاً شکست خورده است: قربانیان بسیار اندک بودند. به گفته او، کد مخرب تراکنش‌های کریپتو را هدف قرار داده و آدرس‌ها را مستقیماً در پاسخ‌های شبکه جایگزین می‌کرد، اما به دلیل اشتباهات هکر-توسعه‌دهندگان، به شکل غیرقابل پیش‌بینی عمل می‌کرد.

Arkham برآورد کرد که مهاجمان تنها موفق به سرقت 159 دلار شدند. این پول به کیف‌پول‌هایی منتقل شد که در گزارش‌های Ledger ذکر شده بودند. این مبلغ در مقایسه با مقیاس ریسک بالقوه ناچیز است، اما این حادثه نشان داد که اکوسیستم چقدر به یک بحران جدی نزدیک شده بود.

موجودی کیف‌پول کریپتوی مهاجمان، طبق داده‌های Arkham

نقش کیف‌پول‌های سخت‌افزاری

بیشترین ریسک متوجه کاربران کیف‌پول‌های نرم‌افزاری بود که تراکنش‌ها را مستقیماً در مرورگر امضا می‌کنند. در آنجا، جایگزینی آدرس تقریباً غیرقابل تشخیص بود. وضعیت برای کسانی که از دستگاه‌های سخت‌افزاری برای ذخیره کلیدها استفاده می‌کردند، کاملاً متفاوت بود.

یک کیف‌پول سخت‌افزاری تمام جزئیات تراکنش را روی صفحه نمایش خود نشان می‌دهد و تأیید با فشار یک دکمه فیزیکی انجام می‌شود. حتی اگر یک برنامه آدرس را جایگزین کند، دستگاه گیرنده واقعی را نمایش خواهد داد. یک کاربر هوشیار بلافاصله ناسازگاری را تشخیص می‌دهد و امضا را لغو می‌کند.

به گفته گیوم، ویژگی‌هایی مانند Clear Signing و بررسی‌های داخلی تراکنش‌ها، راهکارهای سخت‌افزاری را به یک سد کلیدی در برابر چنین حملاتی تبدیل می‌کنند.

درس برای جامعه کریپتو

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

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

توسعه‌دهندگان باید نسخه‌های وابستگی‌ها را ثابت کنند، از بیلدهای قابل بازتولید استفاده کنند و به‌دقت به‌روزرسانی ابزارهای پایه را بررسی کنند.

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

حساب‌های توسعه‌دهندگان در اکوسیستم NPM باید با کلیدهای امنیتی و احراز هویت چندمرحله‌ای محافظت شوند تا فیشینگ به نقض امنیت منجر نشود.

نتیجه‌گیری

حمله به NPM نشان داد که کل زیرساخت تا چه حد می‌تواند شکننده باشد: میلیاردها نصب به یک حساب بستگی داشت. این بار خسارت به 159 دلار محدود شد، اما دفعه بعد ممکن است متفاوت باشد.

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

بهترین نرخ مبادله ارز دیجیتال را در Quickex پیدا کنید.

 

0.0
(0 رتبه‌بندی‌ها)
برای امتیازدهی روی ستاره کلیک کنید

شما ارسال می‌کنید:

شما ارسال می‌کنید:

شبکه

شناور

شما دریافت می‌کنید:

شما دریافت می‌کنید:

شبکه