چگونه توانستم با پارامتر refurl بر روی وب‌سایت ‌Digikala.com آسیب‌پذیری‌های XSS Stored و XSS Reflected را کشف کنم؟

چگونه توانستم با پارامتر refurl بر روی وب‌سایت ‌Digikala.com آسیب‌پذیری‌های XSS Stored و XSS Reflected را کشف کنم؟

۲,۸۱۷

آنچه می‌خوانید، رایت‌آپ رامین فرج‌پور، برنامه‌نویس و محقّق امنیتی، از فرآیند کشف آسیب‌پذیری بر روی وب‌سایت دیجی‌کالا است.

داخل پرانتز:

۱. این رایت‌آپ با هماهنگی تیم امنیت دیجی‌کالا منتشر شده است.

۲. رامین گزارش مربوط به این آسیب‌پذیری‌ها را حدود ۳ سال قبل با دیجی‌کالا در میان گذاشته و در حال حاضر آسیب‌پذیری نیز به طور کامل رفع شده است.

۳. این تست فقط یک نمونه آسیب‌پذیری از این سرویس را نمایش می‌دهد. در این تست هیچ‌گونه آسیبی به سایت دیجی‌کالا وارد نشده است.

آنالیز جزییات آسیب‌پذیری

Reflected XSS

پارامتر refurl آسیب‌پذیر می‌باشد.

مثال:

https://accounts.digikala.com/Load/login/?refurl=javascript:alert(document.cookie);

اگر به لینک بالا وارد شوید، صفحه‌ی ورود نمایش داده می‌شود. سپس نام کاربری و رمز ورود را وارد کنید و دکمه‌ی ورود به سایت را کلیک کنید، کد جاوااسکریپت اجرا خواهد شد.

تصویر:

Image

برای جلوگیری از بروز این آسیب‌پذیری:

در این لینک متدی برای جلوگیری از ورود کاراکترهای خاص که در پارامترها استفاده نشده بود، تعریف گردید.

https://template.digikala.com/Digikala/bundles/js_main?v=6mUwhbgor7RBFb0VZhGnL9U7kQBLxdEGqLjDkgqCMuY

1function CheckForPotentiallyDangerous(n) { 
2
3var r = [" ", " ", " ", " ", " ", " ", " ", "%2B", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "], 
4
5t = ["&", "^", "*", "/", ">", "<", "'", "+", "-", "%", "=", '"', "\\", ".", "!", ")", "(", ":", "~"]; 
6
7for (i = 0; i < t.length; i++) n = n.replaceAll(t[i], r[i]); 
8
9return n.trim() 
10
11}
12

XSS Stored

این آسیب‌پذیری را در قسمت آدرس سایت دیجی‌کالا کشف کردم.

Payload :

1><img src=x onerror=alert(1);> 
2

Image