Cross-Site Request Forgery (CSRF)
Title : Missing Server Side Validation of CSRF Token in Change Email Request. Target : target.com Weakness : CSRF Date Of Scan : 2021-5-11
ماهي ثغرة CSRF
تقوم هذه الثغرة بإجبار المستخدم على فعل وظيفة غير مرغوب فيها مثلا كإضافة مستخدم جديد او حذف صورة او تغيير الايميل و الباسورد بدون علم المستخدم.
تعتمد بشكل او بأخر على الهندسة الإجتماعية لأنها تتطلب ارسال الرابط الى الضحية, الرابط عبارة عن صفحة ويب بها اكواد خاصة من الموقع المصاب تقوم بتغيير الايميل بدون علم الضحية.
تحدث الثغرة عندما لايستطيع الموقع التحقق من قيمة Token الخاصة بالمستخدم , لذالك يقوم Attacker باستغلال هذا الخطأ لارسال طلب تغيير Email بدون قيمة Token لان ال Attacker ليس لديه قيمة Token لانها قيمة فريدة لكل مستخدم مثل cookies
خطوات اكتشاف ثغرة CSRF
1. الطلب الطبيعي لتغيير Email مع قيمة Token الصحيحة :
2. الاستجابة الطبيعية لتغيير Email :
3. الطلب بدون قيمة Token , لاحظ بان الموقع لم يتحقق من قيمة Token وقام بتنفيذ الطلب :
طريقة استغلال الثغرة :
سيقوم Attacker بانشاء رابط يوجد به باراميتر emailAddress وقيمته ستكون email الخاص بالهكر ويقوم بارسال الرابط الى الضحية وعندما يقوم الضحية بفتح الرابط سيتم تغيير Email الخاص بالضحية الى Email الخاص بالهكر وبذالك يستطيع الهكر تغيير الباسوورد عن طريق Email ويقوم بالاستيلاء على حساب الضحية Account TakeOver
Exploit:
<html> <body> <img src="https://www.target.com/updateOptions.do?language=en-marketCountry=US-graphicSize=1&emailAddress=attacker@gmail.com"> </body> </html>
خطر الثغرة :
يمكن للمهاجم استغلال هذه الثغرة الأمنية للاستيلاء على الحسابات من خلال ربطها بعنوان يتحكم فيه المهاجم.
كيف يتم اصلاح الثغرة :
يجب أن يكون كل طلب عملية حساسة مصحوبًا بـ Token ويجب التحقق من قيمة Token لكل مستخدم.
يجب ان يكون Token :
1. طويل ، عشوائي ، غير متكرر .
2. فريد لكل جلسة أو حتى لكل عملية.
3. جزء من URL في GET.
4. حقل مخفي في POST (نماذج).
5. لا يستطيع المهاجم معرفة / توقع هذا الرمز المميز وبالتالي لا يمكنه إنشاء طلبات لاستغلال العملية.
المراجع :
https://owasp.org/www-community/attacks/csrf
HackerOne Report
Title: Missing Server Side Validation of CSRF Token in Change Email Request. Summary: Hello Security Team, I have found a CSRF token bypass on the Email Change Functionality. Description: Missing Server Side Validation of CSRF Token in Change Email Request. This request even works without TOKEN. Steps To Reproduce: 1. Login to your Account. 2. Go to Preferences. 3. Change your email. 4. Submit the form. 5. Intercept this request in burp suite. 6. Remove TOKEN parameter from the request. 7. Forward the request. 8. You'll notice the email change successfully. POC: Send the script to the victim to make them click. <html> <body> <img src="https://www.target.com/updateOptions.do?language=en-marketCountry=US-graphicSize=1&emailAddress=attacker@gmail.com"> </body> </html> Impact: An attacker can exploit this vulnerability in order to take over accounts by associating them with an address controlled by the attacker. Recommended Fix: For CSRF Protection: Each critical operation request must be accompanied with a "token" Token is: 1. Long, Random, not repeated for application lifetime. 2. Unique per session or even per operation 3. Part of URL in GET 4. Hidden Field in POST (forms) 5. Attacker cannot know / predict this token and hence cannot create requests to exploit the operation.