بازگشت به وبلاگ

۸۴۶ بسته مخرب npm: چرا کمپین Flooding Dropper برای تیم‌های اسکرپینگ خطرناک است

5 اوت 2026 Sonatype در npm کمپین Flooding Dropper را ثبت کرد - 846 بسته مخرب (تا 11 اوت تعداد به 1033 افزایش یافت). بارگذار چندسکویی متغیرهای محیطی، اعتبارنامه‌ها و نشست‌ها را پاک می‌کند. مکانیک کمپین را بررسی می‌کنیم و اینکه چرا برای تیم‌های پارسینگ این هزینه‌برتر از نشت معمولی رمز عبور است: همراه با .env اعتبارنامه‌های پروکسی، نشست‌های کوکی و پروفایل‌های مرورگرهای ضد شناسایی نیز از بین می‌روند.

📅۲۱ مرداد ۱۴۰۵
۸۴۶ بسته مخرب npm: چرا کمپین Flooding Dropper برای تیم‌های اسکرپینگ خطرناک است
```html

۵ اوت ۲۰۲۶ سال، محققان Sonatype در npm یک کمپین را ثبت کردند که آن را Flooding Dropper نامیدند: ۸۴۶ مؤلفه مخرب که با ده‌ها حساب کاربری یکبار مصرف منتشر شده‌اند. پس از یک هفته، شمارش افزایش یافت — در داده‌های به‌روزرسانی شده OpenSourceMalware، که همان کمپین را تحت نام WEL1DROPPER پیگیری می‌کند، اکنون ۱۰۳۳ بسته تأیید شده وجود دارد. درون آن — یک بارگذار چندسکویی که مرحله دوم را تحت ویندوز، macOS و لینوکس بارگیری می‌کند و همه چیز را از ماشین توسعه‌دهنده پاک می‌کند: متغیرهای محیطی، اعتبارنامه‌ها، نشست‌ها.

برای تیم‌هایی که بر روی پارسینگ و اتوماسیون زندگی می‌کنند، این «یک خبر دیگر درباره npm» نیست. استک اسکرپینگ دقیقاً npm است: Playwright، Puppeteer، Crawlee، پوشش‌هایی بر روی پروکسی‌اجنت‌ها، پارسرهای HTML، صف‌ها. و در همان ماشینی که همه این‌ها توسط یک تیم نصب می‌شود، معمولاً یک .env با نام کاربری و رمز عبور پروکسی‌پول، کوکی‌جار نشست‌ها و پروفایل‌های مرورگر ضد شناسایی وجود دارد. بیایید بررسی کنیم که چه اتفاقی افتاده و چه نتیجه‌ای از این موضوع می‌توان گرفت.

چه چیزی درباره کمپین شناخته شده است

Sonatype کمپینی را تحت شناسه sonatype-2026-005660 با ارزیابی CVSS ۸.۷ و طبقه‌بندی CWE-506 (کد مخرب وارد شده) رهبری می‌کند. نشانه‌های مشخصی که محققان بسته‌ها را به یک گروه مرتبط کردند:

  • تولید خودکار نام‌ها. نام‌ها از طریق درون‌سازی اصطلاحات تکراری جمع‌آوری می‌شوند — در گزارش «bigops» و «bnpl» ذکر شده است، نمونه‌هایی مانند bigops-api و پیوندهای طولانی مانند dolyame-boxy-desktop-bnpl-card-gallery. OpenSourceMalware این را به عنوان «AI slop squatting» توصیف می‌کند — تایپ‌اسکواتینگ انبوه با نام‌های تصادفی به جای جعل دقیق برای یک بسته محبوب.
  • نسخه‌ها از یک دامنه. انتشارها در اطراف ۳۵.x.y تجمع می‌کنند — شماره‌های غیرمعمولاً بالایی برای بسته‌هایی بدون تاریخچه.
  • پخش در حساب‌ها. هر حساب یک دسته کوچک از بسته‌ها را منتشر می‌کند، بنابراین مسدود کردن یک ناشر عملیات را متوقف نمی‌کند.

مکانیسم راه‌اندازی به طور متفاوتی توصیف شده است و این تفاوت مهم است. Sonatype می‌نویسد که کد «هنگام نصب یا وارد کردن» بسته فعال می‌شود. OpenSourceMalware توضیح می‌دهد: برخی از نمونه‌ها بدون هک‌های چرخه زندگی کلاسیک کار می‌کنند و نیاز دارند که توسعه‌دهنده خود بسته را از طریق require() متصل کند. نتیجه عملی این است: تکیه فقط بر --ignore-scripts شما را نجات نمی‌دهد — اگر وابستگی واقعاً در کد وارد شود، بار مفید اجرا خواهد شد.

چگونه مرحله دوم تحویل داده می‌شود

بارگذار payload را از طریق HTTPS از یک میزبان تصادفی از لیست پنهان شده بارگیری می‌کند — به گفته The Hacker News، نقاط تحویل سه دامنه در Cloudflare Workers بودند. اگر بارگیری مستقیم موفق نشود، یک کانال پشتیبان فعال می‌شود: بار مفید از DNS TXT-records دامنه wel1.ru با زیر دامنه‌های پلتفرم (sdk.dl، ext.dl، pkg.dl، net.dl) جمع‌آوری می‌شود. یعنی فیلتر خروجی بر اساس دامنه‌های HTTP با درخواست‌های DNS معمولی دور زده می‌شود — و در شبکه‌های شرکتی تعداد کمی از آن‌ها را قطع می‌کنند.

سپس — بر روی پلتفرم‌ها:

  • ویندوز: ETW و AMSI وصله می‌شوند (یعنی تلمتری و بررسی آنتی‌ویروس اسکریپت‌ها خاموش می‌شود)، تثبیت از طریق کلیدهای راه‌اندازی خودکار در رجیستری و وظایف برنامه‌ریز، فایل‌ها در AppData.
  • macOS: همان تکنیک‌های اجتناب، تثبیت از طریق LaunchAgent. در بارگذاری macOS، محققان دامنه‌های خدمات مالی روسی (tcsbank.ru، cloudpayments.ru) را پیدا کردند — نشانه‌ای از علاقه هدفمند به نشست‌های بانکی کاربران روسی‌زبان.
  • لینوکس: باینری UPX ELF بسته‌بندی شده، که عامل فریمورک Sliver را راه‌اندازی می‌کند — این دیگر یک کانال C2 کامل است، نه یک سرقت یک‌باره.

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

چرا این به ویژه بر روی تیم‌های پارسینگ تأثیر می‌گذارد

اینفواستیلر «مهم» و «غیرمهم» را تشخیص نمی‌دهد — او هر چیزی را که شبیه به راز است می‌گیرد. برای کاربر عادی این رمزهای عبور از مرورگر و کیف پول رمزنگاری است. برای کسی که به جمع‌آوری داده‌ها مشغول است، مجموعه جوایز متفاوت و به‌راستی خوشمزه‌تر است:

  • متغیرهای محیطی و .env — در اینجا تقریباً همیشه میزبان پروکسی‌گیت، نام کاربری، رمز عبور و پارامترهای نشست (کشور، شهر، شناسه چسبنده) وجود دارد. استخراج متغیرهای محیطی به وضوح در تجزیه و تحلیل کمپین ذکر شده است.
  • کوکی‌ها و توکن‌های نشست. نشست دزدیده شده — این دور زدن MFA است: کوکی به خودی خود دلیلی است که نشان می‌دهد مرحله دوم را قبلاً گذرانده‌اند. لاگ‌های با توکن‌های معتبر به خدمات کاری در بازارهای سیاه از ۵ دلار به فروش می‌رسند.
  • پروفایل‌های مرورگرهای ضد شناسایی — ترکیب «کوکی + اثر انگشت + پروکسی»، یعنی یک حساب کاربری کاری آماده که نیازی به گرم کردن ندارد.
  • توکن‌های CI/CD، npm و ابر — دسترسی نه تنها به ماشین شما، بلکه به پایپ‌لاین، جایی که می‌توان از آنجا ساخت‌های شما را ارسال کرد.

مقیاس این پدیده دیگر یک پدیده نیش نیست. SpyCloud در گزارش سال ۲۰۲۶ تعداد ۱۸.۱ میلیون کلید API و توکن‌های افشا شده را شمارش کرده است که به‌طور خاص از لاگ‌های بدافزار به‌دست آمده‌اند. به گفته Recorded Future و Flashpoint، در سال ۲۰۲۵، اینفواستیلرها ۱۱.۱ میلیون ماشین را آلوده کردند و ۳.۳ میلیارد حساب کاربری دزدیده شده را ارائه دادند. و در گزارش Sonatype درباره وضعیت زنجیره تأمین نرم‌افزار برای سال ۲۰۲۶، بیش از ۴۵۴,۶۰۰ بسته مخرب جدید در یک سال ۲۰۲۵ و به‌طور تجمعی بیش از ۱,۲۳۳ میلیون مسدود شده وجود دارد — رشد ۷۵٪ نسبت به سال قبل. Flooding Dropper یک ناهنجاری نیست، بلکه یک قسمت عادی از جریان است.

چه چیزی صاحب حساب پروکسی را از دست می‌دهد

به‌طور جداگانه به موضوعی اشاره می‌کنم که در تجزیه و تحلیل‌های امنیتی معمولاً نوشته نمی‌شود، زیرا نویسندگان با پروکسی کار نمی‌کنند. اعتبارهای پروکسی نشت کرده — این «از دست دادن رمز عبور» نیست، بلکه سه مشکل همزمان است:

  1. ترافیک پرداخت شده. ترافیک مقیم و موبایل بر اساس گیگابایت محاسبه می‌شود. پارسر دیگر بر روی اعتبارهای شما — این حساب شماست، و ممکن است متوجه آن شوید که خیلی دیرتر از آنچه که می‌خواستید.
  2. شهرت دیگران بر روی IP‌های شما. مهاجم به یک خروجی «پاک» خانگی نیاز دارد تا فعالیت او شبیه به یک کاربر خانگی عادی به نظر برسد. سایت‌های هدف شما رفتار مشکوکی را در نشست خودتان مشاهده خواهند کرد — و بن‌های حساب‌هایی که سال‌ها آن‌ها را گرم کرده‌اید، به شما خواهند رسید.
  3. بررسی با ارائه‌دهنده. از نظر هر ارائه‌دهنده عادی، ترافیک از حساب شما می‌آید و شما باید توضیح دهید.

چه کار کنیم: حداقل عملی

  1. محیط‌ها را جدا کنید. استک اسکرپینگ در یک کانتینر یا VM جداگانه نصب می‌شود — نه بر روی آن ماشینی که کوکی‌های شخصی، ایمیل کاری و توکن‌های تولیدی در آن قرار دارند. این تنها اقدام است که حتی در برابر بسته‌ای که هنوز کسی از آن خبر ندارد، کار می‌کند.
  2. اعتبارهای پروکسی را از .env کنار کد حذف کنید. اسرار — در مدیر اسرار یا در متغیرهای محیطی رنر، نه در فایلی در ریشه پروژه که هر ماژول وارد شده می‌تواند آن را بخواند.
  3. احراز هویت بر اساس IP را در جایی که وجود دارد فعال کنید. پیوند دسترسی به سرور شما ارزش زوج دزدیده شده نام کاربری/رمز عبور را کاهش می‌دهد: از آدرس دیگر کار نخواهد کرد. نحوه کار و در چه سناریوهایی مناسب است، در مطلبی درباره لیست سفید IP‌ها برای پروکسی بررسی شده است. قوانین عمومی ذخیره دسترسی‌ها — در راهنمای ذخیره امن اعتبارهای پروکسی.
  4. زیر اعتبارهای جداگانه برای هر پروژه و محدودیت‌های ترافیکی. اگر برای هر اسکریپت دسترسی خاصی با سقف گیگابایت وجود داشته باشد، نشت یکی تمام موجودی را نمی‌ریزد و در عرض چند دقیقه محلی‌سازی می‌شود.
  5. مصرف را نظارت کنید. افزایش ناگهانی مصرف GB بدون افزایش وظایف — زودترین و ارزان‌ترین تشخیص نفوذی است که دارید.
  6. انضباط در وابستگی‌ها. npm ci بر اساس فایل قفل به جای install آزاد، قرنطینه برای نسخه‌های جدید (۷–۱۴ روز)، بررسی سن بسته و تاریخچه ناشر، آینه داخلی با allowlist. بسته‌ای با نسخه ۳۵.x.y، تاریخچه صفر و نامی از کلمات چسبیده — دلیلی برای توقف است، نه نصب.

اگر مشکوک هستید که قبلاً گرفتار شده‌اید

توصیه‌های Sonatype در اینجا به‌طور خاص و ترتیب آن‌ها اصولی است: حساب میزبان را به‌طور کامل به‌عنوان آسیب‌دیده در نظر بگیرید؛ به دنبال مکانیزم‌های توصیف شده برای تثبیت باشید (کلیدهای راه‌اندازی خودکار و وظایف برنامه‌ریز در ویندوز، LaunchAgent در macOS)؛ اعتبارنامه‌ها را چرخش کنید — npm، GitHub، ابر، CI/CD — پس از پاک‌سازی ماشین، نه قبل، در غیر این صورت اسرار جدید همان مسیر را طی خواهند کرد؛ فایل‌های قفل، کش‌های وابستگی و آینه‌های داخلی را برای نسخه‌های باقی‌مانده بررسی کنید؛ قبل از نصب مجدد، نام‌های بسته‌ها را به‌صورت حرف به حرف مقایسه کنید.

به این لیست موارد خود را اضافه کنید: تغییر رمزهای عبور دسترسی‌های پروکسی، لغو نشست‌های فعال در مرورگر ضد شناسایی و بررسی تاریخچه مصرف ترافیک در دو هفته گذشته. اگر ترافیک بر اساس گیگابایت خریداری می‌شود — پروکسی‌های مقیم یا موبایل — گزارش مصرف شما همان دفترچه دسترسی شماست.

نتیجه‌گیری

Flooding Dropper به خاطر پیچیدگی‌اش جالب نیست، بلکه به خاطر اقتصادش: هزار بسته یکبار مصرف، نام‌های تولید شده، حساب‌ها به صورت دسته‌ای — این یک خط تولید است که بر این اساس طراحی شده که کسی بدون دقت وابستگی را نصب کند. کمپین‌های جداگانه ممکن است هفته‌ها از رجیستری پاک شوند، اما جریان متوقف نخواهد شد: اعداد Sonatype برای سال گذشته هیچ توهمی باقی نمی‌گذارد.

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

```