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
55
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
現場のトークンマネジメント
dak2
1
240
KaigiEffect.new(name: "dak2").generate
dak2
1
86
No Types Needed, Just Callable Method Check
dak2
1
8.4k
自然言語で ActiveRecord を操作する試み
dak2
0
60
DoD x RBS
dak2
0
23
Featured
See All Featured
Building Applications with DynamoDB
mza
96
7.1k
Music & Morning Musume
bryan
47
7.3k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Rails Girls Zürich Keynote
gr2m
96
14k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
450
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
180
Designing for Performance
lara
611
70k
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!!!