مقال : التعرف على ثغرات CSV Injection وطرق معالجتها
في هذا المقال سوف نتحدث عن نوع من انواع الثغرات يسمى بـ CSV Injection وسوف نتطرق الى كيفيه تفادي هذا النوع من الثغرات . هذا النوع يعتبر من انواع ثغرات تطبيقات الويب, و الذي اكتشفته شركة Context في عام 2014. عادةً، يتم استغلال هذه الثغرة عن طريق حقن اكواد في forms، و التي تصدر بعد ذلك في هيئة ملف CSV.
بعد التصدير يتم تشغيل الملف المصاب في برامج مخصصة لذلك، أشهرها هو Microsoft Excel، و في ذلك الوقت يتم تشغيل الحقن و تفعيل الكود.
سيناريو الهجوم الخاص بهذا النوع من الثغرات يكون بهدف استغلال الثغرة ضد من يقم بتحميل الملف و تشغيله. هذا النوع من الثغرات يتم تجاله من كثير من المواقع و الشركات لاعتماد الهجوم الكامل علي موافقة الضحية علي تشغيل الcommand المحقون. و لكن يجب معرفة ان هذه الثغرة و ان لم تكن خطيرة في البداية، فهي قد تؤدي الي Command Execution علي الكمبيوتر المصاب.
مثال :
هناك العديد من ال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.
إذا تم تشغيل الكود المذكور يصبح لدينا الناتج التالي:
ترجمة لمقال : CSV Injection Revisited – Making Things More Dangerous لصاحبها Andy G .
تعرف ايضا على هجمات الـCommand Injection
بيطلع تحذير على الاكسل مش مهم نحاول نتخطاه
لكن الان اذا حبيت اخليه بدل ما يشغل الحاسبة بدى خليه يحمل ملف مثلا كيف راح يكون الامر