Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
GraphQLの関連タイプを辿る脆弱性
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
ham
October 04, 2021
Technology
130
0
Share
GraphQLの関連タイプを辿る脆弱性
GraphQLのedgeを辿ることで見えてはいけない情報が見えてしまう事象の説明資料
ham
October 04, 2021
More Decks by ham
See All by ham
AIと過ごす1日〜全業務フローにAIを組み込む実践ガイド〜
ham0215
0
110
生成AIによる生産性向上〜テック企業やファインディの活用事例〜
ham0215
1
110
生成AI導入の効果を最大化する データ活用戦略
ham0215
0
510
データ駆動経営の道しるべ:プロダクト開発指標の戦略的活用法
ham0215
2
460
開発組織における意思決定の実例〜開発優先度・組織構成・ツール導入〜
ham0215
0
110
エンジニアリングで組織のアウトカムを最速で最大化する!
ham0215
1
500
アウトカムを最速で最大化できる開発組織にするために
ham0215
1
220
コード品質向上で得られる効果と実践的取り組み
ham0215
2
380
開発者体験を定量的に把握する手法と活用事例
ham0215
2
360
Other Decks in Technology
See All in Technology
Cursor Subagentsはいいぞ
yug1224
2
140
ASTのGitHub CopilotとCopilot CLIの現在地をお話しします/How AST Operates GitHub Copilot and Copilot CLI
aeonpeople
1
120
あるアーキテクチャ決定と その結果/architecture-decision-and-its-result
hanhan1978
0
290
Even G2 クイックスタートガイド(日本語版)
vrshinobi1
0
200
不確実性と戦いながら見積もりを作成するプロセス/mitsumori-process
hirodragon112
1
190
組織的なAI活用を阻む 最大のハードルは コンテキストデザインだった
ixbox
1
430
すごいぞManaged Kubernetes
harukasakihara
1
320
Network Firewall Proxyで 自前プロキシを消し去ることができるのか
gusandayo
0
190
スケーリングを封じられたEC2を救いたい
senseofunity129
0
140
ログ基盤・プラグイン・ダッシュボード、全部整えた。でも最後は人だった。
makikub
1
210
OCI技術資料 : ロード・バランサ 概要 - FLB・NLB共通
ocise
4
27k
最大のアウトプット術は問題を作ること
ryoaccount
0
300
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.2k
The Invisible Side of Design
smashingmag
302
51k
KATA
mclloyd
PRO
35
15k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
390
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.4k
Designing Powerful Visuals for Engaging Learning
tmiket
1
320
Unsuck your backbone
ammeep
672
58k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
23k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
220
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
300
Building AI with AI
inesmontani
PRO
1
860
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主 体のクエリーを実行する。