حمله زنجیره تأمین به پکیجهای TanStack در npm
خلاصهٔ کاملتر
در یازدهم مه ۲۰۲۶، یک حمله پیچیده زنجیره تأمین (Supply Chain Attack) به پکیجهای TanStack در npm رخ داد. مهاجم بین ساعت ۱۹:۲۰ تا ۱۹:۲۶ UTC، دقیقاً ۸۴ نسخه مخرب از ۴۲ پکیج @tanstack/* را منتشر کرد. نکته جالب اینه که هیچ توکن npmای دزدیده نشد — مهاجم از مسیر کاملاً متفاوتی وارد شد.
سه تکنیک ترکیبی این حمله رو ممکن کردن: اول، سوءاستفاده از الگوی «Pwn Request» در pull_request_target گیتهاب که بدون نیاز به تأیید contributor اجرا میشه؛ دوم، مسمومسازی کش GitHub Actions در مرز اعتماد fork↔base؛ و سوم، استخراج توکن OIDC مستقیماً از حافظه runner در زمان اجرا.
فاز آمادهسازی: مهاجم یک fork از TanStack/router ساخت و یک کامیت مخرب حاوی فایل vite_setup.mjs (یک پیلود ۳۰٬۰۰۰ خطی) رو روی PR قرارداد. چون workflow های pull_request_target بدون تأیید اجرا میشن، این کد اجرا شد و یک کش ۱.۱ گیگابایتی مسموم با کلیدی که workflow اصلی release.yml بهش نیاز داشت، ذخیره کرد. بعد مهاجم PR رو به حالت بیخطر برگردوند و بست — ولی کش مسموم باقی موند.
فاز انفجار: وقتی یک PR معمولی به شاخه main مرج شد، release.yml اجرا شد و کش مسموم رو بارگذاری کرد. بدافزار در همون لحظه یک توکن OIDC از runner استخراج کرد و مستقیماً با اون توکن پکیجها رو در npm منتشر کرد — بدون اینکه حتی مرحله publish رسمی workflow اجرا بشه.
بدافزار چیکار میکنه؟ هر کسی که روز ۱۱ مه npm install زده باشه و نسخه آلوده رو گرفته باشه، باید سیستم رو در معرض خطر بدونه. بدافزار یک فایل ۲.۳ مگابایتی مبهمسازیشده اجرا میکنه که:
- اطلاعات AWS IMDS، GCP metadata، توکنهای Kubernetes و Vault، کلیدهای SSH و فایلهای
.npmrcرو جمعآوری میکنه - دادهها رو از طریق شبکه رمزنگاریشده Session/Oxen exfiltrate میکنه (مسدود کردن IP/دامین تنها راه شبکهایه)
- خودش رو تکثیر میکنه: پکیجهای دیگهای که قربانی نگهداری میکنه رو پیدا میکنه و همون injection رو بهشون اضافه میکنه
پکیجهای @tanstack/query*، @tanstack/table*، @tanstack/form*، @tanstack/virtual*، @tanstack/store و متاپکیج @tanstack/start آلوده نشدن. حمله در کمتر از ۲۰ دقیقه توسط محقق خارجی ashishkurmi از StepSecurity شناسایی شد. همه نسخههای آلوده deprecated شدن و npm security برای حذف تاربالها از registry درگیر شده.
اگر ۱۱ مه پکیجهای TanStack رو نصب کردی، همه credential های قابل دسترس از روی اون هاست رو rotate کن: AWS، GCP، Kubernetes، Vault، GitHub، npm، و SSH.
نکات کلیدی:
- حمله بین ۱۹:۲۰ تا ۱۹:۲۶ UTC انجام شد، ۸۴ نسخه از ۴۲ پکیج رو آلوده کرد
- هیچ توکن npmای دزدیده نشد؛ مهاجم از توکن OIDC runner سوءاستفاده کرد
- بدافزار هنگام
npm installاجرا میشه و خودش رو هم تکثیر میکنه - پکیجهای query، table، form، virtual و store آسیب ندیدن
- هر کسی که نسخه آلوده نصب کرده باید همه credential ها رو rotate کنه




