HTTP Parameter Pollution
الوصف
تحدث هذه الثغرات عندما يستقبل موقع ما مدخلات المستخدم , ويقوم باستخدامها في عمل طلب لنظام اخر , بدون اي فلترة للمدخلات , تحدث هذه الثغرات من جانب السرفر او على متصفح العميل.
توفر كل من مواقع Stackexchange Silverlightfox امثلة على هذا النوع من الهجمات , افترض لدينا الموقع التالي https://www.example.com/transferMoney.php والذي يمكن الوصول له , عبر طلب بوست , والذي ياخذ المعاملات التالية:
amount=1000&fromAccount=12345
عندما يقوم الموقع او التطبيق بمعالجة هذا الطلب , في الاول يستلم القيم من المستخدم , بعد ذلك يتوجه بعمل طلب على نظام دفع موجود في مكان اخر فلنسميه بالنظام الثالث , وينفذ عملية التحويل عبر الرابط التالي.
رابط نظام الدفع الذي يستخدمه السيرفر: https://backend.example/doTransfer.php
البارمترات المستخدمه في عملية الدفع من ناحية السيرفر toAccount=9876&amount=1000&fromAccount=12345
الان نفترض ان النظام الثاني , لديه ثلاث بارمترات, فليكن البارامتر الاول هو كمية المال الذي سيتم تحويله , والبارامتر الثاني هو حساب المستخدم الذي سيقوم بتحويل المال منه , البارامتر الثالث هو حساب الشركة الذي سيستقبل التحويل:
amount=1000&fromAccount=12345&toAccount=99999
اذا كان الموقع مصاب بهذا النوع من الثغرات اذا يمكن للمهاجم , اضافة معامل جديد رابع ويكون بنفس اسم البارامتر الثالث فيصبح الرابط كالتالي:
amount=1000&fromAccount=12345&toAccount=9876&toAccount=99999
Iفي هذه الحالة البارامتر الاخير الذي قام باضافته المهاجم , سيتم احتسابه بدلا عن البارامتر الثالث , بسبب التقنية المستخدم والتي تاخذ اخر قيمة للبارامتر وتتجاهل القيم السابقة . وتتمم عملية التحويل لحساب المهاجم الذي هو ٩٩٩٩ بدلا من حساب الشركة ٩٨٧٦ .
في الناحية الاخرى , هجمات HPP (الموجودة في ناحية العميل ), تتكون من حقن بارامترات اضافية في نهاية الرابط , مثال من موقع owasp افترض ان لدينا هذا الكود:
1 <? $val=htmlspecialchars($_GET['par'],ENT_QUOTES); ?>
2 <a href="/page.php?action=view&par='.<?=$val?>.'">View Me!</a>
كود بسيط , يستقبل قيمة من بارامتر اسمه par بعد ذلك يتاكد انه كود نظيف ,غير محقون باي اكواد ثم يقوم بتكوين رابط وعرضه داخل الصفحة , لو افترضنا ان الهاكر وضع القيم التالية:
http://host/page.php?par=123%26action=edit
يكون الرابط النهائي :
<a href="/page.php?action=view&par=123&action=edit">View Me!</a>
ربما يتسبب ذلك , في تصريح التطبيق للمستخدم بالتعديل بدلا من العرض استنادا لقيمة بارامتر يسمى action.
تعتمد ثغراتHPP بنوعيهها اعتماد كامل على التكنولوجيا المستخدمة من جانب السرفر , وكيفية معالجتها للمدخلات القادمة , لنأخذ مثال اذا كان لدينا الرابط التالي example.com?id=2&topic=2&id=5 تقوم لغة البرمجة PHP اذا كانت منصبة على سيرفر الاباتشي , باستخدام اخر قيمة مكررة للبارامتر الواحد بينما تقوم Tomcat/Apache باستخدام اول قيمة للبارامتر في حين تقوم لغة ASP/IIS node.js ,, بتجميع معظم القيم ووضعها في مصفوفة بنفس اسم البارامتر , لذلك ايجاد الثغرات في هذه الحالة يتطلب منك معرفة بكيفية معالجة البارمترات من قبل الموقع.
أمثلة
1. HackerOne Social Sharing Buttons
الصعوبة: منخفضة
الرابط: https://hackerone.com/blog/introducing-signal-and-impact
رابط الابلاغ: https://hackerone.com/reports/105953
تاريخ الابلاغ: December 18, 2015
المكافئة: $500
الوصف: يقوم موقع هاكر ون , بتضمين روابط لمشاركة المحتوى على مواقع التواصل مثل فيسبوك وتويتر , هذه الروابط تحتوى على بارمترات معينة لكل موقع.
اكتشف احد الهاكرز ثغرة تمكنه من اضافة بارمتر اخر للرابط ـ(وربما يكون البارمتر عبارة عن رابط لموقع اخر), وعند معالجة الصفحة سيقوم موقع هاكر ون باضافة رابط الموقع داخل محتوى الصفحة مما يوثر في نشر رابط المواقع الغير مرغوب فيها على صفحات المستخدمين بمواقع التواصل عند الضغط على ازرار المشاركة
المثال المستخدم موجود في الصفحة التالي:
https://hackerone.com/blog/introducing-signal
بعد الحقن
https://hackerone.com/blog/introducing-signal?&u=https://vk.com/durov
لاحظ البارامتر الاضافي . لو قام احد زوار موقع هاكر ون بالدخول على رابط يحتوى على هذا البارامتر , بعد ذلك اراد مشاركة الصفحة عن طريق الضغط على زرار التفاعل بموقع التواصل, سيكون الرابط كالتالي :
https://www.facebook.com/sharer.php?u=https://hackerone.com/blog/introducing-signal?&u=https://vk.com/durov
اخر قيمة للبارامتر , وهو الذي اضافه المهاجم , تم اعتمادها من قبل موقع التواصل فيسبوك عند نشر رابط الصفحة , ايضا يمكن تغيير محتوى التغريدة على موقع تويتر عند الضغط على زر Tweet:
https://hackerone.com/blog/introducing-signal?&u=https://vk.com/durov&text=another_site:https://vk.com/durov
2. Twitter الغاء اشعارات
الصعوبة: منخفضة
الرابط: twitter.com
رابط الابلاغ: merttasci.com/blog/twitter-hpp-vulnerability
تاريخ الابلاغ: اغسطس 23, 2015
المكافاة: $700
الوصف:
في اغسطس ٢٠١٥ , اكتشف هاكر يسمى ميرت تاسكي , رابط مثير للاهتمام , اثناء انزعاجه باشعارات تويتر , ونيته في وقفها وكان الرابط كالتالي:
https://twitter.com/i/u?t=1&cn=bWV&sig=657&iid=F6542&uid=1134885524&nid=22+26
هل لاحظت هذا البارامترuid ? ربما يكون هو معرف تويتر الخاص بك , افترض ميرت انه اذا قام بتغيير قيمته فيمكنه خداع تويتر والغاء اشعارات شخص اخر ولكنه فشل , رد الموقع كان عبارة عن رسالة خطا.
ولكنه صمم ولم يستسلم , قام ميرت باضافة بارامتر اضافي , فاصبح الرابط كالتالي:
https://twitter.com/i/u?iid=F6542&uid=2321301342&uid=1134885524&nid=22+26
بالفعل نجح بيرت , وقام بالغاء اشعارات شخص اخر , واثبت ان تويتر مصاب بثغرة اتش بي بي التي تسبب وقف الاشعارات الخاصة بالمستخدمين والتي ترسل على الاميل الخاص بهم.
3. Twitter Web Intents
الصعوبة: منخفضة
الرابط: twitter.com
رابط المقال: Parameter Tamperting Attack on Twitter Web Intents
تاريخ الابلاغ: نوفمبر 2015
المكافاة: Undisclosed
الوصف:
يوفر موقع تويتر , نوافذ منبثقة , للتفاعل مع التغريدات , والاعجاب بها , ومتابعة الاشخاص بطريقة مباشرة , طبقا للوثيقة الخاصة بهم , فهم يوفرون للمستخدم امكانية التفاعل مع تويتر من داخل موقعهم بدون (الخروج منه , او زيارة صفحة خارجية , او السماح لتطبيق بالولوج لحسابهم ).* كما بالصورة :
اثناء الاختبار وجد هاكر اسمه ايريك رافالوف , ان الاربع تفاعلات ,(التغريد , متابعة المستخدمين و الاعجاب بالتغريدات , واعادة التغريد) جميعهم مصابين بثغرة HPP.
تبعا لكلام ايريك على مدونته لو قمنا بكتابة الرابط التالي و ادخال قيمتين للبارمتر screen_name:
https://twitter.com/intent/follow?screen_name=twitter&scnreen_name=erictest3
سيقوم موقع تويتر , باخذ القيمة الثانية بدلا عن القيمة الاولى. According to Eric, the web form looked like:
1 <form class="follow " id="follow_btn_form" action="/intent/follow?screen_name=er\
2 icrtest3" method="post">
3 <input type="hidden" name="authenticity_token" value="...">
4 <input type="hidden" name="screen_name" value="twitter">
5
6 <input type="hidden" name="profile_id" value="783214">
7
8 <button class="button" type="submit" >
9 <b></b><strong>Follow</strong>
10 </button>
11 </form>
المستخدم العادي قد ينوي متابعة شخص تويتر , قد يلاحظ المستخدم معرف تويتر موجود في البارامتر الاول , ويظن انه بذلك يتابع تويتر عند الضغط على الزر , ولكن الحقيقه انه يتابع erictest3.
نفس السيناريو يحدث عند الاعجاب بتغريدة , لاحظ ايرك انه يمكنه اضافة البارمتر السابق مره اخرى (مع ان ذلك ليس له علاقة بالاعجاب بالتغريدة ). في الاخر يكون الرابط كالتالي:
https://twitter.com/intent/like?tweet_id=6616252302978211845&screen_name=erictest3
عند الضغط , على زر الاعجاب , يسجل التطبيق اعجاب بالتغريدة عند المستخدم الصحيح , ولكن عند الضغط على متابعة , سيتابع erictest3 مرة اخرى.
الملخص
تعد المخاطر اللتي تحدث نتيجة وجود ثغرات HPP ناتجة عن الافعال التي يقوم بها التطبيق اثناء معالجة المدخلات المرسلة .
اكتشاف هذا النوع من الثغرات يعتمد علي التجريب والممارسة , اكثر من الثغرات الاخري , لان الافعال التي يقوم بها التطبيق على السرفر ربما تكون معقدة جدا ولا يمكن التنبؤ بها , لذلك التطبيق الفعلي والتلاعب بالمدخلات هو افضل الطرق , لكشف مايحدث ناحية السرفر.
اثناء التطبيق وقراءة الاخطاء , ربما تكون قادر علي اكتشاف مايحدث عند تواصل سيرفر مع سيرفر اخر , عندئذ قم باختبار هذا النوع من الثغرات , دائما تكون الروابط هيا افضل خطوة للبدء.