
كاشف + تحليل السبب الجذري لـ CVE-2026-72898 (حقن SQL غير مصادق عليه في Metabase عبر reset_password)
حقن SQL غير مصادق عليه في Metabase عبر POST /api/session/reset_password.
CVSS 10.0، مدرج في كتالوج CISA KEV، ويُستغل في البرية.
حقل غير معلن في نص طلب إعادة تعيين كلمة المرور يصل إلى البحث عن مستخدم قاعدة بيانات التطبيق
كبنية HoneySQL بدلاً من معرّف مُتحقق منه. مفتاح كائن JSON يصبح كلمة Clojure أساسية،
لذا فإن {"raw": "<SQL>"} يُترجم إلى جملة :raw الخاصة بـ HoneySQL
ويُصدر — SQL تعسفي ضد قاعدة بيانات تطبيق Metabase،
دون أي مصادقة.
يحتوي هذا المستودع على كاشف (أداة حكم أعمى قائمة على الوقت) و تحليل السبب الجذري المستمد من تصحيح البائع. وهو مخصص للمدافعين للتحقق من تعرضهم الخاص وللباحثين في الأمن لدراسة الثغرة. وهو لا يستخرج البيانات أو يوفر استغلالاً مسلحاً للاستيلاء على النظام.
cve-2026-72898.py — كاشف مقيد بالإصدار، يُغلق عند الفشل (VULN / SAFE / UNTESTED)TECHNICAL.md — تحليل كامل للسبب الجذري من فرق التصحيح v0.63.2 → v0.63.15lab/docker-compose.yml — نسخة معرضة + مصححة لإعادة الإنتاجيُبلغ الكاشف بـ VULN ضد نسخة متأثرة و SAFE ضد نسخة مصححة —
و UNTESTED (وليس أبداً SAFE خاطئاً) عندما يكون الطلب مقيداً أو مخزناً مؤقتاً أو لا يصل
إلى التطبيق. كما يتم توفير تسجيل كـ بث asciinema.
| الفرع | المعرض | المصحح |
|---|---|---|
| 0.58 / 1.58 | < 0.58.24 | 0.58.24 |
| 0.59 / 1.59 | < 0.59.21 | 0.59.21 |
| 0.60 / 1.60 | < 0.60.17 | 0.60.17 |
| 0.61 / 1.61 | < 0.61.11 | 0.61.11 |
| 0.62 / 1.62 | < 0.62.9 | 0.62.9 |
| 0.63 / 1.63 | < 0.63.5 | 0.63.5 |
الاستشارة: GHSA-vwf4-m7j8-wcjf. إذا كنت تشغل نسخة متأثرة، قم بالترقية الآن — هذه الثغرة تُستغل في البرية.
POST /api/session/reset_password HTTP/1.1
Content-Type: application/json
{"token":"1_00000000-0000-0000-0000-000000000000",
"password":"Placeholder1!",
"user-id":{"raw":"<ARBITRARY SQL>"}}
ينتج عنها، في قاعدة بيانات التطبيق:
SELECT id, ... FROM core_user WHERE id = (<ARBITRARY SQL>)
الثغرة عمياء — تدفق إعادة التعيين يبتلع أخطاء SQL ويعيد استجابة متطابقة
400 {"errors":{"password":"Invalid reset token"}} في كل حالة — لذا يستخدم الكاشف
أوراكل زمني. راجع TECHNICAL.md لتدفق البيانات الكامل وفرق التصحيح.
python3 cve-2026-72898.py https://metabase.example.com # H2 app db (الافتراضي)
python3 cve-2026-72898.py https://metabase.example.com --engine postgres # pg_sleep oracle
python3 cve-2026-72898.py https://metabase.example.com --json --trials 5
رمز الخروج 0 = VULN، 1 = SAFE أو UNTESTED.
الأحكام هي VULN / SAFE / UNTESTED — وليس أبداً "ربما سليم". الأداة:
--force يتجاوز ذلك عمداً؛X-Forwarded-For لكل طلب، لأن نقطة إعادة التعيين تقيد عند 10 محاولات
واستجابة التقييد هي 400 سريعة تحاكي سلبية بخلاف ذلك؛sum(x) عبر SYSTEM_RANGE) لا يمكن للمحرك تحسينه بعيداً، و
تتطلب أن يتجاوز التأخير كلاً من الحد الأدنى المطلق وانتشار توقيت عنصر التحكم نفسه؛UNTESTED، وليس SAFE.cd lab
docker compose up -d # 3300 = معرض v0.63.2، 3301 = مصحح v0.63.15
# انتظر ~90 ثانية لتهيئة قاعدة البيانات الأولى
python3 ../cve-2026-72898.py http://127.0.0.1:3300 # -> VULN
python3 ../cve-2026-72898.py http://127.0.0.1:3301 --force # -> SAFE
تم التحقق: v0.63.2 يُظهر فارقاً زمنياً يزيد عن 8 ثوانٍ يتدرج خطياً مع عدد صفوف الحمولة (5M→0.85s، 10M→1.96s، 20M→4.61s، 40M→7.97s)؛ v0.63.15 لا يُظهر أي فارق.
اختبر فقط الأنظمة التي تملكها أو التي صرحت لك صراحةً بتقييمها. الوصول غير المصرح به إلى أنظمة الكمبيوتر غير قانوني في معظم الولايات القضائية. تكتشف هذه الأداة الثغرة باستخدام مسبار زمني غير ضار ولا تقرأ أو تعدل أو تستخرج البيانات عمداً.
MIT — راجع LICENSE.