
اختبار
يعرض هذا المستند بحثًا حول الثغرة الأمنية CVE-2025-32433، التي تؤثر على تنفيذ خادم SSH المدمج في منصة Erlang/OTP.
تمثل هذه الثغرة إمكانية تنفيذ كود تعسفي عن بُعد (Remote Code Execution، RCE) دون الحاجة إلى مصادقة، وتؤثر على عدة فروع من Erlang/OTP قبل إصدار التصحيحات:
يُستخدم Erlang/OTP على نطاق واسع كأساس للأنظمة الموزعة القابلة للتوسع، وهو جزء من البنية التقنية للعديد من المشاريع المعروفة (مثل تطبيقات المراسلة، ووسطاء الرسائل، وخدمات الويب عالية الحمل).
يشكل وجود ثغرة RCE حرجة في مكتبة SSH الأساسية تهديدًا للبنية التحتية التي تستخدم Erlang/OTP كخادم أو كمكوّن مع وصول SSH مفتوح.
استعراض الثغرة خطوة بخطوة وتوضيح دورة البحث الكاملة:
جمع المواد وتنظيمها:
العثور على البيانات المتاحة للجمهور حول CVE-2025-32433 وتنظيمها، ووصف جوهرها والتأثير المحتمل.
تحديد CPE وشروط التهيئة:
تقديم قائمة بـ CPE وشروط التهيئة التي تكون الثغرة فيها ذات صلة.
تطوير PoC/Exploit:
إنشاء وعرض نموذج أولي عملي للاستغلال على بيئة اختبار.
منهجيات الفحص الجماعي الآمن:
وصف ثلاث طرق لفحص المضيفات الضعيفة:
يُجرى هذا البحث حصريًا لأغراض تعليمية وأخلاقية، ويتم تنفيذه فقط في بيئة اختبار خاضعة للتحكم.
لا يتحمل المؤلف أي مسؤولية عن أي استخدام غير مشروع للمعلومات المقدمة.
استخدم هذه المعلومات فقط للتعلم ولتعزيز مستوى أمان أنظمتك.
Erlang هي لغة برمجة صُممت لبناء أنظمة عالية التوازي ومتسامحة مع الأخطاء.
تُستخدم منصتها Open Telecom Platform (OTP) منذ سنوات طويلة في البنى التحتية الحرجة — من الاتصالات إلى القطاع المالي.
في بيئات OT (التقنيات التشغيلية) وشبكات 5G، يُقدَّر Erlang/OTP لقابلية التوسع وقدرته على ضمان استمرارية عمل الأنظمة بأقل وقت توقف.
غالبًا ما تستخدم هذه الشبكات تنفيذ SSH المدمج في Erlang/OTP للإدارة عن بُعد.
وهذا تحديدًا ما يجعل ثغرة CVE-2025-32433 خطيرة بشكل خاص على مثل هذه البيئات.
يتم تحقيق التفاعل الآمن في Erlang/OTP عبر تنفيذ SSH خاص بها، وهو المسؤول عن:
تسمح الثغرة في هذا التنفيذ للمهاجم الذي يمتلك وصولًا شبكيًا بـتنفيذ كود تعسفي دون مصادقة، مما يشكل تهديدًا مباشرًا للأصول الضعيفة.
وفقًا لبيانات المسح العالمي للإنترنت (Cortex Xpanse، أبريل 2025)، فإن خدمات Erlang/OTP SSH الضعيفة متاحة على نطاق واسع على الإنترنت، وتعمل ليس فقط على المنافذ القياسية، بل أيضًا، على سبيل المثال، على منفذ TCP 2222.
غالبًا ما يُستخدم هذا المنفذ في مكونات الأتمتة الصناعية القديمة وبروتوكول نقل الرسائل الضمني Ethernet/IP، مما يوسع ناقل الهجوم المحتمل.
ترتبط الثغرة بإصدارات SSH الواردة ضمن إصدارات Erlang/OTP.
يشكل انتشار الخدمات الضعيفة على منافذ مميزة لمختلف القطاعات سطح هجوم عالميًا كبيرًا.
أظهرت التليمترية أن أكثر من 85% من محاولات الاستغلال تم رصدها على جدران حماية قطاع OT في المجالات التالية:
وفي الوقت نفسه، وعلى الرغم من الاعتماد الكبير على OT، في القطاعات:
لم يُرصد أي عوامل من شأنها أن تسهم في الانتشار النشط لهذا التهديد تحديدًا.
تم تسجيل CVE-2025-32433 في قاعدة بيانات NVD مع معرّفات CPE النموذجية التالية (Common Platform Enumeration):
cpe:2.3:a:erlang:otp:25:*:*:*:*:*:*:*cpe:2.3:a:erlang:otp:26:*:*:*:*:*:*:*cpe:2.3:a:erlang:otp:27:*:*:*:*:*:*:*تُعتبر الإصدارات الثانوية الأقل من إصدارات التصحيح التالية ضعيفة:
- 25.x — حتى 25.3.2.20 شاملةً
- 26.x — حتى 26.2.5.11 شاملةً
- 27.x — حتى 27.3.3 شاملةً
ssh:daemon/2) قيد التشغيل على المضيف، وليس openssh الخارجي.22 أو المخصص، مثل 2222) متاحًا للاتصالات عن بُعد من شبكة المهاجم.ssh:daemon/2.⚠️ إذا كان Erlang/OTP يُستخدم فقط كمكتبة عميل دون تشغيل خادم SSH، أو إذا كان الخادم معزولًا داخل شبكة مغلقة، فإن الثغرة غير قابلة للاستغلال.
تنشأ الثغرة نتيجة معالجة خادم SSH المدمج في Erlang/OTP لمرحلة ما قبل المصادقة بشكل غير صحيح.
يلعب نوعان من رسائل بروتوكول الاتصال دورًا رئيسيًا — SSH_MSG_CHANNEL_OPEN و SSH_MSG_CHANNEL_REQUEST.
وفقًا لمعيار RFC 4254، يجب قبول هذه الرسائل فقط بعد مصادقة المستخدم بنجاح.
يجب أن تؤدي أي محاولة لإرسالها مبكرًا إلى قطع الاتصال فورًا.
في حالة CVE-2025-32433، لا يضمن خادم SSH الالتزام بهذه القاعدة، مما يسمح للمهاجم بفتح قناة جلسة وإرسال طلب exec بأمر تعسفي دون تقديم بيانات اعتماد صالحة.
بعبارة أخرى، يؤدي هذا إلى تنفيذ كود عن بُعد دون مصادقة (RCE) — إذ يستطيع المهاجم السيطرة على الخادم دون معرفة اسم المستخدم أو كلمة المرور أو المفتاح.

يعمل بروتوكول SSH Connection فوق طبقتَي النقل والمصادقة في بروتوكول SSH.
يوفر وظائف تسجيل الدخول التفاعلي، وتنفيذ الأوامر عن بُعد، وإعادة توجيه المنافذ.
في تنفيذ SSH الضعيف ضمن Erlang/OTP، تصبح هاتان الرسالتان تحديدًا — SSH_MSG_CHANNEL_OPEN و SSH_MSG_CHANNEL_REQUEST، اللازمتان لبدء القناة وطلب الأوامر — نقطة الهجوم:
حيث يمكن للمهاجم إرسال حركة مرور مصممة خصيصًا تخدع النظام وتجبره على تنفيذ كود تعسفي قبل اجتياز المصادقة.

في إطار هذا البحث، تم إعداد Proof-of-Concept عملي لثغرة CVE-2025-32433.
CVE-2025-32433.py — سكربت بلغة Python يقوم يدويًا بتشكيل حزم SSH
(SSH_MSG_KEXINIT, SSH_MSG_CHANNEL_OPEN, SSH_MSG_CHANNEL_REQUEST) و
يرسلها قبل اجتياز المصادقة.
وهذا يتيح في إصدارات Erlang/OTP الضعيفة تنفيذ أمر تعسفي
على جانب الخادم — حيث ينشئ هذا الأمر في الـ PoC ملفًا باسم /lab.txt بمحتوى cyberok.
ssh_server.erl — وحدة Erlang مصغّرة تشغّل خادم
SSH الدامون المدمج في OTP على المنفذ 2222. وهو مطلوب فقط للعرض التوضيحي
ويُشغَّل داخل حاوية Docker.
Dockerfile — وصفة بناء الحاوية، حيث يتم
تلقائيًا تجميع الإصدار المحدد من Erlang/OTP وتشغيل
خادم SSH الاختباري.
⚠️ صُمم هذا الـ PoC حصريًا للاختبار المحلي وللأغراض التعليمية**. لا يجوز استخدامه في الشبكات الإنتاجية أو العامة.
قم ببناء الصورة:
git clone https://github.com/iteride/CVE-2025-32433.git && cd CVE-2025-32433/POC/ && docker build -t cve-ssh .

قم بتشغيل الصورة
docker run -d --name cve-ssh -p 2222:2222 cve-ssh
عرض توضيحي للـ POC

يبحث القالب السلبي عن مؤشرات غير مباشرة للثغرة، دون تنفيذ أي إجراءات هجومية فعلية.
فهو يحلل فقط المعلومات «السطحية» التي تقدمها الخدمة نفسها:
إذا تم اكتشاف إصدار ضعيف (على سبيل المثال، OTP 25.3.2.19 أو 26.2.5.10)، يقوم nuclei بتمييز المضيف بأنه ضعيف محتملًا.
⚠️ هذا النهج آمن: لا يتم إرسال أي حزم ضارة، ولا تُنفَّذ أي محاولات استغلال.
nuclei -u 127.0.0.1:2222 -t erlang-passive.yaml
ينفذ القالب النشط محاكاة هجومية خاضعة للتحكم:
يرسل حزم SSH مصممة خصيصًا قبل المصادقة، ويتحقق مما إذا كانت الثغرة تعمل.
لتأكيد حدوث الاستغلال، يُستخدم Interactsh — إذا نفّذ الخادم البعيد الطلب الضار، سيظهر DNS-callback في لوحة تحكم Interactsh.
✅ يؤكد هذا الاختبار الإمكانية الفعلية لتنفيذ كود عن بُعد (RCE)،
لكنه يُنفَّذ فقط في بيئة اختبار معزولة.
nuclei -u 127.0.0.1:2222 -t erlang-active.yaml -code
الاختلافات عن nuclei-template:
تشغيل السكربت
⚠️ قبل التشغيل، تأكد من تثبيت وتشغيل interactsh-client
python3 babyfon.py -f targets.txt -d your.interactsh_domain

بعد التشغيل، نتحقق من تفاعلات DNS في interactsh-client. (في المثال، يتم فحص هدفين: أحدهما ضعيف والآخر تم تصحيحه مسبقًا)



الخلاصة من الاختبارات: