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
Why Our Code Smells
bkeepers
PRO
340
58k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
240
Art, The Web, and Tiny UX
lynnandtonic
304
21k
[SF Ruby Conf 2025] Rails X
palkan
2
950
So, you think you're a good person
axbom
PRO
2
2k
The Curse of the Amulet
leimatthew05
1
11k
Optimizing for Happiness
mojombo
378
71k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
200
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.5k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.1k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.5k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
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!!!