
مختبر Docker لمقارنة الإصدارات المعرّضة والمصحّحة من MCPJam Inspector لثغرة CVE-2026-23744، مع توضيح الاختلافات في ربط الشبكة وكشف واجهة برمجة التطبيقات لأغراض البحث الأمني التعليمي.
هذا المستودع عبارة عن مختبر Docker صغير لمقارنة البناء الثغري مقابل البناء المُصحح لمفتش MCPJam لثغرة CVE-2026-23744.
وهو مخصص للتعلم ولبناء محفظة أمنية عامة: إعداد سريع، وأدلة واضحة، ولقطات شاشة.
⚠️ الأخلاقيات / النطاق: اختبر فقط على الأنظمة التي تملكها أو لديك إذن صريح لاختبارها. هذا المستودع مخصص لإعادة الإنتاج المحلي والتوثيق.
/api/mcp/connect) موجود ويستجيب دون تحدٍ للمصادقة في الإعداد الثغري.هذا يتوافق مع نشرة البائع / التقارير العامة:
.
├── docker-compose.yml
├── vuln/
│ └── Dockerfile
├── patched/
│ └── Dockerfile
└── docs/
└── (لقطات الشاشة توضع هنا)
قم ببناء وتشغيل الحاويتين:
docker compose up -d --build
تحقق من أنهما تعملان:
docker compose ps
المتوقع:
inspector_vuln_142 منشور على 127.0.0.1:6274inspector_patched_143 منشور على 127.0.0.1:6275 (لكن يجب ألا يكون قابلاً للوصول من المضيف)
النقطة الطرفية موجودة وتستجيب بخطأ تحقق عند غياب الحقول المطلوبة:
curl -i -X POST http://127.0.0.1:6274/api/mcp/connect \
-H 'Content-Type: application/json' \
-d '{}'
توقع HTTP/1.1 400 وشيئاً مثل:
{"success":false,"error":"Failed to parse request body","details":"Unexpected end of JSON input"}
داخل الحاويات، تحقق من العنوان الذي يستمع على المنفذ 6274:
# الثغرية
docker exec -it inspector_vuln_142 sh -lc "apk add --no-cache iproute2 >/dev/null 2>&1; ss -lnt | grep 6274"
# المُصححة
docker exec -it inspector_patched_143 sh -lc "apk add --no-cache iproute2 >/dev/null 2>&1; ss -lnt | grep 6274"
النتيجة المتوقعة:
0.0.0.0:6274127.0.0.1:6274
على الرغم من أننا نعيّن 127.0.0.1:6275 -> container:6274، فإن الحاوية المُصححة تستمع فقط على واجهة الحلقة المحلية الخاصة بها. لذا من المضيف، يجب أن ترى إغلاق اتصال / رد فارغ.
curl -v http://127.0.0.1:6275/
المتوقع: غير قابلة للوصول (هذا هو التخفيف الذي يعمل).
لإثبات أن الواجهة المُصححة لا تزال تعمل، استخدم curl من داخل الحاوية:
docker exec -it inspector_patched_143 sh -lc "apk add --no-cache curl >/dev/null 2>&1; curl -i http://127.0.0.1:6274/"
المتوقع: HTTP/1.1 200.


أثناء الاختبار المحلي على الحاوية الثغرية، أرفقت strace بعملية خادم Inspector ولاحظت أنها تولد عملية فرعية وتستدعي execve().
أنا عمداً لا أدرج حمولة استغلال جاهزة للتشغيل هنا.
ما يجب التقاطه:
execve("/bin/sh", ["sh","-c", "..."], ...) = 0
execve("/usr/bin/...", [...], ...) = 0
خروج العملية الفرعية بشكل طبيعي (الحالة 0)

هذا المستودع مخصص للبحث الدفاعي والتعليم والتحقق القابل لإعادة الإنتاج في بيئة خاضعة للتحكم. لا تستخدمه ضد أنظمة لا تملكها أو ليس لديك إذن لاختبارها.