إن كنت من النائمين البارحة في الساعة 4 صباحاً تقريباً فلقد فاتتك مناسبة عظيمة والأولى بتاريخ الموقع وهي إختراق iSecur1ty بحاله ويبدو أن المثل القائل “نجار بابه مكسور” صحيح! ولولا أن زيد تدارك الوضع خلال دقائق وأزعجني باتصالاته التي لم أرد عليها لأني كنت نائم مثلك لرأينا الاندكس يرفرف حتى الآن.

 

في البداية دعونا نتفق على عدة أمور. ما حدث اختراق وهذا لا خلاف عليه وليفخر المخترق بانجازه الذي دام لدقائق لكن بنفس الوقت يجب معرفة أن المخترق لم يصل للسيرفر ويستبدل الاندكس كما ادعى وكل ما هنالك أنه تمكن من حقن كود بمحتوى الموقع لتحويل الزوار للاندكس الذي رفعها على موقع آخر.

الآن من الطبيعي أن البعض يتسأل عن كيفية حدوث هذا الاختراق وسببه. في iSecur1ty نحن نستخدم سكريبت Joomla! لادارة محتوى الموقع وهو سكريبت مجاني ومفتوح المصدر. قبل سنة أو أكثر أضفنا قسم الأسئلة والأجوبة للموقع وهذه الاضافة ليست موجودة كما هي بل استخدمنا اضافة لبناء صفحات ارسال الأسئلة وبرمجنا كود خاص يقوم بأخذ مدخلات المستخدم وادخالها بشكل اوتوماتيكي بقسم الأسئلة في قاعدة البيانات.

ما نتعلمه في صف أول ابتدائي هو فلترة مدخلات المستخدم والتأكد منها قبل ادخالها لقاعدة البيانات (لتفادي ثغرات sql injection) وتحويلها لترميز html عند عرضها في صفحات الموقع (لمنع ثغرات XSS و html injection كما في هذه الحالة). الآن، عندما يرسل شخص سؤال يتم فلترة العنوان وجميع المدخلات قبل ارسالها لقاعدة البيانات والبديهي أن يقوم سكريبت جملة بتحويل هذه المدخلات لترميز html عند عرضها بالموقع. هذا لم يحدث مع جملة!

تبين أن سكريبت جملة واضافاته مبرمجة بطريقة عشوائية بشكل كبير ويجب الاعتماد على فلترة المدخلات قبل ادخالها لقاعدة البيانات فقط وعدم الوثوق بأي شيء آخر. في بعض الأماكن يتم ترميز المعلومات عند عرضها وفي أماكن أخرى ستفاجئ بعرضها دون اي ترميز (بعض هذه الأماكن داخل لوحة التحكم!!) وهذا ضعف أمني كون طريقة تصرف جملة عند عرض المعلومات أصبحت غير معروفة!

الحق يقال أن الخطئ الأساسي مني وهذا أمر أتحمله وحدي وليس لزيد أو فريق العمل في iSecur1ty أي مسؤولية عن ذلك. كان علي أن أجري مزيد من الاختبارات وأتأكد كيف سيعرض سكريبت جملة هذه المدخلات ولا أعتبر أنه من البديهي ترميز كل شيء قبل عرضه على المستخدمين.

مرة لك ومرة عليك وهالمرة كانت علينا والقافلة تسير.

عبدالمهيمن الآغا،
فريق عمل iSecur1ty

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn