
من RCE في MCPJam Inspector إلى root — CVE-2026-23744، الكشف عن توكن JupyterLab، تنفيذ النواة، وتصعيد صلاحيات OPSMCP
هذا المستودع مخصّص لأغراض البحث الأمني المُصرّح به، واختبار الاختراق، والتعليم فقط. لا تستخدم التقنيات الموضّحة هنا ضد أي أنظمة دون الحصول على إذن صريح.
من RCE في MCPJam Inspector إلى root — CVE-2026-23744، وكشف رمز JupyterLab، وتنفيذ kernel، وتصعيد الامتيازات عبر OPSMCP.
يوثّق هذا المستودع سلسلة هجوم كاملة على أنظمة Linux، بدءًا من مثيل MCPJam Inspector مكشوف ووصولًا إلى صلاحيات root.
تربط السلسلة نقاط الضعف عبر أدوات المطوّرين، والخدمات المحلية، والتعامل مع بيانات الاعتماد، وتفويض التطبيقات:
MCPJam Inspector
│ CVE-2026-23744
▼
RCE
│
▼
JupyterLab Token
│
▼
Jupyter Kernel
│
▼
User
│
▼
OPSMCP API
│
▼
Hidden Admin Tool
│
▼
Root Credential
│
▼
root
[!WARNING] هذا المستودع مخصّص لأغراض البحث الأمني المُصرّح به، واختبار الاختراق، والتعليم فقط. جميع عناوين الأهداف وبيانات الاعتماد والرموز والقيم الأخرى المرتبطة بالبيئة في هذا المستند تم حجبها أو استبدالها بقيم تجريبية.
| الخطوة | المرحلة |
|---|---|
| 1 | تم كشف MCPJam Inspector على الشبكة |
| 2 | تم استغلال CVE-2026-23744 |
| 3 | تم تحقيق RCE أولي |
| 4 | تم كشف رمز JupyterLab |
| 5 | تنفيذ kernel في Jupyter |
| 6 | shell بصلاحيات مستخدم |
| 7 | مراجعة الكود المصدري لـ OPSMCP |
| 8 | اكتشاف بيانات اعتماد API مضمّنة في الكود |
| 9 | استغلال الوظيفة الإدارية المخفية |
| 10 | كشف بيانات اعتماد root |
| 11 | root |
يركّز الاستطلاع الأولي على تحديد الخدمات المكشوفة خارجيًا.
nmap -sC -sV -oN nmap_initial.txt TARGET
يمكن بعد ذلك إجراء فحص TCP كامل:
nmap -p- --min-rate 5000 -oN nmap_full.txt TARGET
الخدمات الخارجية ذات الصلة:
| المنفذ | الخدمة | الدور |
|---|---|---|
| 22 | SSH | إدارة عن بُعد |
| 6274 | MCPJam Inspector | سطح الهجوم الأولي |
الخدمات المرتبطة بـ localhost فقط:
| المنفذ | الخدمة | الامتياز |
|---|---|---|
| 8888 | JupyterLab | مستخدم |
| 5000 | OPSMCP | root |
يُعد مثيل MCPJam Inspector المتاح خارجيًا على المنفذ 6274 نقطة الدخول الأولية.
مثيل MCPJam Inspector المكشوف متأثر بـ CVE-2026-23744.
مصمّم MCPJam Inspector في الأساس كواجهة تطوير واختبار لخوادم MCP. تصبح الثغرة خطيرة بشكل خاص عند كشف هذه الواجهة لشبكة غير موثوقة — إذ يسمح تدفق إعداد ضعيف بوصول بيانات يتحكم بها المهاجم إلى مسار تنفيذ أوامر.
Remote Request
│
▼
MCP Server Configuration
│
▼
Command Execution
│
▼
Initial Shell
تؤثر الثغرة على إصدارات MCPJam Inspector حتى الإصدار 1.4.2 وضمنه. للاختبار المصرّح به، يمكن استخدام إثبات مفهوم عام للتحقق من الثغرة على البيئة المستهدفة.
بعد نجاح الاستغلال، تأكد من سياق التنفيذ:
id
whoami
hostname
بمجرد الحصول على موطئ قدم أولي، تصبح الخدمات المحلية مرئية.
ss -tlnp
ps aux | grep -E 'jupyter|python|node'
Network
│
▼
MCPJam Inspector
:6274
│
▼
Initial RCE
│
┌─────────┴─────────┐
▼ ▼
JupyterLab OPSMCP
:8888/local :5000/local
│ │
▼ ▼
User root
الفارق في الامتيازات بين التطبيقين الداخليين مثير للاهتمام بشكل خاص.
تم تشغيل عملية JupyterLab مع تمرير رمز المصادقة مباشرة في سطر الأوامر:
--ServerApp.token=<JUPYTER_TOKEN>
يمكن فحص سطر الأوامر عبر:
ps aux | grep jupyter
# or
cat /proc/<PID>/cmdline
يوضح هذا مشكلة شائعة في إدارة الأسرار:
Secret → Command-line argument → Process metadata → Local credential disclosure
يوفر الرمز المسترد وصولًا إلى واجهة برمجة تطبيقات Jupyter المحلية.
يوفّر Jupyter واجهة REST API لإدارة الـ kernels. بعد المصادقة بالرمز المسترد، يمكن إنشاء kernel عبر:
POST /api/kernels
يحتوي الرد على UUID للـ kernel. تتواصل kernels الخاصة بـ Jupyter عبر WebSockets:
/api/kernels/<KERNEL_ID>/channels
يستخدم بروتوكول رسائل Jupyter رسالة execute_request لتشغيل كود Python:
{
"header": { "msg_type": "execute_request" },
"content": { "code": "<AUTHORIZED_LAB_CODE>" }
}
يؤدي هذا إلى تنفيذ Python بهوية خدمة Jupyter — وفي هذه البيئة، يتم تنفيذ الـ kernel بصلاحيات User.
MCPJam RCE → JupyterLab → User
مع توفر shell بصلاحيات مستخدم، تتمثل الخطوة التالية في فحص التطبيقات المثبتة محليًا. يقع تطبيق OPSMCP تحت المسار:
/opt/opsmcp/
تكشف مراجعة الكود المصدري عن بيانات اعتماد API مضمّنة:
VALID_API_KEY = "<REDACTED_OPSMCP_API_KEY>"
يحتفظ التطبيق أيضًا بمجموعتي أدوات:
الأدوات المرئية
ops.system_statusops.list_servicesops.check_diskops.view_logsالأدوات المخفية
ops._admin_dumpops._debug_modeالوظائف الإدارية مثيرة للاهتمام بشكل خاص لأنها لا تظهر عبر التعداد الطبيعي للأدوات.
عدم التوثيق لا يعني عدم إمكانية الوصول.
لا يزال الخادم الخلفي يسجّل الأدوات المخفية ويقبل أسماءها عبر آلية تنفيذ الأدوات العامة.
يُصادق التطبيق على الطلبات باستخدام مفتاح API:
X-API-Key: <OPSMCP_API_KEY>
بمجرد المصادقة، تتحقق نقطة نهاية تنفيذ الأدوات فقط من أن الوظيفة المطلوبة موجودة — وليس من أن المتصل مصرّح له بتشغيلها.
ما يحدث:
API Key → Authenticated → Tool exists? → Execute
ما يجب أن يحدث:
API Key → Authenticated → Permission check → Allowed → Execute
└ Denied → 403
يمكن للوظيفة الإدارية المخفية الوصول إلى موارد حساسة مملوكة للمستخدم root.
تقبل الأداة الإدارية هدفًا يصف المعلومات المطلوبة. ومن الموارد المدعومة مفتاح SSH الخاص بالمستخدم root:
{
"name": "ops._admin_dump",
"arguments": {
"target": "ssh_keys",
"confirm": true
}
}
يقرأ التطبيق بعد ذلك مفتاح SSH الخاص المخزّن لحساب root، وهذا ممكن لأن OPSMCP يعمل بصلاحيات root ويمكنه قراءة /root/*. وبذلك يصبح التطبيق أداة كشف لبيانات الاعتماد.
بعد استرداد بيانات اعتماد SSH الخاصة بالمختبر المصرّح به، خزّنها بصلاحيات مقيدة:
chmod 600 <ROOT_KEY>
تحقق من سياق المصادقة الناتج:
whoami
id
مستوى الامتياز النهائي: root 🎉