目的
脆弱性診断士として、Webに関わる技術を学び、サービス向上に繋げる。
成り立ち
2012年にFacebookが作成した。
従来のRESTでは、アプリ側で使用するデータセットの観点で取得するデータの内容が考えられていなかった。
それらに対応するには、サーバサイドで対応する必要があった。
モバイルアプリの限られたネットワーク内で複雑なデータを扱う必要があったため、Facebook News Feed APIとして使用する目的で作成された。
アプリ側で必要なものを取得できるような形式であり、限られたリソース内で必要なデータだけを取得できる。
2015年にオープンソース化され、2018年にGraphQL Foundationが作成された。
学習用リソース
公式github
オープンソース
Linux 学習用コンテンツ
情報収集ワーキンググループ
セキュリティ
Bugcrowd
動画内容メモ
- endpointを探す。「/graphql」などである場合が多い。
Intorospection query が有効であるか確認する。
Intorospection・・・graphqlに有効なフィールドなどを問い合わせることができる。
graphql.orgスキーマ視覚確認サイト
apis.guruIntorospection queryが無効な場合
- 検証用サブドメインでendpointを探す(stagingやdev)
- プロキシでリクエスト内容を確認する
- ワードリストを使って探す(_passwordなど)
フィールド名が間違っていたとしても、レスポンスで似た名前のフィールドを教えてくれる。
攻撃方法
- ネストを外すことで認証をバイパス
- SQLインジェクション
NoSQLインジェクション
www.petecorey.comツール
github.com
防御方法
悪意のあるクエリから守る方法
blog.apollographql.comIntorospection query を無効にする(手間がかかる)
- 入力されたデータは必ず検証、サニタイズする
- セキュリティ面でのコードレビューを実施する
- セキュアコーディングのスキルを上げる
- 防御用プロジェクト
github.com
Payloads
構文チートシート
公開レポート
Shopify
hackerone
GitLab