تسميم صفحات المواقع بشكل مؤقت وطرق الحماية 101

أمين راوه
20/01/2021

مقدمة
في هذه التدوينة نتحدث عن آلية عمل Web Cache والثغرات الأمنية الخاصة بها. حيث يستطيع المهاجم تغيير الصفحات الخاصة في الموقع لكل الزوار بشكل مؤقت. أيضا، سوف نستعرض طرق الحماية لتفادي هذا النوع من الثغرات.

ما هو Web Cache
Web Cache عبارة عن آلية او تقنية تقوم على وضع Caching Proxy في المنتصف بين المستخدم و Web Server كالشكل الموجود في الصورة:
فائدة Web Cache
فائدة Cache بشكل عام سواء كان Web Cache او Caching Proxy او غيرها, هو حفظ المعلومة وتسريع ايصالها للمستخدم دون الحاجة للرجوع الى Server الأصلي. فمثلا موقع يعرض أخبار بتحديث يومي (كل 24 ساعة) يستطيع وضع أكثر من Web Cache في المنتصف لتقليل الحمل على Web Server وذلك بإرسال الرد المحفوظ في Web Cache لجميع الزوار الذين يطلبون الدخول لنفس الصفحة. عادة ما يعمل Web Caching بحفظ الصفحة لمدة مؤقتة وبعد ذلك يأخذ رد جديد من Web Server وحفظه حتى يضمن بوجود النسخة الأخيرة والمحدثة من الرد.

آلية التخزين في Web Cache
السؤال المهم: كيف يستطيع Web Cache معرفة إذا كان هذا الطلب تم تخرين رده مسبقًا او لا؟ هناك عدة عوامل يستطيع المسؤول عن Web Cache تعريفها لتحديد اذا كانت الصفحة المطلوبة يمكن اخذها من Web Cache او وجوب أخذها من Web Server مثلا عامل الوقت, وهنا يتم تحديد وقت لمدة التخزين في Cache قبل طلب صفحة جديدة من Server. يوجد نوع آخر وهو الاعتماد على المفاتيح "Cache Keys" مثلا Host في HTTP HEADER عادة ما يستخدم كوسيلة للتفرقة(Cache Keys) هناك نوع ثاني من المفاتيح وتسمى"Unkeyed" وهي نوع من المفاتيح يستخدم كجزء من الصفحة ولكن لا يدخل في عامل التفرقة.

مثال:
طلب المستخدم الأول
GET /index.html HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: */*
X-User-Background: pink
Cookie: ASP.NET_Session=121212;
طلب المستخدم الثاني
GET /index.html HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: */*
X-User-Background: blue	
Cookie: ASP.NET_Session=31313;
في هذا المثال يستطيع مستخدم الموقع اختيار لون للخلفية، المستخدم الأول اختار اللون الوردي بينما المستخدم الثاني اختار الأزرق. في حال Web Cache اعتمد على مدخل Host فقط وتم تخرين الرد وهو اللون "الوردي", جميع زوار الموقع سوف يرون الموقع باللون الوردي لمدة مؤقتة بغض النظر عن اختيارهم.

مثال آخر عملي: لموقع يستخدم رابط الصفحة و"Host" كجزء من"Cache keys" وCookie في الصفحة ولكنه يعتبرها"Unkeyed".
هنا يقوم المهاجم بزيارة الصفحة الرئيسية ويلاحظ ان قيمة"fehost" تنعكس في رد الصفحة. أيضا، لاحظ ان قيمة "X-Cache: hit" وتعني أن هذا الرد صدر من Web Cache وليس من Server.
هنا قام المهاجم بدخول رابط عشوائي. لاحظ "X-Cache: miss" وتعني ان هذا الرد جديد وأتى من Server!
الان قام المهاجم بالانتظار لبعض الوقت حتى يتأكد بانتهاء مدة تخزين Web Cache وأيضا قام بتغيير قيمة"fehost". لاحظ ان "X-Cache:miss" وتعني هذا الرد أتى من Server مباشرة. أيضا, الرد يحتوي على قيمة"fehost" التي وضعها المهاجم.
مرة أخرى, قام المهاجم بالانتظار لبضع الوقت ووضع XSS payload في متغير"fehost"!
عند زيارة رابط المهاجم العشوائي، يتم تنفيذ alert(1)
بعد تأكد المهاجم من وجود الثغرة, الان يحاول تسميم الصفحة الرئيسية للموقع.
الان جميع زائرين الموقع معرضين لهجوم XSS لمدة مؤقتة.

مخاطر Web Cache Poisoning
هناك بعض Web Cache تستخدم جزء من طلب زوار الموقع في الرد"Unkeyed" في هذه الحالة يستطيع المهاجم تغيير"Unkeyed" وتغيير محتوى الصفحة او تسميمها لكي تحتوي على برمجيات خبيثة.

ختاما
أفضل آلية للحماية هي بتعطيل خاصية Web Cache. أيضًا، بضبط خاصية Caching لتحتوي على صفحات ثابتة"static" بحيث لا تعتمد بأي شكل على مدخلات الزوار.

المراجع

لمشاركة هذه المدونة
تابعنا
طور مهاراتك من خلال متابعة آخر منشورات فريقنا
مدونات آخرى