بدافزار SAP: چهار پکیج npm آلوده به سرقت اطلاعات توسعهدهندگان
خلاصهٔ کاملتر
در ۲۹ آوریل ۲۰۲۶، تیم SafeDep یه حمله زنجیره تامین جدی رو شناسایی کرد: چهار پکیج npm پرکاربرد مرتبط با SAP با نسخههای مخرب جدید منتشر شدن. این پکیجها که بخشی از اکوسیستم SAP CAP (Cloud Application Programming Model) و ابزار ساخت MTA هستن، در یه بازه سهساعته بهروزرسانی آلوده گرفتن.
پکیجهای آلوده عبارتند از: @cap-js/[email protected]، @cap-js/[email protected]، @cap-js/[email protected] و [email protected]. این چهار پکیج روی هم ماهانه حدود ۱.۲ میلیون نصب دارن و در پایپلاینهای CI/CD سازمانهای بزرگ مشتری SAP استفاده میشن. با توجه به اینکه دو مجموعه متفاوت از ناشران npm درگیرن، احتمال هک شدن حسابهای ناشر بسیار زیاده.
هر نسخه مخرب شامل دو فایل اضافهست که در نسخههای قبلی وجود نداشتن: setup.mjs که یه dropper برای رانتایم Bun هست، و execution.js که یه پیلود ۱۱ مگابایتی مبهمسازیشده برای سرقت اعتبارناهاست. مکانیزم اجرا از طریق تغییر scripts در package.json انجام شده و هوک preinstall جایگزین اسکریپتهای قبلی شده:
// @cap-js/sqlite: 2.2.1 vs 2.2.2
"preinstall": "node setup.mjs"
// mbt: 1.2.47 vs 1.2.48
"preinstall": "node setup.mjs"فایل setup.mjs در مرحله اول، رانتایم Bun نسخه ۱.۳.۱۳ رو از URL رسمی GitHub دانلود میکنه. این کار عمدیه — ترافیک به github.com نمیره روی بلاکلیستهای شبکه، در نتیجه فیلترهای خروجی اکثر سازمانها رو دور میزنه. بعد از دانلود، execution.js رو با Bun اجرا میکنه و دایرکتوری موقت رو پاک میکنه:
const url = `https://github.com/oven-sh/bun/releases/download/bun-v${BUN_VERSION}/${asset}.zip`;
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "bun-dl-"));
execFileSync(bunBinary, [entryScriptPath], { stdio: "inherit", cwd: SCRIPT_DIR });
fs.rmSync(tmpDir, { recursive: true, force: true });فایل execution.js یه فایل جاوااسکریپت تکخطی ۱۱ مگابایتیه که با نامهای متغیر هگزادسیمال مبهم شده. این فایل AWS SDK v3، Azure SDK، کتابخانههای GCP و کلاینت GitHub (Octokit) رو همه با هم داخل خودش داره. پیلود در سه فاز عمل میکنه: اول محیط CI/CD رو بررسی میکنه، بعد اعتبارنامهها رو جمع میکنه، و در آخر اگه در GitHub Actions باشه، ریپو رو آلوده میکنه.
برای جمعآوری اعتبارنامهها، اسکنرهایی با regexهای مشخص روی فایلسیستم و متغیرهای محیطی اجرا میشن:
'npmtoken': /npm_[A-Za-z0-9]{36,}/g,
'ghtoken': /gh[op]_[A-Za-z0-9]{36}/gعلاوه بر توکنهای GitHub و npm، بدافزار متغیرهای محیطی AWS مثل AWS_ACCESS_KEY_ID، AWS_SECRET_ACCESS_KEY و AWS_SESSION_TOKEN رو میخونه، فایل ~/.aws/credentials رو اسکن میکنه، و پوشش Azure Key Vault و GCP Secret Manager رو هم داره.
خطرناکترین بخش ماجرا اینه که اگه بدافزار در محیط GitHub Actions اجرا بشه و توکنی با دسترسی workflow پیدا کنه، فایلهای مخرب رو مستقیماً به ریپوی قربانی کامیت میکنه. این فایلها شامل یه .vscode/tasks.json میشن که دفعه بعد که ریپو باز بشه، حمله رو دوباره اجرا میکنه — یعنی یه foothold پایدار در CI/CD قربانی ایجاد میکنه. نام "A Mini Shai-Hulud has Appeared" که در هر کامیت دیده میشه، رشته توضیحاتیه که مهاجم استفاده کرده.
نکات کلیدی:
- چهار پکیج npm مرتبط با SAP (cap-js/db-service، cap-js/sqlite، cap-js/postgres، mbt) در ۲۹ آوریل ۲۰۲۶ با نسخههای مخرب منتشر شدن
- بدافزار از طریق هوک preinstall در npm اجرا میشه، حتی بدون نصب مستقیم پکیج
- مرحله اول: دانلود رانتایم Bun از GitHub رسمی برای فرار از فیلترهای شبکه
- مرحله دوم: سرقت توکنهای GitHub، npm، AWS، Azure و GCP
- مرحله سوم (در GitHub Actions): کامیت فایلهای مخرب به ریپوی قربانی و ایجاد persistence
- نشانگرهای اصلی: وجود فایلهای setup.mjs و execution.js در این پکیجها، یا tasks.json غیرعادی در مسیر .vscode یا .claude
- احتمالاً حسابهای ناشر npm هک شده، نه کدبیس اصلی SAP




