Shikata Ga Nai

Private? There is no such things.

GraphQL APIの脆弱性とセキュリティ診断の基本

Hello there, ('ω')ノ

🔍 概要

GraphQLは、クライアントが必要なデータを効率よく取得できる柔軟なAPIですが、その反面、設計ミスや実装ミスが原因で深刻な脆弱性を招くことがあります。


🎯 よくある脆弱性

1. イントロスペクション(Introspection)の有効化

  • GraphQLではスキーマ構造を取得できる__schema__typeなどのクエリが利用可能。
  • これにより、攻撃者が利用可能なクエリやミューテーションの全貌を把握可能。

2. アクセス制御の不備

  • 認証・認可のロジックが適切に実装されていないと、誰でも管理者の情報を取得・操作できる可能性がある。

3. 大量リクエスト(DoS)のリスク

  • 再帰的なクエリや極端にネストされたクエリによりサーバーに高負荷を与えることが可能。

4. CSRFとの組み合わせ

  • GraphQLエンドポイントがGETリクエストでも処理可能な場合、CSRF攻撃との併用で非認可操作を誘導される可能性がある。

🛠️ セキュリティ診断のポイント

✔ Introspectionの確認

{
  __schema {
    types {
      name
      fields {
        name
      }
    }
  }
}
  • 有効ならスキーマ構造が丸見え

✔ 認可処理の検証

  • 自分以外のIDやユーザー情報を指定してデータを取得・操作できるか確認

✔ クエリの複雑化耐性

{
  user {
    friends {
      friends {
        friends {
          ...
        }
      }
    }
  }
}
  • 無限にネストされたクエリがサーバーを過負荷にする可能性

🧠 攻略のコツ

  • GraphQLは通常 /graphql パスにエンドポイントがある
  • Burp Suiteの拡張機能(GraphQL Raider など)を使うとクエリ作成や送信が効率的
  • レスポンスメッセージやエラーから内部構造が漏れることがあるので注意深く観察する

Best regards, (^^ゞ