Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
GraphQLの関連タイプを辿る脆弱性
Search
ham
October 04, 2021
Technology
0
120
GraphQLの関連タイプを辿る脆弱性
GraphQLのedgeを辿ることで見えてはいけない情報が見えてしまう事象の説明資料
ham
October 04, 2021
Tweet
Share
More Decks by ham
See All by ham
AIと過ごす1日〜全業務フローにAIを組み込む実践ガイド〜
ham0215
0
42
生成AIによる生産性向上〜テック企業やファインディの活用事例〜
ham0215
1
63
生成AI導入の効果を最大化する データ活用戦略
ham0215
0
380
データ駆動経営の道しるべ:プロダクト開発指標の戦略的活用法
ham0215
2
410
開発組織における意思決定の実例〜開発優先度・組織構成・ツール導入〜
ham0215
0
87
エンジニアリングで組織のアウトカムを最速で最大化する!
ham0215
1
440
アウトカムを最速で最大化できる開発組織にするために
ham0215
1
160
コード品質向上で得られる効果と実践的取り組み
ham0215
2
350
開発者体験を定量的に把握する手法と活用事例
ham0215
2
310
Other Decks in Technology
See All in Technology
「図面」から「法則」へ 〜メタ視点で読み解く現代のソフトウェアアーキテクチャ〜
scova0731
0
310
Databricks向けJupyter Kernelでデータサイエンティストの開発環境をAI-Readyにする / Data+AI World Tour Tokyo After Party
genda
1
530
大企業でもできる!ボトムアップで拡大させるプラットフォームの作り方
findy_eventslides
1
820
AWS Security Agentの紹介/introducing-aws-security-agent
tomoki10
0
300
マイクロサービスへの5年間 ぶっちゃけ何をしてどうなったか
joker1007
12
6k
EM歴1年10ヶ月のぼくがぶち当たった苦悩とこれからへ向けて
maaaato
0
280
生成AI時代におけるグローバル戦略思考
taka_aki
0
200
文字列の並び順 / Unicode Collation
tmtms
3
600
re:Invent 2025 ~何をする者であり、どこへいくのか~
tetutetu214
0
220
regrowth_tokyo_2025_securityagent
hiashisan
0
250
年間40件以上の登壇を続けて見えた「本当の発信力」/ 20251213 Masaki Okuda
shift_evolve
PRO
1
140
品質のための共通認識
kakehashi
PRO
3
270
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.2k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.6k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.7k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3k
Side Projects
sachag
455
43k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Code Review Best Practice
trishagee
74
19k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Transcript
GraphQLのedgeを辿ることで 見えてはいけない情報が 見える脆弱性 2021/10/4 LT ham
前提条件 下記のようなUserとTeamというTypeがあるとします。 Userは複数のチームに所属しており、Teamには複数のユーザーが所属しているとします。 type User { id: ID! name: String!
teams(afterなど): TeamConnection } type Team { id: ID! name: String! users(afterなど): UserConnection }
前提条件 Teamを取得するQueryを定義します。 type Query { team(teamId: ID!): Team! } このクエリーはアクセス制御されており、teamIdで指定したチームを閲覧許可された利用者のみが閲覧できるように制御
しています。
クエリー実行 例えば下記のクエリーでTeamと所属Userを取得することができます。 利用者がteamIdで指定したチームの閲覧権限がなければ取得できないのでアクセス制御も良さそうに見えます。 query Team($teamId: ID!) { team(teamId, $teamId) {
id name users { edges { node { id name } } } } }
次のクエリーではどうでしょうか? query Team($teamId: ID!) { team(teamId, $teamId) { users {
edges { node { teams { edges { node { name users {...略} } } } } } } } } teamIdには閲覧できるチームを指定 →アクセスOK 指定したチームに他チームに所属しているユーザーが含まれている場合、 そのユーザー経由で別チームの情報まで取得することができる。 →トップ階層のアクセス制御だけでなく、関連 Typeのアクセス制御も考慮が 必要
今後の方針(まだ迷っている...) • DBカラム≒typeのように汎用的にtypeを作った場合、この脆弱性を埋め込 んでしまう可能性が高い。 • クエリーごとにtypeを分ければ発生しないが似たtypeが乱立してしまう。 • Typeを何階層もまとめて取得したいケースはあまりないのではないか?とい う仮説のもと、次ページの方針でしばらく様子を見る。
今後の方針(まだ迷っている...) • 親子関係の場合、親から子を参照するfieldのみ許可する。 • 親子関係以外の場合、fieldに指定するtypeはスカラー型だけのtypeとす る。さらに先のtypeを取得したい場合は別途クエリーを実行する。 type Team { id:
ID! name: String! users(afterなど): UserConnection } UserConnectionには別typeのfieldは定義しない。 もしUserに紐づくtypeを取得したい場合は、別途 User主 体のクエリーを実行する。