TL؛ DR
nolimit-agent یک بسته npm است که نسخههای منتشر شده آن — 1.0.299 از طریق 1.0.307، طی چهار روز از تاریخ 2026-06-26 تا 2026-06-29 منتشر شد - هر کدام حاوی ... چارچوب کامل فیشینگ و ایمیل انبوه درون یک دایرکتوری پنهان و کاملاً مبهمسازی شده. در هر نسخه، ورودی اصلی به ... تبدیل میشود. .ad/x0.js، یکی از حدود ۸۶ فایل در پوشهای با نام dotfile که تقریباً ۴۲۰۰ حباب آرایه رشتهای javascript-obfuscator را در خود جای داده است؛ قلاب نصب و طرحبندی ورودی در سراسر خط یکسان هستند.
پشت این ابهام، یک ... قرار دارد جریان کد-دستگاه OAuth در مایکروسافت ۳۶۵ (login[.]microsoftonline[.]com/common/oauth2/v2.0/devicecode) که پس از تأیید کد، صندوق ورودی Outlook قربانی و موارد ارسالی را از طریق Microsoft Graph API میخواند؛ یک موتور ارسال انبوه SMTP و SMS که توسط فهرستهای گیرنده ارائه شده توسط اپراتور هدایت میشود؛ قالبهای پیام جعل هویت برند؛ ساخت لینکهای باز-هدایتشده؛ و شناسایی از طریق DNS-over-HTTPS، WHOIS و جستجوی کد GitHub. چراغهای راهنمایی ترافیکی زمان اجرا به زیرساخت اپراتور در api[.]nolimitent[.]xyz:4100.
تحت تأثیر: هر کسی که هر نسخهای از بسته را نصب کند، و هر صندوق پستی مایکروسافت ۳۶۵ که صاحب آن کد دستگاه ارائه شده از طریق آن را تأیید میکند. جدیدترین نسخه، 1.0.307، آخرین برچسب فعلی است و همان قابلیت صندوق پستی کد دستگاه را دارد - کد مخرب محدود به یک نسخه پشتیبان نیست.
شدت: بحرانیاکوسیستم تحت تأثیر: npmاولین شاخصی که باید جستجو کنید: میزبان api[.]nolimitent[.]xyz.
حمله: نحوه عملکرد آن
یک پوسته بیخطر روی یک محموله پنهان
این بستهبندی یک سطح معمولی را ارائه میدهد. pack.json اعلام میکند نصب پس از نصب قلاب –
text postinstall: node scripts/postinstall.js - و در بازرسی اسکریپتها/postinstall.js بیضرر است: یک شیم فرمان ویندوز نصب میکند و خارج میشود. قلاب جایی نیست که رفتار در آن قرار دارد. اصلی و صندوق هر دو فیلد به داخل اشاره میکنند .ad/، دایرکتوری که نقطه ابتدای آن آن را از حالت تصادفی خارج میکند ls خروجی، و محتویات آن به طور یکنواخت توسط دستگاه مبهمسازی شده است. اسکنر استاتیک حدود ۴۲۹۳ محدوده بار رمزگذاری شده را در سراسر .ad/ مجموعه ماژول؛ javascript-obfuscator یک وابستگی توسعهی اعلانشده است که با شکل چرخش رشته-آرایه فایلهای همراه مطابقت دارد.
این تقسیمبندی اولین سیگنالی است که ارزش نامگذاری دارد: هوک نصبی که یک بررسیکننده بررسی میکند، تمیز است، در حالی که کد عملیاتی در یک دایرکتوری دورتر، پنهان و مبهم قرار دارد و فقط زمانی به آن دسترسی پیدا میکند که نقطه ورودی صادر شده بسته اجرا شود.
دسترسی به صندوق پستی مایکروسافت ۳۶۵ با کد دستگاه
ماژول .ad/x12.js مهمترین قابلیت این چارچوب را بر عهده دارد. این قابلیت، مجوز دستگاه Microsoft 365 OAuth 2.0 را هدایت میکند:
text POST login[.]microsoftonline[.]com/common/oauth2/v2.0/devicecode اعطای کد دستگاه، یک جریان مشروع مایکروسافت است که برای دستگاههای دارای ورودی محدود طراحی شده است: یک سرویس درخواست کد میکند، کاربر آن کد را تایپ میکند microsoft.com/deviceloginروی دستگاه دوم ارسال و تأیید میشود و سرویس درخواستکننده توکنها را دریافت میکند. وقتی سرویس درخواستکننده متعلق به شخصی غیر از صاحب صندوق پستی باشد، تأیید، توکنی را به آن شخص ثالث میدهد. پس از دریافت توکن، .ad/x12.js` صندوق پستی را مستقیماً از طریق Microsoft Graph میخواند:
text GET graph[.]microsoft[.]com/v1.0/me/mailFolders/inbox/messages?$top=250&$select=from GET graph[.]microsoft[.]com/v1.0/me/mailFolders/sentitems/messages?$top=250&$select=toRecipients La انتخاب $ پیشبینیها آدرسهای فرستنده را از صندوق ورودی و آدرسهای گیرنده را از موارد ارسالی استخراج میکنند - ماده خام برای نقشهبرداری از مکاتبات قربانی. این دسترسی مهاجم در وسط (AiTM) با رضایت و نه با گرفتن رمز عبور است: هیچ مدرکی برای فیشینگ به معنای کلاسیک آن وجود ندارد، فقط یک کد برای تأیید وجود دارد.
موتور ایمیل و پیامک انبوه با الگوهای جعل هویت
در اطراف صندوق پستی، یک دستگاه پست قرار دارد. این بسته، فایلهای داده قابل ویرایش توسط اپراتور - لیست فرستندهها (فرستندهها.txt, smps.txt) و یک فایل الگو (توابع.txt) — که آدرسهای جایگزین آن به عنوان یک برگه ریختهگری برای جعل هویت خوانده میشوند: security@apple.com, login- تأیید، سرویس OAuth، صورتحساب و ارسالکنندگان اعلان حساب در برابر یک yourdomain.com اپراتور جایگزین میشود. سمت پیامکی یک تلفن را حمل میکندebook و پیکربندی دروازه. ایمیلر لیستهای گیرنده ارائه شده توسط اپراتور را تکرار میکند و از طریق رلههای SMTP پیکربندی شده ارسال میکند.
برای اینکه لینکها به زمین بنشینند، .ad/xu.js و .ad/xq.js URLهایی بسازند که از ابهام در تجزیه URL و ردیابی کلیک سوءاستفاده میکنند. الگوهای جعلی، یک مرجع به ظاهر قابل اعتماد را قبل از ... جاسازی میکنند. @ بنابراین پیشوند قابل مشاهده با میزبان واقعی متفاوت است:
text https://trusted[.]com@ https://trusted[.]com%40 https://trusted[.]com:80@ https://redirect[.]example[.]com/ https://track[.]example[.]com/click? این چارچوب همچنین فاوآیکنها را از مصرفکنندگان اصلی دریافت میکند و enterprise ارائه دهندگان خدمات پستی - یک تکنیک معمول برای ارائه یک صفحه فرود یا صفحه فرود قانع کننده با برند ارائه دهنده.
شناسایی هدف و زیرساخت
چندین ماژول قبل از ارسال، اطلاعات را جمعآوری میکنند. .ad/x0.js نامها را از طریق DNS-over-HTTPS حل میکند (dns[.]google/resolve), .ad/xa.js درخواستهای WHOIS (api[.]whois[.]vu)، و .ad/x9.js جستجوی کد GitHub را اجرا میکند (api[.]github[.]com/search/code?q=) — الگویی سازگار با کشف پیکربندی افشا شدهی سرور ایمیل و اعتبارنامههای SMTP برای تغذیهی لیست رله. .ad/xs.js شاخص CDX دستگاه Wayback را جستجو میکند.
دستور و کنترل
در آن سوی مجموعهی مبهم، .ad/x4.js به نقطه پایانی عملگر اشاره میکند:
text http://api[.]nolimitent[.]xyz:4100 میزبان آن را به اشتراک میگذارد نامحدود برند با نامگذاری خود ناشر، و : 4100 پورت، کانال اصلیِ چارچوب است. این تنها شاخصِ پایدار برای مدافعان است: یک بسته، یک ایستگاه کاری توسعهدهنده یا یک عاملِ ساخت که به آن میرسد. api[.]nolimitent[.]xyz این کد را اجرا کرده است.
شاخص های سازش
شاخصهای زیر مواردی هستند که یک مدافع میتواند بر اساس آنها اقدام کند - grep کردن یک فایل قفل، مسدود کردن یک میزبان، یا جستجوی لاگهای پروکسی و DNS. نقاط پایانی مایکروسافت به این دلیل ظاهر میشوند که چارچوب از آنها سوءاستفاده میکند؛ آنها خودشان مخرب نیستند و نباید مسدود شوند.
| شاخص | نوع | جایی که | اقدام مدافع |
|---|---|---|---|
nolimit-agent (تمام نسخههای ۱.۰.۲۹۹ تا ۱.۰.۳۰۷) | بسته | npm | دستور grep برای قفل کردن فایلها / نصب لاگها |
api[.]nolimitent[.]xyz (:4100) | میزبان C2 | .ad/x4.js | مسدود کردن؛ جستجوی گزارشهای DNS + پروکسی |
.ad/ دایرکتوری پنهان به عنوان هدف اصلی/bin | ساختار | package.json | سیگنال استاتیک در بررسی رجیستری |
trusted[.]com@ / %40 / :80@ فرمهای پیوند | جعل آدرس اینترنتی (URL) | .ad/xu.js, .ad/xq.js | بازرسی آدرس ایمیل/پروکسی |
اعطای کد دستگاه + نمودار inbox/sentitems خواندن | رفتار | .ad/x12.js | ورود به سیستم M365 + بررسی حسابرسی نمودار |
هشهای فایل ضبط شده در مرحله اولویتبندی:
- بسته/.ad/x0.js — شا۲۵۶ e4153bb614ee03ec456e6b5b41926385db6aae0e4f3e771d18e581571ad7ca2a
- فایل package/package.json — شا۲۵۶ 8618064f1f6146b4a8f0459aff9154dca1847e3936aa44f4d4cd37e127075644
یک سیگنال مستاجر مایکروسافت ۳۶۵ که ارزش جستجو دارد، مستقل از این بسته: ورود موفقیتآمیز به سیستم با کد دستگاه و به دنبال آن خوانش سریع نمودار پوشههای ایمیل/صندوق ورودی و پوشههای پستی/موارد ارسالیمخصوصاً از جلسهای که کاربر آن را نمیشناسد.
انتساب و رفتار مشاهده شده
آنچه قابل مشاهده است از اینکه چه کسی پشت آن است جدا میماند.
حقایق قابل مشاهده: بسته تحت دسته منتشر شده است عامل نامحدود با یک آدرس جیمیل تأیید نشده و بدون مخزن منبع لینکشده؛ pack.json آن را به عنوان یک «فرستنده ایمیل پیشرفته» توصیف میکند و با برچسبهای تیم قرمز کلمه کلیدی؛ کد زمان اجرا در یک فضای پنهان و مبهم متمرکز شده است .ad/ دایرکتوری که ابزار زنجیره ای آن (javascript-obfuscator) یک وابستگی اعلام شده است؛ و میزبان تماس تلفنی api[.]nolimitent[.]xyz دوباره استفاده میکند نامحدود این یک بسته واحد با یک نقطه عطف زیرساختی تحت کنترل اپراتور است - نه یک خوشه چند بستهای، و هیچ همپوشانی با یک کمپین قبلاً نامگذاری شده شناسایی نشد.
La تیم قرمز کلمه کلیدی طبقهبندی را تغییر نمیدهد. ابزار امنیتی تهاجمی قانونی که قابلیت استفاده دوگانه را ارائه میدهد، این کار را به صورت شفاف انجام میدهد: منبع قابل خواندن، اهداف ارائه شده توسط اپراتور و بدون تماس تلفنی پنهان. این بسته هر یک از این ویژگیها را معکوس میکند - کد عملیاتی آن مبهم و پنهان است و به جای هدفی که کاربر ارائه میدهد، به زیرساخت اپراتور ثابت هدایت میشود. این رفتار است که حکم را صادر میکند، نه برچسب.
در اینجا قصد و نیتی بیان نشده است. این پست شرح میدهد که کد چه کاری انجام میدهد - درخواست کد دستگاه، خواندن صندوق پستی از طریق Graph، ارسال ایمیل انبوه از طریق رلههای پیکربندی شده، ارسال سیگنال به یک میزبان ثابت - و انگیزه را بیان نمیکند.
تأثیر، روندها و راهنمایی مدافعان
دو اثر زمان نصب اهمیت دارند. اول، هر توسعهدهنده یا عامل CI که نصب میکند عامل نامحدود چارچوب را روی آن میزبان میآورد و مرکز تماس را برای آن برقرار میکند api[.]nolimitent[.]xyzدوم، قابلیت کد دستگاه، دسترسی را فراتر از میزبان نصبکننده گسترش میدهد: یک صندوق پستی مایکروسافت ۳۶۵ که صاحب آن وادار به تأیید کد ارائه شده شده است، مستقیماً از طریق گراف خوانده میشود، بدون اینکه هیچ رمز عبوری از سیم عبور کند.
روند گستردهتر، روندی است که باید درونیسازی شود. فیشینگ کد دستگاه (AiTM) از زیرساخت فیشینگ مستقل به یک بسته در یک رجیستری عمومی منتقل شده است - توزیع توسط نصب npm به جای لینک ایمیل شده. بستهبندی کیت به این روش، مشکل میزبانی و تحویل لینک اپراتور فیشینگ را با دسترسی به رجیستری معاوضه میکند و کد عملیاتی را پشت یک قلاب نصب تمیز و یک دایرکتوری مبهم با نام dotfile پنهان میکند که از یک بررسی سریع دستی جلوگیری میکند.
برای مدافعان:
- بررسی رجیستری و وابستگیها با بستهای رفتار کنید که اصلی/صندوق به یک دایرکتوری پنهان (با پیشوند نقطه) از کد شخص اول که به طور یکنواخت مبهمسازی شده است، به عنوان یک ریسک بالا، تنها از نظر ساختار، مستقل از اینکه قلاب نصب تمیز به نظر برسد یا خیر، تبدیل میشود. کوچکسازی، مبهمسازی نیست - دروازهای روی امضای رمزگشای آرایه رشتهای است، نه روی طول خط.
- مقاومسازی مایکروسافت ۳۶۵. جریان مجوز کد دستگاه را با دسترسی مشروط در جایی که از نظر عملیاتی مورد نیاز نیست، محدود کنید؛ اعطای مجوز کد دستگاه یک مسیر شناخته شده AiTM است و به ندرت توسط کاربران تعاملی مورد نیاز قرار میگیرد. ورود به سیستم با کد دستگاه را بررسی کنید و به دنبال آن شمارش فوری صندوق پستی Graph را انجام دهید.
- تشخیص شبکه. مسدود کردن و هشدار دادن api[.]nolimitent[.]xyz. لاگهای DNS و پروکسی خروجی را در سراسر توسعهدهنده و زیرساختهای ساختوساز جستجو کنید.
- تشخیص مسیر ایمیل La user@host فرمهای جعل URL (مورد اعتماد [.]com@…) در دروازه ایمیل و پروکسی قابل تشخیص هستند؛ لینکهایی را که مؤلفه اعتبار آنها قبل از ... قرار دارد، علامتگذاری کنید. @.
این بسته در زمان تحلیل روی npm فعال بود. زیرا چارچوب پنهان، کل خط نسخه منتشر شده و نسخه فعلی را در بر میگیرد. آخرین از آنجایی که برچسب (1.0.307) قابلیت کد دستگاه را دارد، حذف رجیستری باید تمام نسخهها را پوشش دهد، نه فقط یک نسخه قدیمی.




