Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GraphQLの関連タイプを辿る脆弱性

Avatar for ham ham
October 04, 2021

 GraphQLの関連タイプを辿る脆弱性

GraphQLのedgeを辿ることで見えてはいけない情報が見えてしまう事象の説明資料

Avatar for ham

ham

October 04, 2021
Tweet

More Decks by ham

Other Decks in Technology

Transcript

  1. 次のクエリーではどうでしょうか? query Team($teamId: ID!) { team(teamId, $teamId) { users {

    edges { node { teams { edges { node { name users {...略} } } } } } } } } teamIdには閲覧できるチームを指定 →アクセスOK 指定したチームに他チームに所属しているユーザーが含まれている場合、 そのユーザー経由で別チームの情報まで取得することができる。 →トップ階層のアクセス制御だけでなく、関連 Typeのアクセス制御も考慮が 必要
  2. 今後の方針(まだ迷っている...) • 親子関係の場合、親から子を参照するfieldのみ許可する。 • 親子関係以外の場合、fieldに指定するtypeはスカラー型だけのtypeとす る。さらに先のtypeを取得したい場合は別途クエリーを実行する。 type Team { id:

    ID! name: String! users(afterなど): UserConnection } UserConnectionには別typeのfieldは定義しない。 もしUserに紐づくtypeを取得したい場合は、別途 User主 体のクエリーを実行する。