Nick Security Log

securityを始めとしたNickのブログです

GraphQL bugbounty 調査レポート Ver1.0

f:id:NickShadows:20191222211722j:plain

目的

脆弱性診断士として、Webに関わる技術を学び、サービス向上に繋げる。

成り立ち

2012年にFacebookが作成した。

従来のRESTでは、アプリ側で使用するデータセットの観点で取得するデータの内容が考えられていなかった。
それらに対応するには、サーバサイドで対応する必要があった。


モバイルアプリの限られたネットワーク内で複雑なデータを扱う必要があったため、Facebook News Feed APIとして使用する目的で作成された。

アプリ側で必要なものを取得できるような形式であり、限られたリソース内で必要なデータだけを取得できる。

www.channelfutures.com

graphql.org



2015年にオープンソース化され、2018年にGraphQL Foundationが作成された。

graphql.org

foundation.graphql.org

学習用リソース

公式github

github.com

オープンソース

www.howtographql.com

Linux 学習用コンテンツ

www.edx.org

情報収集ワーキンググループ

github.com

セキュリティ

Bugcrowd

www.bugcrowd.com

動画内容メモ

  • endpointを探す。「/graphql」などである場合が多い。
  • Intorospection query が有効であるか確認する。
    Intorospection・・・graphqlに有効なフィールドなどを問い合わせることができる。
    graphql.org

  • スキーマ視覚確認サイト
    apis.guru

  • Intorospection queryが無効な場合

    • 検証用サブドメインでendpointを探す(stagingやdev)
    • プロキシでリクエスト内容を確認する
    • ワードリストを使って探す(_passwordなど)
  • フィールド名が間違っていたとしても、レスポンスで似た名前のフィールドを教えてくれる。

  • 攻撃方法

    • ネストを外すことで認証をバイパス
    • SQLインジェクション
    • NoSQLインジェクション
      www.petecorey.com

    • ツール
      github.com

  • 防御方法

    • 悪意のあるクエリから守る方法
      blog.apollographql.com

    • Intorospection query を無効にする(手間がかかる)

    • 入力されたデータは必ず検証、サニタイズする
    • セキュリティ面でのコードレビューを実施する
    • セキュアコーディングのスキルを上げる
    • 防御用プロジェクト
      github.com



Payloads

github.com

構文チートシート

devhints.io

公開レポート

Shopify

hackerone.com

hackerone.com

hackerone.com

hackerone.com



hackerone

hackerone.com

hackerone.com

hackerone.com

hackerone.com

hackerone.com



GitLab

hackerone.com

hackerone.com