سلام من
مهدی ام
و این اولین write-up من به فارسیه.
توی این مقاله میخوام یکی از باگهام رو که تبدیل به Zero Click Account Takeover شد قدم به قدم توضیح بدم. اگه تازهکاری، احتمالا به کارت بیاد.
مقدمه
برخلاف خیلیها، وقتی یه target انتخاب میکنم، اول میرم سراغ بخشهای ساده مثل Contact Us و صفحات فرعی. چرا؟ چون معمولا ساده نوشته شدن و راحتتر میشه طرز فکر developer رو خوند.
البته که میتونی مستقیم بری سراغ بخشهای سخت تر مثل authentication
Unpredictable IDOR
بعد از مدتی کار روی یه برنامه خیلی قدیمی و بزرگ، متوجه شدم یه feature قدیمی وجود داره که IDOR میخوره و میتونستم اسم victim رو تغییر بدم.
اما مشکل این بود که ID عددی نبود؛ یه hash غیرقابل پیشبینی بود. همین باعث میشد unpredictable IDOR بشه.
منم مثل همیشه اینارو سریع report نمیدم.
اینجا هم چند ماه وقت گذاشتم.
Predictable IDOR
یکی دو ماه اول سعی کردم یه راه پیدا کنم تا hash بقیه رو پیدا کنم یا حتی ریورسش کنم.
تمام JavaScript هارو رو خوندم، همه requestها رو بررسی کردم، اما نتیجهای نگرفتم.
تا اینکه توی یکی از ساب هاش، بخش Contact Us دیدم وقتی email و اطلاعات رو وارد میکنی (در حالی که login نیستی)، توی response یه cookie جدید ست میشه.
اولین فکری که کردم این بود که شاید بشه باهاش Account Takeover بزنم.
با اون cookie جاهای مختلف برنامه رو تست کردم و توی یکی از path ها دیدم email قربانی reflect میشه.
اما توی پنلش هرچی با اون cookie تست کردم، یا login نبودم و ریدایرکت میشدم یا وقتی login میکردم و کوکی رو تست میکردم فقط اطلاعات خودم رو میدیدم.
یه ایده جدید به ذهنم رسید:
گفتم شاید همون hash توی ریسپانسی که ایمیل رفلکت میشه، وجود داشته باشه.
سریع hash خودمو درآوردم و دوباره رفتم همونجا که ایمیل رفلکت میشد.
توی response سرچ زدم و دیدم دقیقا همون hash رفلکت شده. به به
یعنی میتونستم hash هر ایمیلیو پیدا کنم.
تا اینجای کار تونسته بودم IDOR بزنم و اسم بقیه رو تغییر بدم.
ولی آیا بازم سریع باید میرفتم ریپورت بدم یا هنوز زوده؟
Zero click ATO
ریسک کردم و ریپورت ندادم.
اینجام نزدیک یه ماه گیر کردم. دائم فکر میکردم شاید یه جایی دولوپر اشتباه کرده باشه و اطلاعات قربانی رو بهم نشون بده.
حتی گجتهامو روی یه برگه نوشتم:
- Predictable IDOR
- Cookie (victim email in contact Us)
- Hash of victim
هیچکدوم جواب نمیداد و تقریبا داشتم بیخیال میشدم.
تا اینکه یه شب موقع دیدن دوباره Breaking Bad (لحظه مشت خوردن آقای سفید توسط هنک 😅) یه ایده به ذهنم رسید:
چرا وقتی لاگینم نیام و اون Predictable IDOR که ساختمو بزنم؟
با ناامیدی رفتم تست کردم و فلو آخرم اینطوری شد:
- توی Contact Us ایمیل victim رو زدم و کوکی رو گرفتم
- توی یه مسیر دیگه hash رو از response گرفتم
- بعدش با اکانت خودم login کردم
- همون hash رو با ایدور زدم
- وقتی برگشتم توی بخش User Info وارد اکانت victim شدم 😋😋
رفتم ریپورتو دادم، کریتیکال شد و بانتیمو هم گرفتم.
تموم شد امیدوارم خوشتون اومده باشه.
شکستها و فکرهامو نوشتم که ببینید چطوری جلو رفتم و آخرش چطوری شده.
واقعا پاره شدم تا اینو نوشتم. حتی موقع ریپورت نوشتن سردرد گرفتم و استف برنامه ۳ بار ازم PoC ویدیو خواست تا تونست reproduce ش کنه.
و این بین هم چند تا XSS روش گزارش دادم.
این باگ ۹ سال بیشتر وجود داشته و کسی پیدا نکرده بود.
احتمالا مقاله بعدیم به زودی در مورد یه باگ دیگم: blind idor که باهاش تونستم Mass PII Leakage بزنم و اطلاعات نزدیک ۵۰ میلیون بیشتر آدم تو دنیا رو ببینم.
توییترمو
دنبال کنید که اونجا لینکشو میذارم.