
SafeDep يعثر على محمّل مشفّر داخل مكتبة npm الرياضية mathmain
عثر باحثو SafeDep على محمّل لشفرة مشفّرة داخل حزمة npm المسماة mathmain. يأخذ المحمّل كلمة المرور من البيانات المُمرَّرة إلى الحلّال، ويمكنه كتابة ملف وتشغيله.
عثر باحثون في شركة الأمن SafeDep على محمّل لشفرة مشفّرة داخل mathmain، وهي حزمة npm تقدّم نفسها على أنها مكتبة رياضية. يأخذ المحمّل كلمة المرور من البيانات المُمرَّرة إلى حلّال المصفوفات، ومع المدخلات الصحيحة يستطيع فك تشفير ملف وتشغيل الشفرة داخله. نُشر التحليل في 17 سبتمبر 2026، لكن الشفرة المشفّرة نفسها لم تُفكّ.
استدعاء مخفي داخل الحلّال
بدأت المراجعة من ملاحظة أن mathmain تبدو نسخة معاد تسميتها ومُعتَّمة من مكتبة mathjs واسعة الانتشار. كان الدليل استدعاءً إضافيًا واحدًا قرب نهاية lusolve() في نسخة CommonJS: بعد حساب النتيجة يمرّر الحلّال بيانات المصفوفة المثلثية الدنيا إلى دالة اسمها removeSolveValidation() ولا يستخدم القيمة المُعادة بعد ذلك.
يصل هذا الاستدعاء إلى isGraph() في الملف lib/cjs/utils/is.js. تحوّل isGraph() مدخلها إلى نص JSON وتستخدمه كلمة مرور، وتفكّ اسم ملف من كتلة base64، ثم تمرّر المسار المستخرج وكلمة المرور إلى دالة مساعدة اسمها event() يذهب ناتجها إلى require() في Node.
scrypt و AES-GCM وكتابة على القرص
تشتقّ الإجراءات في lib/cjs/utils/event.js مفتاحًا بطول 256 بت عبر scrypt وتفكّ التشفير بـ AES-GCM؛ وتضم كل كتلة ملحًا من 16 بايت، ومتجه تهيئة من 12 بايت، ووسم تحقق من 16 بايت، والنص المشفّر، بنص base64.
تكتب الدالة المساعدة البايتات المفكوكة على القرص وتعيد مسارًا يُحمَّل بعد ذلك، أي أن الشفرة تعمل بصلاحيات العملية نفسها. ولأن بادئة enc_ تُزال من اسم الملف قبل الكتابة، فإن أي حمولة بلا هذه البادئة تكتب فوق ملفها المشفّر نفسه. ثلاثة ملفات تحت lib/cjs/utils/ تحمل بيانات base64 بدل JavaScript: graph.js (20,918 بايت)، وfraction.js (9,084)، وbignumber/type.js (1,179,416).
حزمتان إضافيتان بلا مُشغِّل
كشف بحث في السجل حزمتي mathsbase وmath-universe، اللتين تتشاركان ملفات المحمّل وشفرة التشغيل وتعديلات الحلّال عبر خمس إصدارات. صدر [email protected] في 27 أغسطس 2026 و[email protected] في 17 سبتمبر؛ وكان npm لا يزال يقدّم [email protected] بلا محمّل كإصدار افتراضي.
لا تحتوي مستودعات GitHub التي تسردها الحزمتان على الاستدعاء المضاف في الالتزامات التي راجعها الفريق، لذا لا يفسّر الكود العلني النسخة المنشورة. اختبر الفريق 16,922 كلمة مرور محتملة مقابل اسم الملف المشفّر و533 أخرى مقابل الكتل الخمس المختلفة، ولم ينجح أي منها في اجتياز فحص التحقق. الفرضية العملية أن الحزم تخزّن حمولة لهجوم لاحق، وأن حزمة منفصلة ستوفّر المُشغِّل؛ ولم تُعثر على حزمة كهذه، ويشير الباحثون إلى أن سرقة البيانات أو الاتصال بخادم أو استمرار الوصول لم تُثبت بعد.
SiTech — تطوير ويب مدعوم بالذكاء الاصطناعي
نبني مواقع سريعة وعصرية وندمج الذكاء الاصطناعي في سير عمل الشركات. لديك مشروع أو سؤال؟ يسعدنا مساعدتك.