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
MCP Security Best Practices に見るセキュリティリスクとmodelc...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
dak2
November 28, 2025
40
0
Share
MCP Security Best Practices に見るセキュリティリスクとmodelcontextprotocol/ruby-sdk の authorization の現在地
TokyuRuby会議16で発表したLTスライド
https://tokyurb.connpass.com/event/375027/
dak2
November 28, 2025
More Decks by dak2
See All by dak2
KaigiEffect.new(name: "dak2").generate
dak2
1
79
No Types Needed, Just Callable Method Check
dak2
1
3.2k
自然言語で ActiveRecord を操作する試み
dak2
0
49
DoD x RBS
dak2
0
13
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
How to Ace a Technical Interview
jacobian
281
24k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.9k
Accessibility Awareness
sabderemane
1
110
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.2k
Testing 201, or: Great Expectations
jmmastey
46
8.1k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.8k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
270
Typedesign – Prime Four
hannesfritz
42
3k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
380
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
770
Transcript
MCP Security Best Practices に見るセキュリティ リスクとmodelcontextprotocol/ruby-sdk の authorization の現在地 TokyuRubyKaigi#16
2025/11/29 神山大智 @_dak2_
目次 • Security Best Practices • 主要な5つのリスク • 3つの対策方針 •
ruby-sdk の authorization
hogehoge
自己紹介
自己紹介 Daichi Kamiyama (@dak2) • 株式会社タイミー • バックエンドエンジニア • RailsTokyo
の運営をしています • `modelcontextprotocol/ruby-sdk` にコ ミットしてます • 最近 YAPC::Fukuoka に行ってきました
MCP Security Best Practices
MCP Security Best Practices Anthropic が定めている MCP の Security Best
Practices https://modelcontextprotocol.io/specification/draft/basic/security _best_practices
主要な5つのリスク
1. 「混乱した代理人」問題 (Confused Deputy) 2. トークンパススルー (Token Passthrough) 3. セッションハイジャック
(Session Hijacking) 4. ローカルサーバーによる侵害 (Local Server Compromise) 5. 過剰なスコープ (Scope Maximization) 主要な5つのリスク
「混乱した代理人」問題 (Confused Deputy)
MCP 認証後に Cookie が攻撃者に利用され、認証を skip されてしまい、MCP サーバーへ勝手にアクセス できてしまう https://modelcontextprotocol.io/specification/draft/basic/security _best_practices#confused-deputy-problem
「混乱した代理人」問題 (Confused Deputy)
トークンパススルー (Token Passthrough)
MCP サーバーがトークンを適切な検証をせずに受け入 れてしまい、攻撃者が不正にアクセスできてしまう https://modelcontextprotocol.io/specification/draft/basic/security _best_practices#token-passthrough トークンパススルー (Token Passthrough)
セッションハイジャック (Session Hijacking)
サーバーから返却されたセッションを盗用され、攻撃 者がなりすましアクセスできてしまう https://modelcontextprotocol.io/specification/draft/basic/security _best_practices#session-hijacking セッションハイジャック (Session Hijacking)
ローカルサーバーによる侵害 (Local Server Compromise)
悪意の有無に関わらず、ローカルで起動している MCP サーバーが攻撃の踏み台にされてしまう https://modelcontextprotocol.io/specification/draft/basic/security _best_practices#local-mcp-server-compromise ローカルサーバーによる侵害 (Local Server Compromise)
過剰なスコープ (Scope Maximization)
MCP サーバーが過剰な権限を持ってしまい、攻撃者が 不正にシステムリソースへアクセスできてしまう https://modelcontextprotocol.io/specification/draft/basic/security _best_practices#scope-minimization 過剰なスコープ (Scope Maximization)
対策
3つの基本方針
• 検証(Verify) • 同意(Consent) • 最小化(Minimize) 3つの基本方針
検証(Verify)
• Redirect URI の完全一致: ◦ `start_with?` や正規表現ではなく `==` で検証する ◦
ワイルドカードを使わない • State パラメータの検証: ◦ CSRF対策として、認証リクエストごとに `SecureRandom.urlsafe_base64` 等で生成し、検証する • トークンのAudience確認: ◦ 送られてきたトークンが「自分(このMCPサーバー)」宛の ものか必ず確認する(Token Passthrough対策) 検証(Verify)- 信頼せず、常に確認する -
同意(Consent)
• クライアントごとの同意 (Per-Client Consent): ◦ クライアントAで認証したCookieを、クライアントBの認証 に使い回さない ◦ client_id ごとに明示的な同意画面を挟む
• 実行前の確認 (Human-in-the-loop): ◦ 特にローカルサーバーの場合、重要な操作(ファイルの書 き込み、外部通信)の前にユーザー確認を求める ◦ sampling 機能等を利用し、LLMが勝手に実行するのを 防ぐ 同意(Consent)- 安易に許可しない -
最小化(Minimize)
• スコープの細分化: ◦ `filesystem:read:*` ではなく `filesystem:read:/home/user/project` に限定する ◦ `admin` のような包括的な権限を避ける
• プログレッシブな権限昇格: ◦ 最初からフル権限を要求せず、必要になったタイミ ングで追加のスコープを要求する (Step-up auth) 最小化(Minimize)- 必要最小限の意識 -
modelcontextprotocol/ruby-sdk の authorization
実装中!! https://github.com/modelcontextprotocol/ruby- sdk/pull/38 modelcontextprotocol/ruby-sdk の authorization
すでに Authorization の仕様は前に進 んでいる
2025/11/29現在は、2025-06-18 版の仕様が最新 https://github.com/modelcontextprotocol/model contextprotocol/blob/main/docs/specification/2 025-06-18/basic/authorization.mdx すでに Authorization の仕様は前に進んでいる
Authorization の変更点
• Resource Indicators for OAuth 2.0 [RFC 8707] の実装が必須化 •
MCP サーバーは OAuth 2.1 resource server とし て振る舞うことが明確化 • etc… Authorization の変更点(一例)
追従していくしかない
まとめ
• Verify: 入力値(URI, Token)を疑い、安全なIDを 使う • Consent: クライアントIDごとに同意を取り、勝手 な流用を防ぐ •
Minimize: ツールができることを絞り込み、影響範 囲を限定する MCP のセキュリティリスクに対する基本方針
• 現在実装中 • 仕様はすでに前に進んでいるので、今後のアップ デートを注視していきたい `modelcontextprotocol/ruby-sdk` の authorization の現在地
Thank you!!!