
تم اكتشاف أن Frappe Framework الإصدار v15.72.4 يحتوي على ثغرة حقن SQL عبر معلمة fieldname في نقطة نهاية API frappe.client.get_value.
📌 الملخص
تم اكتشاف ثغرة حقن SQL أعمى قائمة على الوقت في نقطة نهاية API الخاصة بـ frappe.client.get_value في إطار عمل Frappe الإصدار v15.72.4 (وموجودة أيضًا في قاعدة أكواد ERPNext v15.67.0). يمكن لمستخدم مصادق لديه صلاحية الوصول إلى API الخاصة بالتقارير/العميل حقن SQL عبر معامل fieldname. من خلال إدراج دوال تأخير زمني (مثل sleep(15)) في معامل fieldname، يمكن للمهاجم تأكيد الحقن عبر تأخيرات استجابة قابلة للقياس — مما يتيح رفض الخدمة، وكشف المعلومات (عبر تقنيات الحقن الأعمى)، والتلاعب بالبيانات.
نوع الثغرة: حقن SQL (أعمى قائم على الوقت) (CWE‑89)
المنتجات المتأثرة: Frappe Framework / ERPNext
الإصدارات المتأثرة (المبلّغ عنها):
المكوّن المتأثر: طريقة API frappe.client.get_value (frappe/client.py)
نقطة النهاية القابلة للاستغلال:
/api/method/frappe.client.get_value
مثال على استعلام قابل للاستغلال:
/api/method/frappe.client.get_value?doctype=Report&fieldname=ref_doctype+%2F+sleep(15)+&filters=Profit+and+Loss+Statement&_=1752174156893
المعامل القابل للاستغلال: fieldname (لا يتم تطهيره بشكل صحيح / يُستخدم بالتسلسل المباشر في SQL)
نوع الهجوم: عن بُعد (يتطلب مصادقة ووصولًا إلى API الخاصة بالتقارير)
الخطورة: عالية (حقن SQL الأعمى القائم على الوقت يتيح استخراج البيانات ورفض الخدمة والتلاعب بها)
درجة CVSS v3.1 التقديرية: 8.0 (عالية) — تقدير يستند إلى حقن SQL عن بُعد يتطلب مصادقة ويتيح كشف البيانات ورفض الخدمة؛ يجب أن تقوم الجهات المخصصة (assigners) بإجراء التقييم المعتمد.
الحالة: غير مُصلَحة (كما ورد في التقرير)
اكتشفها: Mohammed Aloli (GitHub: https://github.com/MoAlali)
تاريخ الاكتشاف: غير محدد في التقرير
معرّف CVE: CVE-2025-56380
اختبر فقط في بيئات مخولة/مختبرية. لا تشغّل الهجوم ضد أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها.
طلب إثبات المفهوم (مثال):

GET /api/method/frappe.client.get_value?doctype=Report&fieldname=ref_doctype+%2F+sleep(15)+&filters=Profit+and+Loss+Statement&_=1752174156893
خطوات التأكيد
+%2F+sleep(15)+& ولاحظ أن الاستجابة تعود فورًا — مما يؤكد أن الحقن يسبب التأخير الزمني.ملاحظات: استبدل sleep(15) بدوال تأخير زمني أخرى أو قيم زمنية مناسبة لنظام إدارة قواعد البيانات الخلفي (مثل pg_sleep(n) لـ PostgreSQL) اعتمادًا على محرك قاعدة البيانات. يوضح إثبات المفهوم الحقن الأعمى عبر التوقيت؛ ويمكن استخدام حمولات أكثر تعقيدًا لاستخراج البيانات بتًا بتًا.
ناقل الهجوم: يقوم مستخدم مصادق بتشكيل طلبات GET إلى /api/method/frappe.client.get_value مع معامل fieldname خبيث يحتوي على حمولات SQL (دوال تأخير زمني).
الأثر:
fieldname وكل المدخلات المقدمة من المستخدم لا يتم تسلسلها مباشرة في SQL. استخدم الاستعلامات المُعلَّمة أو واجهات ORM التي تربط المعاملات بشكل صحيح.sleep, pg_sleep, benchmark, /, ;).frappe.client.get_value ومسار الكود الذي يعالج fieldname/عوامل التصفية، واستبدال التسلسل غير الآمن بواجهات برمجة آمنة، وإصدار تصحيح أمني. ويجب على المشغلين تطبيق التحديثات فورًا.https://github.com/MoAlali — X: https://x.com/alaliksa_ — LinkedIn: https://www.linkedin.com/in/mohammedaloli/https://github.com/frappe/frappe , https://github.com/frappe/erpnexthttps://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.htmlاكتشفها Mohammed Aloli
تُقدَّم هذه المعلومات لأغراض دفاعية ولمعالجة الثغرات فقط. لا تحاول استغلال هذه الثغرة ضد أنظمة لا تملكها أو ليس لديك تفويض صريح لاختبارها. يجب على المشغلين إعطاء الأولوية للتصحيح، وتطبيق إصلاحات البرمجة الآمنة، واتباع إرشادات التخفيف أعلاه.