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
dak2
November 28, 2025
28
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
59
No Types Needed, Just Callable Method Check
dak2
1
110
自然言語で ActiveRecord を操作する試み
dak2
0
39
DoD x RBS
dak2
0
4
Featured
See All Featured
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
1.1k
エンジニアに許された特別な時間の終わり
watany
106
240k
Being A Developer After 40
akosma
91
590k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
New Earth Scene 8
popppiees
3
2.1k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
120
It's Worth the Effort
3n
188
29k
KATA
mclloyd
PRO
35
15k
The Spectacular Lies of Maps
axbom
PRO
1
700
From π to Pie charts
rasagy
0
160
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.8k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
680
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!!!