حمله زنجیره تأمین به پکیجهای TanStack در npm
خلاصهٔ کاملتر
یه گزارش جزئی (Postmortem) از تیم TanStack منتشر شده که شرح میده چطور یه مهاجم در تاریخ ۱۱ مه ۲۰۲۶، بین ساعت ۱۹:۲۰ تا ۱۹:۲۶ UTC، ۸۴ نسخه مخرب از ۴۲ پکیج @tanstack رو در npm ثبت کرد. جالب اینجاست که هیچ توکن npmای دزدیده نشد؛ بلکه مهاجم از سه آسیبپذیری زنجیری در GitHub Actions استفاده کرد.
مهاجم اول یه fork از مخزن TanStack/router ساخت و یه commit مخرب شامل یه فایل JS سیهزار خطی رو روی اون push کرد. بعد یه Pull Request به مخزن اصلی فرستاد. چون workflow های bundle-size.yml و labeler.yml از نوع pull_request_target بودن، بدون تأیید دستی اجرا شدن — این همون الگوی معروف "Pwn Request" هست. وقتی این workflow ها روی سرور اصلی اجرا شدن، فایل مخرب هم اجرا شد.
در مرحله بعد، بدافزار یه cache مسموم (Cache Poisoning) با کلید دقیقاً منطبق با workflow انتشار اصلی (release.yml) در GitHub Actions ذخیره کرد. مهاجم بعد از این کار، PR رو به یه diff صفر-فایله تبدیل کرد و بست — اما cache مسموم باقی موند.
وقتی یه maintainer واقعی چند ساعت بعد یه PR بیربط رو merge کرد، release.yml اجرا شد، همون cache مسموم رستور شد، و بدافزار این بار یه OIDC token (توکن هویت بدون نیاز به رمز ثابت) رو مستقیم از حافظه پروسه runner استخراج کرد و با اون به npm publish زد — بدون اینکه step رسمی انتشار اصلاً اجرا بشه.
بدافزار هنگام npm install فعال میشد و این کارها رو میکرد:
- سرقت اعتبارنامه از AWS، GCP، Kubernetes، Vault، GitHub، npm و SSH
- ارسال دادهها از طریق شبکه پیامرسان Session (رمزنگاری سرتاسر، بدون C2 مستقیم)
- خودگسترشی: پکیجهای دیگه قربانی رو هم آلوده میکرد
محقق خارجی ashishkurmi از شرکت StepSecurity حدود ۲۰ دقیقه بعد از انتشار، ماجرا رو کشف و گزارش داد. پکیجهای آلوده deprecated شدن و npm security درخواست حذف tarballها رو دریافت کرده. پکیجهای @tanstack/query، @tanstack/table، @tanstack/form، @tanstack/virtual و @tanstack/store آسیب ندیدن.
نکات کلیدی:
- حمله بین ۱۹:۲۰ تا ۱۹:۲۶ UTC در تاریخ ۲۰۲۶-۰۵-۱۱ رخ داد
- ترکیب سه تکنیک: Pwn Request + Cache Poisoning + استخراج OIDC token از حافظه
- هیچ توکن npm دزدیده نشد؛ انتشار با OIDC trusted-publisher انجام شد
- بدافزار در مرحله
npm installو از طریقoptionalDependenciesفعال میشد - به نصبکنندههای ۱۱ مه توصیه میشه فوری همه اعتبارنامهها رو rotate کنن
- پکیجهای query، table، form، virtual و store آسیب ندیدن




