حلقات احترافية

30‏/09‏/2016

تعرف على ثغرة CSV Injection و كيفية تفادي هذا النوع من الثغرات،

تعرف على ثغرة CSV Injection و كيفية تفادي هذا النوع من الثغرات،


⁠⁠⁠في هذه التدوينة أحبتي في الله سنتعرف على ثغرة من ثغرات تطبيقات الويب التي تم اكتشافها سنة 2014 من طرف شركة contexte و التي تسمي بــ CSV Injection  حيث في شرح اليوم سنتعرف على هذه الثغرة وسنتطرق الى  كيفية تفادي هذا النوع من الثغرات، الذي عادةً يتم استغلاله عن طريق حقن اكواد في forms، و التي تصدر بعد ذلك في هيئة ملف CSV.

و يتم تشغيل الملف المصاب (ملف CSV) في برامج مخصصة لذلك، و من أشهرها هو Microsoft Excel، و في ذلك الوقت يتم تشغيل الحقن و تفعيل الكود.

و بعد ذلك يتم استغلال الثغرة ضد من يقوم بتحميل الملف و تشغيله.يتم تجاهل هذا النوع من الثغرات كثيرا من المواقع و الشركات،و لاعتماد الهجوم الكاملعلى الضحية تشغيل الcommand المحقون. و لكن يجب معرفة ان هذه الثغرة و ان لم تكن خطيرة في البداية، فهي قد تؤدي الي Command Execution  علي الكمبيوتر المصاب.


يمكن  للمخترق من خلال هذه الثغرة وضع امر تنفيذي خاص مثلا بنظام تشغيل ويندوز كامر تشغيل الالة الحاسبة و يمكن ان يكون الامر مختلفأ كستغلال لثغرة عبر منصة ميتاسبلويت او غيرها , يمكن للضحية فتح ملف CSV و ان يتم استغلال جهازوا من خلال ملف بسيط لا يمكن لمستخدم بسيط ان يشك فية.

مثال على ذلك : 

هناك العديد من الpayloads لشرح و برهنة وجود هذا النوع من الثغرات، و لكن اشهرها هو الآتي:


cmd|’ /C calc’!A0=

الـ payload المذكور أعلاه يقوم بإعلام البرنامج المُستخدم لتشغيل الملف المصاب بأنه يريد استخدام برنامج cmd.exe (علي أنظمة الويندوز)  وذلك باستخدام الامر  C calc/  ، و الذي سيقوم بدوره بتشغيل اﻵلة الحاسبة  (calc.exe) في أنظمة الويندوز. يمكن أيضا استغلال الثغرة عن طريق إضافة @، +، أو – في بداية الـ payload بدلاً من =، المثال التالي يوضح طريقة الاستغلال:

SUM(1+1)*cmd|’ /C calc’!A0@

في المثال الثاني أعلاه يعمل الـ payload عن طريق استخدام دالة SUM، و التي تقوم بجمع القيم المعطاة لها، ثم تقوم بضرب الناتج في باقي الـ payload، و الذي هو أول payload شرحناه في هذا المقال.

طبعا لن يكون هناك ناتج حسابي حقيقي في هذه الحالة، و لكن سوف يتم تشغيل الـ command المحقون .

حلول و طرق علاج الثغرة:

بدايةً يجب التأكد من أن كل مدخل يجب ان يكون في هيئة alpha-numeric، بمعني ان يكون المدخل إما حرف من حروف اللغة الإنجليزية أو رقم من 0 إلي 9، و ذلك عبر فلترة كل مدخل و التأكد من كل حرف.
كما هو الحال في طرق الحماية ضد معظم الثغرات، و علي الرغم من أننا فلترنا كل المدخلات، يجب عدم الثقة في أي مدخل من المستخدم و يجب encoding أي character قد لا يكون في هيئة alpha-numeric.

المشكلة في هذا النوع من الثغرات ليس في وجود @، +، -، أو = في بداية الـ payload، بل في وجود الـ | ، و الذي تعتبره معظم البرامج المستخدمة لتشغيل ملفات الCSV إشارة لتنفيذ أمر خارجي مثل cmd.exe أو powershell.exe. الحل الأمثل لهذه المشكلة يكمن في إضافة \ قبل ال |. فمثلا إذا كان الpayload الأصلي كالآتي:

cmd|’ /C calc’!A0=
يكون الpayload الناتج:

cmd\|’ /C calc’!A0=
و الذي سيمنع الpayload من التشغيل، و من ثم حماية المستخدم من هذا النوع من الثغرات.
يمكن توضيح هذه العملية من خلال كتابة كود python بسيط. يمكن رؤية الكود في الصورة التالية:



 في الكود الموضح أعلاه يتم تعريف function تقوم بالتحقق من أول حرف من المدخل. إذا كان الحرف واحد من @، +، -، =، أو | يتم استخدام replace لتغيير أي | في الpayload ل |\. بعد ذلك يتم وضع الناتج بين علامتي ‘، و ذلك لعرض الpayload كنص بدلا من formula.

إذا تم تشغيل الكود المذكور يصبح لدينا الناتج التالي:

رفع الصور

ليست هناك تعليقات:

إرسال تعليق