۱۸ پکیج معروف جاوااسکریپت هک شدن تا کریپتو بدزدن!

همین چند وقت پیش یه اتفاق خیلی عجیب بر سر بعضی از معروف‌ترین پکیج‌های کدِ جاوااسکریپت افتاد که هر هفته جمعاً بیشتر از دو میلیارد بار دانلود میشن! داستان از اون‌جایی شروع شد که یکی از برنامه‌نویس‌هایی که این پکیج‌ها رو نگهداری می‌کنه، فیشینگ شد — یعنی یه ایمیل تقلبی بهش زدن و اطلاعات ورودش رو کش رفتن. حالا فیشینگ رو نمی‌دونین؟ فیشینگ یعنی یکی سعی کنه با یه ایمیل جعلی یا سایت قلابی، شما رو گول بزنه تا مثلاً رمزتون رو بهش بدین.

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

داستان از این قرار بود که کارشناس‌های شرکت امنیتی آیکیدو (Aikido) بلژیک — که خیلی روی پکیج‌های متن‌باز و اوپن سورس حساس هستن و همیشه کدها رو برای چیزای مشکوک اسکن می‌کنن — متوجه شدن حداقل ۱۸ تا از پکیج‌هایی که توی NPM (یعنی Node Package Manager؛ مخزن مرکزی همه پکیج‌های جاوااسکریپت) قرار دارن، آلوده به کد مخرب شدن.

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

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

کارشناسان آیکیدو گفتن که هکرها یه تیکه کد اضافه کردن که توی مرورگر کاربرها قایمکی دنبال تراکنش‌های کریپتو می‌گرده، کیف پول رو دستکاری می‌کنه و کاری می‌کنه که پول به جای رفتن به آدرس درست، مستقیم بره تو کیف خود هکر! همه این کارها هم بدون اینکه کاربر بفهمه، انجام میشه.

طبق حرفای چارلی اریکسن (یکی از محقق‌های آیکیدو)، این بدافزار فقط یه اسنیفر معمولی نبود! قابلیت داشت هم اطلاعاتی که تو سایت به کاربر نشون داده میشه رو تغییر بده، هم توی تماس‌های API (ارتباط‌های نرم‌افزاری بین اجزای مختلف برنامه‌ها) دست ببره، هم کاری کنه که حتی اگه ظاهر یه تراکنش درست به نظر بیاد، توی پشت‌زمینه پول به هکر بره. خلاصه خیلی موذیانه!

جالب اینجاست که هکرها توی این کمپین، با یک ایمیل فیک که شبیه NPM بود، برنامه‌نویسی به اسم Josh Junon رو خام کردن. ایمیلشون زده بود که بیا 2FA (همون احراز هویت دو مرحله‌ای) رو آپدیت کن. سایت جعلی عین NPM درست کرده بودن، رمز و توکن 2FA رو هم قشنگ دزدیدن، بعد حتی ایمیل حسابش رو عوض کردن تا یه مدت دسترسی نداشته باشه. نکته: 2FA یعنی برای ورود علاوه بر رمز یه کدمُوقتی هم باید بزنی که امنیت حسابت بره بالا.

خود Josh هم توی شبکه‌های اجتماعی مثل Bluesky و HackerNews یکی دو ساعت بعد سریع اعتراف کرد و گفت: «آره دیگه، گول خوردم! ببخشید بچه‌ها، خیلی خجالت‌آوره!» و شروع کرد به تمیزکاری و درست کردن ماجرا.

طبق گفته فیلیپ کاتورگلی — که به قول خودش “chief hacking officer” (یعنی رئیس هکری!) یه شرکت مشاوره امنیتی هست — دامنه فیکشون (npmjs.help) رو فقط دو روز قبل گرفتن و با یه سرویس دامین رایگان وصلش کرده بودن به هر آی‌پی دلشون می‌خواست. این یعنی دقیقاً واسه همین حمله ساخته بودن.

فیلیپ کلاً از این قضیه تعجب کرده بود که با اینکه میلیاردها سایت رو تحت تأثیر قرار دادن، اما فقط دنبال دزدی کریپتو بودن و از آسیب جدی‌تر زدن به همه دنیا صرف‌نظر کردن! اسم چنین ماجراهایی حمله Supply-chain یا زنجیره تأمین ـیه؛ یعنی حمله به بخشی از زنجیره تامین نرم‌افزار که خیلیا دارن ازش استفاده می‌کنن و اگه آلوده شه، آب میره تو همهٔ زندگی فناوریمون!

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

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

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

در نهایت، کوین بومونت که یکی از متخصص‌های پرحرف امنیتیه و تو وبلاگش doublepulsar.com درباره این جور قضایا زیاد می‌نویسه، اومد یه نکته مهم رو یادآوری کرد: واقعیت اینه که کل اینترنت هنوز روی کدهایی می‌چرخه که در نهایت دست چند نفر آدم خسته و بی‌پول نگه داشته شده — و هرچی شرکت‌ها بیشتر به این ابزارها وابسته می‌شن، کار برای هکرها هم آسون‌تر میشه. خودش مثال زده بود: «تو این سال‌ها همه شرکتا نرم‌افزار می‌نویسن، اما از تعداد محدودی کتابخونه کد استفاده می‌کنن که همش رو چند نفر توی خونه‌شون تو اسکگنس نوشته‌ن. اگه یکی رو فیش کنن، کل شرکتای دنیا رو می‌تونن هک کنن!»

حالا آیکیدو اومده یه محصول جدید معرفی کرده که قبل از نصب یا استفاده از هر کتابخونه مطمئن میشه اون پکیج آلوده نیست. نیکولاس ویور، یکی دیگه از کارشناسان امنیت، معتقده تا وقتی که مسئولای این کتابخونه‌های مهم هنوز روی 2FAهایی حساب می‌کنن که میشه فیششون کرد، مشکل حل نمیشه. راه درستش اینه که همه بیان سراغ احراز هویت غیرقابل فیشینگ یا به اصطلاح “phish-proof” — مثل کلیدهای امنیتی فیزیکی؛ یعنی حتی اگه رمز و یوزرنیم هم لو بره، بدون اون کلید سخت‌افزاری نمی‌تونی لاگین کنی.

در آخر: هر نرم‌افزاری که خیلیا بهش وابسته‌ن باید احراز هویت ضدفیشینگ داشته باشه، وگرنه هنوز تا فاجعهٔ بعدی فقط یه ایمیل فیشینگ فاصله داریم! پس اگه با نرم‌افزار سروکار دارین، لطفاً حواستون خیلی جمع باشه؛ امنیت رو جدی بگیرین، به خصوص وقتی قراره یه کاری رو open source بذارین یا برنامه‌های معروف رو آپدیت کنین.

منبع: +