إساءة استخدام GraphQL
استكشاف يرسم الواجهة كاملة وحقول كائن بلا تفويض وتكديس أسماء مستعارة يتجاوز حدود المعدل
- المسار
- أمن الويب
- الوقت المتوقع
- 25 د
- المستوى
- متوسط
قبل هذا الدرس
يعطي GraphQL العميل نقطة واحدة وقوة كبيرة يطلب الحقول التي يريدها بالضبط ويصف مخططه بنفسه وينفذ عمليات كثيرة في طلب واحد كل راحة من هذه سطح هجوم أيضا والثغرات نادرا ما تكون خاصة بـ GraphQL بل هي الكلاسيكية كشف المعلومات والتفويض المكسور وغياب حد المعدل بشكل GraphQL
ما هي الثغرة؟
- الاستكشاف مفعل أي عميل يسأل __schema عن كل نوع وحقل فيرسم العمليات التي لا تعرضها الواجهة ومنها ما ظنه المبرمج مخفيا
- غياب تفويض الكائن محلل user id يعيد سجل ذلك المعرف دون التحقق أنك تملكه غير المعرف تقرأ أي أحد IDOR عبر استعلام
- تكديس الأسماء المستعارة GraphQL ينفذ حقولا كثيرة لكل طلب فإذا حسب الحد الطلبات وضع طلب واحد مئة محاولة لحقل حساس بأسماء مستعارة وتجاوز الحد
لماذا تحدث؟
ينقل GraphQL العمل الذي توزعه REST على نقاط كثيرة إلى استعلام واحد مرن فتتوقف عادات النقطة الواحدة هذا المسار داخلي حدد معدل هذا العنوان عن الانطباق التفويض يجب أن يكون على كل محلل حقل والحد يجب أن يكون على تكلفة الاستعلام لا عدد الطلبات
كيف تتوقف؟
عطل الاستكشاف في الإنتاج وضع فحص تفويض في كل محلل يعيد بيانات خاصة ولا تثق بمعامل المعرف وحدد بتعقيد الاستعلام وعمقه وتكرار حقوله حتى لا يخفي طلب واحد مئة محاولة
اللابات الثلاثة أدناه تمشي هذا اكتشف حقلا مخفيا واقرأ مستخدما آخر عبر user id وخمن رمزا بالأسماء المستعارة في طلب واحد
اللابات
اكتشاف المخطط
محلولسهللاب في المتصفح
اكتشف الحقل المخفي عبر الاستكشاف ثم استعلم عنه لقراءة سره
ادخل اللابمقفلتفويض مكسور على الكائن
محلولمتوسطلاب في المتصفح
اقرأ البيانات الخاصة لمستخدم آخر الزعيم عبر الحقل user
ادخل اللابمقفلتكديس الأسماء المستعارة
محلولصعبلاب في المتصفح
خمن الرمز السري في عدد قليل من الطلبات متجاوزا الحد
ادخل اللابمقفل
