ثغرة في معالجة رسائل بروتوكول SSH، قد يتمكن فاعل خبيث من الحصول على وصول غير مصرح به إلى الأنظمة المتأثرة وتنفيذ أوامر عشوائية دون بيانات اعتماد صالحة في خادم Erlang/OTP SSH
✅ تأكيد تنفيذ التعليمات البرمجية عن بُعد قبل المصادقة (PRE-AUTH RCE) — تم إثبات الاستغلال بنجاح.
📄 المدونة التقنية (PDF):CVE-2025-32433-Technical-Blog.pdf
📸 الأدلة المرئية:screenshots/
🔍 تفاصيل إثبات المفهوم:docs/PROOF_OF_CONCEPT.md
ثغرة CVE-2025-32433 هي ثغرة حرجة بتقييم CVSS 10.0 في خادم SSH الخاص بـ Erlang/OTP. يمكن لمهاجم غير مُصادَق عليه فتح قنوات SSH وتنفيذ أوامر عشوائية قبل إتمام المصادقة — دون الحاجة إلى أي بيانات اعتماد.
يوفر لك هذا المختبر بيئة معزولة وجاهزة للعمل بالكامل لإعادة إنتاج الثغرة، وتشغيل الاستغلال، والتحقق منه، واختبار آليات الكشف — كل ذلك على جهازك المحلي.
قبل أن تبدأ، تأكد من تثبيت ما يلي:
| الأداة | الحد الأدنى للإصدار | أمر التحقق |
|---|---|---|
| Docker Desktop | 4.x+ | docker --version |
| Docker Compose | v2.20+ | docker compose version |
| Python | 3.10+ | python --version |
تحتاج أيضًا إلى مكتبة Python paramiko الخاصة بمجموعة أدوات الكشف:
pip install paramiko
تمت الكتابة فوق وسم صورة
erlang:26.2.5على Docker Hub بصمت بالإصدار المُرقَّع26.2.5.11بعد الكشف عن CVE-2025-32433. فسحبها من Docker Hub يمنحك النسخة المُرقَّعة، وليس النسخة القابلة للاستغلال.يقوم ملف
lab/Dockerfileفي هذا المختبر بترجمة OTP 26.2.5 مباشرةً من أرشيف إصدار Erlang الرسمي على GitHub لضمان الحصول على بيئة التشغيل الحقيقية القابلة للاستغلال. يستغرق البناء الأول حوالي 10 دقائق.
┌──────────────────────────────────────────┐
│ Isolated Docker Bridge │
│ (cve-lab-bridge) │
└────┬────────────────────────────┬────────┘
│ │
┌───────────────┴─────────────┐┌─────────────┴──────────────┐
│ target_vulnerable ││ target_patched │
│ OTP 26.2.5 (source-built) ││ erlang:26.2.5.11 │
│ Host Port: 127.0.0.1:2222 ││ Host Port: 127.0.0.1:2223 │
└─────────────────────────────┘└─────────────────────────────┘
│
┌──────────────┴──────────────┐
│ attacker │
│ Python 3 + Scapy/Paramiko │
│ Workdir: /work │
└─────────────────────────────┘
| الحاوية | المنفذ | إصدار OTP | الحالة |
|---|---|---|---|
cve-2025-32433-vulnerable | 127.0.0.1:2222 | 26.2.5 (ERTS 14.2.5) | ❌ عرضة للثغرة |
cve-2025-32433-patched | 127.0.0.1:2223 | 26.2.5.11 (ERTS 14.2.5.15) | ✅ مُرقَّع |
cve-2025-32433-attacker | داخلي فقط | أدوات Python 3 | مجموعة أدوات المهاجم |
git clone https://github.com/damnkrishna/CVE-2025-32433-LAB.git
cd CVE-2025-32433-LAB
⏱️ يستغرق هذا ~10 دقائق — فهو يُصرّف Erlang/OTP 26.2.5 من مصدر C. هذا أمر متوقع. لا تقاطعه.
docker compose build --no-cache target_vulnerable
سترى مخرجات المُصرِّف مثل make[1]: Leaving directory '/tmp/otp_src_26.2.5/lib/...' —
هذا أمر طبيعي. وينتهي بـ:
✔ Image ine_cyber_assignment_job-target_vulnerable Built
docker compose build --no-cache target_patched
docker compose up -d target_vulnerable target_patched
docker compose ps
المخرجات المتوقعة:
NAME STATUS PORTS
cve-2025-32433-vulnerable Up (healthy) 127.0.0.1:2222->2222/tcp
cve-2025-32433-patched Up (healthy) 127.0.0.1:2223->2222/tcp
يجب أن يُظهر كلا الحاويتين (healthy) قبل المتابعة.
تأكد من أن الحاوية تعمل فعليًا بإصدار OTP 26.2.5 (وليس الإصدار المُرقّع):
docker exec cve-2025-32433-vulnerable cat /usr/local/otp/lib/erlang/releases/RELEASES
المخرجات المتوقعة — يجب أن تُظهر 14.2.5 بدون لاحقة .15:
[{release,"Erlang/OTP","26","14.2.5",
[{kernel,"9.2.4",...},
إذا رأيت 14.2.5.15 — فإن صورة الحاوية غير صحيحة. أعد البناء باستخدام --no-cache.
اتصل كمستخدم شرعي للتأكد من أن الخادم يقبل المصادقة القياسية:
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 2222 [email protected]
عند المطالبة، أدخل كلمة المرور: LabPass2026!Secured
ستصل إلى صدفة Erlang:
Eshell V14.2.5 (press Ctrl+G to abort, type help(). for help)
1>
جرّب بعض الأوامر داخل صدفة Erlang:
ls().
file:write_file("test.txt", "hello").
file:read_file("test.txt").
للخروج من صدفة Erlang:
q().
قبل تشغيل الاستغلال، افتح طرفية PowerShell ثانية وتابع سجل الخادم:
Get-Content -Path .\logs\target_vulnerable\ssh.log -Wait -Tail 20
أبقِ هذه النافذة الطرفية مفتوحة. سترى أحداث الاتصال تظهر في الوقت الفعلي.
هذا هو إثبات المفهوم للتنفيذ عن بُعد للشيفرة قبل المصادقة. لا تُستخدم أي بيانات اعتماد.
cd attacker_work\exploit
python payload.py
المخرجات المتوقعة:
[*] Connecting to SSH server...
[+] Received banner: SSH-2.0-Erlang/5.1.4
[*] Sending SSH_MSG_KEXINIT...
[*] Sending SSH_MSG_CHANNEL_OPEN...
[*] Sending SSH_MSG_CHANNEL_REQUEST (pre-auth)...
[✓] Exploit sent! If the server is vulnerable, it should have written to /lab.txt.
[+] Received response: 000003d4...
يجب أن يعرض البانر SSH-2.0-Erlang/5.1.4 (بدون لاحقة .15) لتأكيد أنك وصلت إلى الخادم المصاب.
docker exec cve-2025-32433-vulnerable cat /lab.txt
المخرجات المتوقعة:
pwned
إذا رأيت pwned — تم تأكيد CVE-2025-32433 كـ RCE قبل المصادقة.
كتب الاستغلال إلى نظام ملفات الحاوية دون أي بيانات اعتماد.
شغّل نفس الاستغلال ضد الحاوية المُرقَّعة على المنفذ 2223:
حرّر السطر 6 في attacker_work\exploit\payload.py:
PORT = 2223 # change from 2222 to 2223
شغّل الاستغلال:
python payload.py
ثم تحقق من وجود الملف:
docker exec cve-2025-32433-patched cat /lab.txt
المخرجات المتوقعة:
cat: /lab.txt: No such file or directory
الحاوية المُرقَّعة ترفض طلب القناة غير المُصادَق عليه. عدم كتابة أي ملف = مُرقَّع.
أعِد منفذ payload.py إلى 2222 عند الانتهاء.
عُد إلى جذر المستودع:
cd ..\..
امسح الهدف المعرّض للثغرة:
python detection\detect_cve_2025_32433.py 127.0.0.1 2222
افحص الهدف المُرقّع:
python detection\detect_cve_2025_32433.py 127.0.0.1 2223
يراقب جدول عمليات الحاوية بحثًا عن عمليات فرعية غير متوقعة تُنشئها Erlang (مثل عمليات shell التي تشير إلى تنفيذ تعليمات عن بُعد RCE):
python detection\host_process_monitor.py
اتركه يعمل وفي طرفية أخرى شغّل الاستغلال — سيقوم بتمييز الشذوذ.
اضغط Ctrl+C للإيقاف.
تشغّل جميع طبقات الكشف في أمر واحد:
python detection\run_all_detections.py