كيف قدرت اكتشف ثغرات حرجة في اكبر شركة توصيل للطعام؟ فوق ال+20,000$
1- اختراق فوق ال380K الف مطعم 2- GraphQL Path Traversal Led to Modify Menu Price 3- سحب ارباح اي سائق في الشركه
حياكم الله ان شاء الله تستفيدون.
عند التعامل مع تارقت ضخم، اكبر خطأ هو انك تبدا مباشرة بالfuzzing او الريكون الغير مفهوم بدون فهم المنظومة. أول ما ركزت عليه هو اني افهم الـ Business Logic، لأن كثير من الثغرات الحرجة في المنتجات الكبيرة تكون منطقية اكثر.
الشركة عندها اكثر من نوع مستخدم: عميل يطلب (Customer)، سائق يوصل (Couriers)، مطعم يستقبل (Restaurant).
كل طرف له موقع وتطبيق خاص وAPIs مختلفه. عادة هذا يعني ان النظام معقد، ومع التعقيد تزيد الثغرات, وهذي افضل فرصة بالنسبة لك كبق هنتر انك تستعملهم كلهم عشان تطلع ثغره وهذا اللي صار.
-1 Stealing Money Allowing Withdrawal Of Couriers To Attacker. $3,000
زي ماهو واضح بالعنوان قدرت اني استغل الثغرة هذي بحيث ان فلوس سواق الشركه تتحول للبطاقتي.
بالبدايه بيجيكم تساؤل كيف قدرت القاها, للسواقين الشركه لهم تطبيق كامل قدرت اني ادخل على حسابي الي سويته وانا اتصفح التطبيق شفت شي غريب!
لفت انتباهي وجود ميزة مالية حساسة: “Fast Cash”. الفكرة بسيطة السائق يقدر يسحب أرباحه مباشرة على بطاقته بدل ما ينتظر التحويل المعتاد.
في اول ريكويست حاولت اسوي setup للمعلومات بطاقه بعدين جاني API غريب مربوط مع Stripe
عشان توضح الصوره Stripe يسوي Tokenize للبطايق للشركه هذي ويحفظها بسيرفر خاص ويعطي بطاقتك unique ID بحيث انها تكون محميه وهذا دايقرام بسيط يشرح الي يصير
زي ماهو موضح بالريسبونس عطانا توكن ايدي بناء على البطاقه طيب لو مشينا على الفلو حق التطبيق بنلاحظ الريكويست الثاني غريب جدا.
لو نلاحظ, التوكن المستخدم بالريكويست هو توكن بطاقتنا الي سويناه في الريكوست الي راح لكن لاحظت انه الUUID غريب ويوم دققت اكثر طلع هذا ال UUID للسائق (Courier) الي هو حسابي.
طيب بطبيعة الحال ممكن يكون هنا ثغرة IDOR لو بنحط UUID سائق اخر, لكن بتتسائلون وش ممكن يكون الامباكت ياعبدالعزيز وكيف اصلا بتقدر تجيب UUIDs لحسابات سائقين (Couriers) ثانيه؟
بحثت اول شي داخل تطبيق السائقين نفسه، وما لقيت أي شيء واضح يساعدني اطلع UUIDs. فصار الخيار المنطقي هو توسيع نطاق البحث: إذا تطبيق السائقين (Couriers) مافيه شي، مين الطرف الثاني اللي يتعامل مع السائق بشكل مباشر؟ العميل.
ومن هنا كانت الفكرة: تطبيق العملاء (Customers) فيه ميزة أساسية هي تتبع الطلب، وهذه الميزة بحكم تصميمها تحتاج تعرض معلومات مرتبطة بالسائق المكلف بالتوصيل.
طيب الحين نكمل الاكسبلويت بشكل كامل وننسخ الUUID من تطبيق العميل, ثم نروح للتطبيق السائق (Couriers) ونلصق الUUID في الاند بوينت.
/api/fastcash/{Victim_UUID}/account/card
انصدمت لما تاكدت إن الاستغلال فعلاً يشتغل, قدرت اربط الToken (بطاقتي) الى حساب سائق ثاني عبر تبديل الـUUID، وتم تحويل المبلغ إلى بطاقتي بدون اي تفاعل من الضحية. التحويل اكتمل خلال حوالي 30 دقيقة فقط.