forge-jsxy npm Infostealer: دليل مؤشرات الاختراق والكشف

forge-jsxy: سارق معلومات npm الذي يغير اسمه باستمرار

TL؛ DR

لمدة تقريبية شهرينظهر برنامج خبيث واحد لسرقة معلومات npm مجدداً تحت سلسلة متغيرة من أسماء الحزم، مع شحن حمولة لم تتغير تقريباً. بدأ الأمر علناً باسم forge-jsxy، نشأ forge-jsx3 / forge-jsx4 ثم أسقط الأشقاء علامة "فورج" التجارية بالكامل ليتظاهروا بأنهم بنية تحتية للمطورين - أولاً zredis-typed، وكان آخرها pinokio-redis.

كل نسخة تحمل نفس سلسلة الأدوات الداخلية: ملفات باسم forge-jsx-explorer-*أو المعلم relayPackageServe وحدة تخدم forge-jsxy-package.tgzووقت تشغيل دائم مخفي تحت دليل منقط بحيث يبقى حتى بعد حذف حزمة npm.

الحمولة تقرأ مواد محفظة العملات المشفرة وبيانات اعتماد المطور من المضيف ويرسلها إلى موقع Discord الإلكترونيhooksيقوم برنامج HuggingFace Hub بتحميل الملفات، ويتضمن نقطة نهاية C2 مُبرمجة مسبقًا. كما يقوم بتثبيت خاصية التشغيل التلقائي على مستوى نظام التشغيل بحيث يعمل البرنامج مرة أخرى بعد إعادة التشغيل، ويلتقط بيانات الحافظة ولوحة المفاتيح والشاشة. الإصدار الأخير، pinokio-redisيصف نفسه بأنه تكامل "Autodesk Forge" - وهو وصف لا علاقة له بما يفعله الكود.

النظام الإيكولوجيالآلية الوقائية الوطنية
فئات الحمولةبرنامج سرقة معلومات متعدد المراحل + برنامج تحكم عن بعد (RAT)
الأهداف الرئيسيةمحافظ العملات الرقمية، وإضافات محافظ المتصفح، وبيانات اعتماد المطورين/الخدمات السحابية
إصراروقت تشغيل دائم مخفي + بدء تشغيل تلقائي لنظام التشغيل (يبقى بعد إزالة الحزمة)
exfiltrationالخلاف على شبكة الإنترنتhooks + مرحل، موزع HuggingFace، C2 مبرمج مسبقًا على المنفذ 9877
المدى المرصودمايو 2026 - يوليو 2026 (مستمر)
الاسم الأخيرpinokio-redis:1.0.127

تشريح الهجوم

يتم تثبيت كل نوع من هذه المجموعة بنفس الشكل: عبوة يبدو هذا العنصر خاملاً في صفحة عرضه، ولكنه يُعلن عن خطاف ما بعد التثبيت، لذا يتم تشغيل الحمولة بمجرد تثبيت الحزمة كمتطلب أساسي. يقوم الخطاف بتشغيل سلسلة من خمس مراحل.

  • المرحلة الأولى - التجسيد. يقوم برنامج التثبيت بفك تشفير حزمة مشفرة يتم تحويل البيانات الثنائية الكبيرة إلى مجموعة من البرامج النصية لوقت التشغيل وكتابتها في دليل مخفي ضمن موقع تكوين النظام الأساسي (استخدمت إصدارات forge-jsxy مسارًا منقطًا .forge-jsxy/runtime/v (المسار). ولأن هذه النسخة موجودة خارج مجلد node_modules، فإن إزالة حزمة npm أو إلغاء نشرها لا يؤدي إلى إزالة الوكيل قيد التشغيل.
  • المرحلة الثانية - المثابرة. تقوم سلسلة العمليات بتسجيل إدخال بدء التشغيل التلقائي لنظام التشغيل، بحيث يُعاد تشغيل الوكيل عند إعادة التشغيل. في نظام ويندوز، يتم ذلك من خلال برنامج نصي تشخيصي مخفي بلغة باور شيل؛ حيث يتم تشغيل عملية الوكيل بشكل منفصل مع ضبط خاصية إخفاء النوافذ (windowsHide) بحيث لا تظهر نافذة وحدة التحكم.
  • المرحلة 3 - التهرب. يتحقق وقت التشغيل من وجود علامات التكامل المستمر، ويتوقف تلقائيًا عند اكتشاف بيئة تكامل مستمر، لذا لا ترى بيئات البناء المعزولة الآلية أي شيء. في إصدارات forge-jsxy، ذكر تعليق في المصدر أنه تم حذف حقل forgeInstall المرئي عمدًا من ملف package.json "لأن هذا الحقل سيكون مرئيًا على npm" - أي أن المُشغِّل أبقى بيانات التعريف الخاصة بالمُشغِّل بعيدة عن القائمة العامة عن قصد.
  • المرحلة الرابعة - التجميع. بمجرد تشغيله، يقوم البرنامج بجمع البيانات في عملية واحدة:
  1. مادة محفظة العملات الرقمية. تقوم قائمة الأهداف المجمعة secret_filename_patterns.json بتشغيل عملية مسح لنظام الملفات بحثًا عن wallet.dat و *.mnemonic /ملفات .seed / *.phrase، ملف keypair.json، توقيت إيثيريوم العالمي (UTC) مخازن المفاتيح، ومخازن المفاتيح *.p12 / *.pfx / *.jks. مكتبات اشتقاق المحفظة (bip39، secp256k1، base58check، ومساعدات Solana) موجودة في الحزمة.
  2. إضافات محفظة المتصفح. تقوم وحدة chromiumExtensionDbHarvest بقراءة قواعد بيانات التخزين الإضافية المحلية لمتصفحات Chromium، وهو الموقع الذي تحتفظ فيه ملحقات المحفظة المستندة إلى المتصفح ببيانات الخزينة الخاصة بها.
  3. بيانات الاعتماد والأسرار. يقوم البرنامج بفحص سجل الأوامر والملفات التي تحتوي على كلمات مرور سرية ويقرأ بيانات اعتماد المطور/السحابة، ثم يقوم بتشفير بيانات اعتماد HuggingFace للتحميل.
  4. مدخلات مباشرة. يتم التقاط محتويات الحافظة، ومدخلات لوحة المفاتيح، ولقطات الشاشة بشكل مستمر.
  • المرحلة الخامسة - الانسحابتغادر البيانات المجمعة الجهاز المضيف عبر ثلاثة مسارات. قنوات تعمل بالتوازي: موقع ديسكورد الإلكترونيhooks (discordWebhookPost) و برنامج تحميل وسيط على ديسكورد يتواصل معdiscord.com/api/v10` (discordRelayUpload)، وتحميلات HuggingFace Hub (hfUpload)، و تم الوصول إلى نقطة نهاية C2 المبرمجة مسبقًا عبر المنفذ 9877. خادم حزم الترحيل بالإضافة إلى ذلك، يقوم الموديول بإعادة إرسال ملف forge-jsxy-package.tgz — وهو نفسه اسم العنصر في كل عملية إعادة تسمية.

تتمثل النقطة الهيكلية المهمة في أن المراحل من 1 إلى 3 تعمل في وقت التثبيت مع لا يتطلب الأمر أي تفاعل من المستخدم، وتقوم المرحلة الأولى بوضع الحمولة في مكان ما ضمن الحزمة لا يتابع المدير الأمر. المطور الذي يلاحظ التبعية الغريبة و يؤدي تشغيل الأمر npm uninstall إلى إزالة القائمة ولكن ليس الوكيل.

كما أن الحمولة تقاوم القراءة السريعة. ولا يتم شحن البرامج النصية الخاصة بوقت التشغيل. بوضوح: تحافظ خطوة التشفير والنشر على منطق التشغيل كـ كتلة مشفرة لا تتوسع إلى نصوص برمجية قابلة للقراءة إلا بعد اكتمال سلسلة التثبيت يقوم بفك تشفيرها إلى دليل وقت التشغيل المخفي. الملفات المرئية في القائمة - حشوة رقيقة للتثبيت اللاحق وتقنية التوزيع المادي المساعد - لا يكشف إلا القليل عما يتم تشغيله في النهاية. هذا التسليم المشفر كان للتصميم تأثير ملموس على عملية الفرز: على مدار حياة الأسرة، تم تصنيف العديد من المتغيرات المؤكدة على أنها آمنة بواسطة التصنيف الآلي، وكانت الحمولة مبهمة بما يكفي لإيقاف المراجعة الآلية تمامًا. لا تظهر السلوكيات التي تكشف هوية العائلة إلا بعد التشفير يتم توسيع المرحلة، ويتم قراءة وقت التشغيل مباشرة.

الخط الزمني

لقد ظلّت حمولة العائلة مستقرة بشكل ملحوظ؛ ما يتغير هو الاسم على العلبة. يمتد القوس من علامة "فورج" التجارية المفتوحة باتجاه يتنكر في هيئة أدوات تطوير غير ذات صلة.

تاريخ (2026)الحزمة: الإصدارملاحظات
مايو (مبكراً)forge-jsxy:1.0.81, :1.0.90أقدم المتغيرات المؤكدة - برنامج تجسس مزود بخادم تحكم عن بعد مشفر بتقنية AES-256-GCM
مايو 19forge-jsxy:1.0.92 / 1.0.105 / 1.0.107 / 1.0.108الحملة قيد النشر النشط؛ تم تصنيف الإصدار 1.0.92 في البداية بشكل خاطئ على أنه آمن، وتم التراجع عن ذلك عند إعادة مراجعة الكود.
أواخر مايوforge-jsx3 / forge-jsx4:1.0.122 / 1.0.123, zod-pinoأسماء حزم متشابهة، نفس سلسلة الأدوات
يونيو 4forge-jsxy:1.0.120متابعة؛ تم تصنيفها آمنة بواسطة نموذج التعلم الآلي (خطأ)
21-23 يونيوforge-jsxy:1.0.121لم يطرأ أي تغيير على مجموعة الوحدات النمطية منذ الإصدار 1.0.120
يوليو 6zredis-typed:1.0.127تم حذف كلمة "forge" من الاسم؛ ولا تزال الشحنات forge-jsxy-package.tgz و forgeAgent* مفاتيح التكوين
يوليو 7pinokio-redis:1.0.127نفس مجموعة الأدوات؛ نظام تحكم جديد؛ يصف نفسه بأنه تكامل مع "Autodesk Forge".

يبرز أمران على امتداد التسلسل الزمني. أولًا، يُعاد استخدام رقم الإصدار 1.0.127 حرفيًا في كلٍ من zredis-typed و pinokio-redis، مع اختلاف التسمية فقط دون إعادة ضبط سلسلة البناء. ثانيًا، يتزامن الابتعاد عن أسماء "forge-*" مع التحول نحو أسماء تُقرأ كبنية تحتية عادية (redis، pinokio)، مما يقلل من احتمالية أن يتجاهل المطور الاسم ويتردد في استخدامه.

مؤشرات التسوية

تم تعطيل مؤشرات الاختراق أدناه. تم تدوير مضيف C2 بين خط forge-jsxy وأحدث إصدار مع الحفاظ على نفس المنفذ.

مؤشربعد التخفيضشوهد في
نقطة نهاية C2212.193.3[.]61:9877pinokio-redis:1.0.127
نقطة نهاية C279.108.162[.]160:9877سطر forge-jsxy، zredis-typed:1.0.127
قناة الخروجdiscord.com/api/webhooks/… (منشور عبر رابط الويب)جميع المتغيرات
قناة الخروجdiscord.com/api/v10 (تحميل عبر الترحيل)جميع المتغيرات
قناة الخروجتحميل من HuggingFace Hubجميع المتغيرات
قطعة أثرية مُقدَّمةforge-jsxy-package.tgz (عن طريق relayPackageServe)جميع المتغيرات
ملفات سلسلة الأدواتchromiumExtensionDbHarvest, discordRelayUpload, discordWebhookPost, hfUpload, encode-hf-credentials, forge-jsx-explorer-*جميع المتغيرات
قائمة الأهدافsecret_filename_patterns.json (wallet.dat, .mnemonic/.seed/.phrase, keypair.json, UTC--, .p12/.pfx/*.jks)جميع المتغيرات
وقت التشغيل الخفيمنقط …/.forge-jsxy/runtime/v<version>/ مسار دليل التكوينسطر forge-jsxy
استمرارية نظام التشغيل ويندوزبرنامج تشغيل تلقائي مخفي لـ PowerShell بعنوان "forge diagnostics"جميع المتغيرات
تثبيت المُشغِّلخطاف ما بعد التثبيت يستدعي سلسلة نصوص برمجية لتوزيع الموادجميع المتغيرات

إن إشارة الكشف الأكثر ديمومة ليست أي مضيف أو رابط ويب واحد - بل تلك تدوير — ولكن أسماء ملفات سلسلة الأدوات و forge-jsxy-package.tgz قطعة أثرية، والتي استمرت حرفيًا عبر كل عملية إعادة تسمية.

الإسناد والسلوك الملاحظ

تم نشر الحزم تحت أكثر من حساب npm واحد. forge-jsxy تم استخدام السطر من قبل الناشر jacksonkaandorp2 (jacksonkaandorp2@outlook[.]com)؛ تم نشر أحدث إصدار من لعبة بينوكيو ريديس بواسطة دونيميك (donimiqueakers@gmail[.]com). لم يكن أي من الحسابين يحمل بريدًا إلكترونيًا موثقًا أو مستودع مصادر مرتبط. الرابط المشترك بين الحسابات هو سلسلة الأدوات، وليس هوية الناشر - نفس أسماء الوحدات، نفس يتم تقديم ملفات .tgz، ويتكرر تصميم الخروج نفسه بغض النظر عمن قام بالنشر.

تشير العديد من السلوكيات الملحوظة إلى إخفاء متعمد بدلاً من جمع زائد غير مقصود:

يتم وضع وقت التشغيل خارج مجلد node_modules في دليل مخفي، لذا فهو يبقى لفترة أطول من الحزمة التي قامت بتسليمه.

يتوقف البرنامج عند اكتشافه بيئة CI، مما يحد من التعرض في بيئات الاختبار الآلية.

يتم تشغيل عملية الوكيل بشكل منفصل و window-hidden.In في إصدارات forge-jsxy، ربط أحد التعليقات حذف حقل التثبيت المرئي بكون هذا الحقل "مرئيًا على npm".

لا علاقة لأوصاف الحزمة العامة بالرمز البرمجي - حيث يظهر pinokio-redis على أنه تكامل "Autodesk Forge".

هناك ثغرة كشف متكررة جديرة بالملاحظة بالنسبة للمدافعين الذين يعتمدون على التصنيف الآلي: تم تأكيد وجود عدة متغيرات متعددة في هذه العائلة تم تصنيفها على أنها آمنة بواسطة مصنف التعلم الآلي قبل أن يقوم مدقق الكود بتصحيحها. الخلاصة. العناصر الثابتة التي يمكن للمراجع الاعتماد عليها - وقت التثبيت سلسلة الأدوات، ووقت التشغيل المخفي، وأسماء ملفات سلسلة الأدوات - هي بالضبط تلك التي التي تبقى بعد تغيير الأسماء.

نصف ما سبق بأنه سلوك مُلاحَظ. ولا نُعزيه إلى أي شيء آخر. لا نوجه أي حملة لأي جهة فاعلة محددة، ولا ندعي أي شيء بخصوص المشغل الهوية أو الأهداف التي تتجاوز ما يوضحه الكود والبنية التحتية.

التأثيرات والاتجاهات وتوجيهات المدافعين

من هو المعرض للخطر؟ تستهدف هذه المجموعة المطورين بشكل مباشر الأجهزة: محافظ العملات المشفرة ومخازن المفاتيح، وإضافات محافظ المتصفح، سجل الأوامر، وبيانات اعتماد الخدمة السحابية. أي شخص يقوم بتثبيت الحزمة المتأثرة - بشكل مباشر أو كـ التبعية الانتقالية — خلال نافذة "كان يعمل" مشمولة في النطاق، وتصميم الاستمرارية يعني أن لا ينتهي التعرض بمجرد إزالة العبوة.

لماذا تُعدّ المثابرة مهمة؟ لأن المرحلة الأولى تنسخ الحمولة إلى دليل وقت التشغيل المخفي ومرحلة التشغيل التلقائي للمرحلة الثانية، كالمعتاد غريزة الإصلاح (إلغاء تثبيت التبعية السيئة، حذف مجلد node_modules، إعادة التثبيت لا تؤدي إلى إزالة الوكيل. يجب على فريق الاستجابة للحوادث البحث عن وقت التشغيل خارج الشجرة وإدخال بدء التشغيل التلقائي، وليس الحزمة فقط.

الاتجاه السائد. تُجسّد هذه العائلة نمطًا جديرًا بالملاحظة: حمولة مستقرة وناضجة، مغلفة بتيار من المواد القابلة للتصرفأسماء الحزم التي تتغير عن أي اسم تم استخدامه في عملية إزالة سابقة أسماء مألوفة، تُقرأ كأسماء بنية تحتية عادية. أسماء تعتمد على الاسم تتلاشى قوائم الحظر وسمعة الناشرين بسرعة في مواجهة هذا السلوك. أما الإشارات القائمة على القطع الأثرية فلا تفعل ذلك.

للمطورين والمستهلكين

اعتبر البرامج النصية أثناء التثبيت هي مصدر الخطر الرئيسي. قم بالتثبيت مع تعطيل البرامج النصية كلما أمكن ذلك، وراجع أي تبعية تُعلن عن بعد التثبيت. قم بتثبيت وفحص التبعيات المتعدية؛ يصل هذا النوع من البرامج الضارة بسهولة من خلال تبعية فرعية كما يصل من خلال تبعية مباشرة.

على جهاز مضيف مشتبه به، ابحث خارج نطاق الحزمة: ابحث عن دليل وقت التشغيل المخفي في موقع تكوين النظام الأساسي، وإدخال بدء التشغيل التلقائي غير المتوقع، والاتصالات الصادرة إلى روابط الويب الخاصة بـ Discord أو نقاط النهاية :9877.

افترض أن أي عبارة استعادة للمحفظة أو مخزن مفاتيح أو بيانات اعتماد موجودة على مضيف متأثر خلال فترة التعرض قد تم اختراقها، وقم بتدويرها.

للسجلات والمدافعين

تنبيه بشأن الملفات الدائمة (forge-jsxy-package.tgz، وforge-jsx-explorer-* / chromiumExtensionDbHarvest / discordRelayUpload أسماء الملفات) بدلاً من اسم الحزمة، الذي يتغير.

قم بتحديد التركيبة الهيكلية التي تعتمد عليها العائلة - عملية ما بعد التثبيت التي تُجسد البرامج النصية في مسار دليل التكوين المخفي بالإضافة إلى نظام التشغيل تسجيل التشغيل التلقائي - بغض النظر عن السلاسل النصية المحددة المعنية.

لقد تغير الاسم الموجود على العبوة أربع مرات على الأقل؛ والصندوق الموجود بداخلها لم يحدث ذلك. لقد تفوقت تقنيات الكشف المبنية على ما يفعله الكود على كل شيء. إعادة التسمية حتى الآن.

أدوات تحليل التركيبات البرمجية sca
إعطاء الأولوية للمخاطر التي تتعرض لها برامجك، ومعالجتها، وتأمينها
احصل على حسابك المجاني.
أي بطاقة ائتمان.

احمِ عملية تطوير وتسليم برامجك

مع مجموعة منتجات Xygeni