در این Write up مربوط به آسیب پذیری منطقی، که توسط Ahmed Elmorsi تهیه شده است به معرفی یک آسیب پذیری در یک برنامه خصوصی پرداخته می شود که منجر به دسترسی به یک Endpoint خاص می گردد.
من در این مقاله در مورد 2 آسیبپذیری منطقی با تاثیر بالا صحبت خواهم کرد.
آسیبپذیری اول
ابتدا من یک BBP خصوصی با Scope کوچک دارم: “app.example.com” این وب سایت برای Data Analysis و Pipeline استفاده میشود، من ساعت اول را صرف تلاش برای درک منطق برنامه وب میکنم، سایت شامل برخی از نقشها در کنار Admin است. نقش: read only، member، member + pipeline و Admin، من با ایجاد یک نقش read only دیگر در کنار حساب Admin خود، آزمایش را شروع کردم، هر تابعی را به دنبال هرگونه مشکل Broken Access یا Privilege Escalation آزمایش کردم. ظاهراً سایت اشکال خاصی ندارد.
من نقش read only را به member ارتقا دادم، بیایید به آن برویم، نقش member عملکردهای بیشتری برای آزمایش داشت.
پس از انجام مراحل مشابه با نقش member، همیشه وقتی میخواهم عملکرد Admin را با حساب member با استفاده از burp آزمایش کنم، 403 غیرمجاز دریافت میکنم، اما با نقطه پایانی جالبی به نام: “/manage/get-integrations” مواجه شدم.
این شامل هیچ دادهای در بدنه پاسخ نیست.
اولین چیزی که به ذهن من رسید این است که یک نقطه پایانی معمولی است که برای نوعی اعلان استفاده میشود و خاص نیست، پس از کمی جستجو در برنامه، بخشی به نام “integrations” را پیدا کردم، که شامل 3 برنامه شخص ثالث بود.
عملکرد integrations به طور کلی چیست؟
“یک ویژگی یا منطقه ای در برنامه است که به کاربران اجازه میدهد با سرویسها، ابزارها یا پلتفرمهای خارجی ارتباط برقرار کرده و با آنها تعامل داشته باشند. این روشی را برای ترکیب عملکرد برنامه وب با سایر برنامهها یا خدمات فراهم نموده و امکان تبادل داده، اتوماسیون و عملکردهای پیشرفته را فراهم میکند.»
البته این تابع فقط در حساب کاربری Admin موجود بود.
بنابراین، من بلافاصله رفتم تا یک Slack Channel اضافه کنم تا بدانم آیا به نقطه پایانی “/manage/get-integrations” متصل است یا خیر.
پس از اضافه کردن Slack Channel، من از طریق Burp دوباره با حساب member خود “/manage/get-integrations” را تست کردم و شگفتی اینجا بود.
من دسترسی غیرمجاز به نقطه پایانی Integration با حساب member داشتم.
من این باگ را گزارش کردم و $$$$ را به عنوان یک آسیبپذیری بالا دریافت کردم.
توجه: پس از گزارش این باگ به یکی از دوستانم که معمولاً با هم شکار میکنیم، او باگ دوم را کشف کرد، بنابراین در ادامه از دیدگاه او توضیح خواهم داد.
آسیبپذیری دوم
بعد از یک روز از گزارش این آسیبپذیری، از خودم پرسیدم که چرا دوباره به برنامه نگاهی عمیقتر نمیکنم؟
من روی تمام دکمهها در برنامه وب با حساب Admin خود کلیک کردم تا همه عملکردهای موجود را برای آزمایش آن با کاربران کم امتیاز دریافت کنم، اکنون اجازه دهید به تب “HTTP History” برویم.
من یک نقطه پایانی عجیب پیدا کردم به صورت زیر پیدا کردم:
/OrgID/modules/connect-service/slack?cb=id
با بدنه درخواستی که شامل پارامتر csrf=token بود.
این یک درخواست POST بود، عجیب بود زیرا تنها درخواستی بود که به من 302 Found برمیگرداند و توجه من را به خود جلب کرد. در ادامه متوجه شدم که این درخواست مسئول فرآیند یکپارچه سازی در برنامه است و شما را به یک تب دیگر هدایت میکند. همچنین این بخش به شما امکان میدهد اطلاعات شخص ثالث را اضافه کنید.
خوب حالا بیایید این نقطه پایانی را با نقش امتیاز پایین مانند حساب member آزمایش کنیم و اگر این درخواست را با موفقیت ارسال کنیم به این معنی است که مشکل Broken Access Control داریم که حساب member را قادر میسازد اطلاعات یکپارچهسازی شخص ثالث را اضافه کند.
اما مشکلی وجود دارد. پارامتر csrf در بدنه درخواست چه میشود؟ وقتی میخواهم درخواست رو از اکانت member ارسال کنم csrf اصلی را از درخواست اکانت Admin میگیرم که در این حالت 404 Not found دریافت میکنم.
این اتفاق به این دلیل است که توکن csrf در بدنه درخواست متعلق به حساب Admin است.
بنابراین من فقط باید csrf شخصی خود را از کاربر member دریافت کنم و آن را با توکن Admin جایگزین کنم، با درک رفتار برنامه به راحتی متوجه خواهید شد که برنامه همیشه با هر درخواست POST یک توکن csrf ارسال میکند.
بنابراین من یک توکن csrf از یک درخواست POST تصادفی برای حساب member دریافت کردم و از آن استفاده کردم و کار کرد.
اکنون برای باز کردن صفحه قسمت سوم اعتبار، فقط باید درخواست را در جلسه اصلی در Burp درخواست کنید.
و برای افزودن اطلاعات به صفحه شخص ثالث هدایت میشوید.
این آسیبپذیری را نیز به عنوان High گزارش کردم که $$$$ دیگر را نیز دریافت کردم.
منبع:
medium.com/@ahmedelmorsy312/weakness-of-integration-bce1520ba672