روابط عمومی شرکت ایدکو (توزیعکنندهی محصولات کسپرسکی در ایران)؛ بستههای پلتفرم محبوب ساخت و سیستم بهینهسازی CI/CD به نام Nx در شب ۲۶ تا ۲۷ اوت آلوده شدند. اسکریپتی مخرب به بستههای این سیستم اضافه شد؛ بستههایی که طبق آمار مخزن npm، بیش از پنج میلیون بار دانلود هفتگی دارند. هزاران توسعهدهنده که از Nx برای شتابدهی و بهینهسازی توسعه برنامهها استفاده میکردند، دادههای حساسشان به سرقت رفت: توکنهای npm و GitHub، کلیدهای SSH، کیف پولهای رمزارز و کلیدهای API همگی به مخازن عمومی GitHub آپلود شدند. این نشت گسترده دادههای محرمانه، تهدیدی بلندمدت برای حملات زنجیره تأمین محسوب میشود: حتی اگر بستههای مخرب از سیستمهای آلوده حذف شوند، مهاجمان همچنان ممکن است توانایی نفوذ به برنامههایی را داشته باشند که توسط این هزاران توسعهدهنده ساخته شدهاند.
جدول زمانی حمله و پاسخ
مهاجمان با استفاده از یک توکنِ سرقتی که برای یکی از نگهدارندگان بسته Nx صادر شده بود، در فاصله دو ساعته بین ساعت 22:32 به وقت UTC روز 26 اوت تا 0:37 روز 27 اوت، چندین نسخه مخرب از بسته Nx و افزونههای آن را منتشر کردند. دو ساعت بعد، پلتفرمnpm تمام نسخههای آلوده این بستهها را حذف کرد و یک ساعت بعد، مالکان Nx توکن سرقتشده را باطل کردند؛ در نتیجه، مهاجمان دسترسی خود به مخزن Nx را از دست دادند. در همین زمان، هزاران مخزن عمومی حاوی دادههای سرقتشده توسط اسکریپت مخرب، در GitHub ظاهر شدند.
ساعت 9:05 به وقت UTC روز 27 اوت، GitHub واکنش نشان داد و تمام مخازن درز کرده را خصوصی و غیرقابل جستوجو کرد. با این حال، دادههای سرقتشده بیش از 9 ساعت بهصورت عمومی در دسترس بودند و چندین بار توسط گروههای مجرمان سایبری و پژوهشگران دانلود شدند.
در مجموع، 19 نسخه آلوده از Nx و افزونههای آن منتشر شد:
- @nx: 20.9.0، 20.10.0، 20.11.0، 20.12.0، 21.5.0، 21.6.0، 21.7.0، 21.8.0
- @nx/devkit: 20.9.0، 21.5.0
- @nx/enterprise-cloud: 3.2.0
- @nx/eslint: 21.5.0
- @nx/js: 20.9.0، 21.5.0
- @nx/key: 3.2.0
- @nx/node: 20.9.0، 21.5.0
- @nx/workspace: 20.9.0، 21.5.0
چطور این حمله پا گرفت؟
برای مدت کوتاهی از تاریخ 21 اوت، کد Nx از یک جریان کار آسیبپذیر[1]استفاده میکرد که امکان تزریق کد دلخواه را فراهم میساخت. مهاجمان از این ضعف سوءاستفاده کردند و در تاریخ 24 اوت فایل publish.yml را تغییر دادند و توکن npm را استخراج کردند که دسترسی انتشار بستهها را فراهم میکرد. اگرچه این آسیبپذیری برطرف شد، اما نشت توکن تا زمان سوءاستفاده در حمله 26 اوت شناسایی نشد.
ویژگیها و اهداف بدافزار
بستههای Nx با استفاده از یک اسکریپت مخرب پس از نصب به نام telemetry.js آلوده شدند. این اسکریپت محیطهای توسعه روی macOS و سیستمهای مبتنی بر *nix را هدف قرار میدهد (در صورت اجرا روی ویندوز، اسکریپت مخرب بلافاصله متوقف میشود).
پس از اجرا، اسکریپت سیستم آلوده را برای یافتن انواع دادههای زیر جستوجو میکند:
- ذخیرهسازهای کلید و کیفپولهای رمزارزی MetaMask، Electrum، Ledger، Trezor، Exodus، Phantom، Solflare
- فایلهای تصادفی ذخیرهسازی کلید ( *key، *keystore.json، UTC–، IndexedDB)
- توکنهای احراز هویت شخصی GitHub
- توکنهای دسترسی npm
- فایلهای .env
- کلیدهای خصوصی (id_rsa) RSA
شایان ذکر است که برای انجام جستوجوها از ابزارهای خط فرمان مدلهای زبانی بزرگ (LLM) محبوب استفاده شده بود. اگر ابزارهای CLI مربوط به Anthropic Claude، Amazon Q یا Google Gemini روی سیستم نصب بودند، اسکریپت یک پرسوجوی ناامن اجرا میکرد که شامل یافتن همه انواع دادههای ذکرشده میشد. تمام دادههای یافتشده به صورت مبهمشده (چندین بار رمزگذاریشده با base64 در GitHub آپلود میشد. بدافزار برای این کار از توکنهای سرقتشده GitHub استفاده میکرد و به نمایندگی از قربانی یک مخزن عمومی با نامهای s1ngularity-repository، s1ngularity-repository-0 یا s1ngularity-repository-1 ایجاد کرده و یک فایل واحد به نام results.b64 را در آن بارگذاری میکرد. به نظر میرسد مهاجمان قصد دارند به سرعت از دادههای سرقتشده بهرهبرداری کنند؛ چرا که اسکریپت مخرب هیچ تلاشی برای پنهانکاری نکرده و برعکس، بهطور تهاجمی تلاش میکرد قربانی را از دسترسی به سیستمهای کاری محروم کند. برای این منظور، فرمان sudo shutdown به فایلهای ~/.bashrc و ~/.zshrc اضافه میشد و در نتیجه، هر نشست جدید ترمینال بلافاصله منجر به خاموش شدن سیستم میگردید.
چگونه سیستمهای خود را آزمایش کنید؟
سازمانهایی که از Nx استفاده میکنند باید نسخههای بستههای خود را بررسی کرده و حسابهای GitHub و لاگها را ممیزی کنند.
- با دستور npm ls nxنسخههای بسته Nx در حال استفاده را بررسی کنید.
- وجود هرگونه بسته Nx را در فایل package-lock.jsonبررسی کنید.
- لاگهای GitHub را برای رویدادهای امنیتی بررسی کنید.
اگر مخازنی با نام s1ngularity-repository* پیدا شد، فایلهای results.b64 را برای بررسی بیشتر دانلود کرده و سپس آنها را از GitHub حذف کنید.
هنگام شناسایی مخازن مخرب اقدامات زیر را انجام دهید:
- پوشه node_modules را به طور کامل حذف کنید:
rm -rf node_modules
- کش npm را پاک کنید:
npm cache clean --force
- فایلهای ~/.bashrc و ~/.zshrc را بررسی کرده و دستورات اضافی را پاک کنید.
- یک نسخه آرشیو برای بررسی تهیه کرده و فایلهای/tmp/inventory.txt و /tmp/inventory.txt.bak را از سیستم حذف کنید.
- نسخههای مخرب بستهها را از فایل package-lock.json حذف کنید.
- نسخههای امن بستهها را دوباره نصب کنید.
مهمترین و فوریترین اقدام برای سیستمهای آلوده، بهروزرسانی تمام اسراری است که ممکن است بدافزار به آنها دسترسی پیدا کرده باشد، از جمله توکنهای شخصی GitHub (PAT)، توکنهای npm، کلیدهای SSH، کلیدهای API موجود در فایلهای .env و کلیدهای Claude، Gemini و Q. همچنین باید به نظارت بر مخازن GitHub خود ادامه دهید. اول اینکه، حتی پس از انجام تمام این مراحل، ممکن است نسخههای تروجانزده Nx روی سیستمهای آلوده باقی مانده باشند که همچنان اطلاعات سرقتشده را دانلود میکنند. دوم اینکه، اگر مهاجمان پیش از تغییر توکنها موفق به استفاده از آنها شده باشند، این احتمالاً در قالب کامیتهای غیرمجاز یا تغییرات مخرب در GitHub Actions خود را نشان خواهد داد.
[1] GitHub Action Workflow
کسپرسکی آنلاین (ایدکو)
کسپرسکی اسم یکی از بزرگترین شرکتهای امنیتی و سازنده آنتی ویروس است که برخی از کاربران اشتباهاً این شرکت و محصولات آنتی ویروس آن را با عناوینی نظیر کسپرسکای،کاسپرسکی، کسپراسکای، کسپراسکای، و یا کاسپراسکای نیز میشناسد. همچنین لازم به ذکر است مدیرعامل این شرکت نیز یوجین کسپرسکی نام دارد.