flawopen.com/Teardowns/cve-2026-27826-mcp-atlassian-ssrf
CVE-2026-27826:MCP AtlassianのSSRF
CVE-2026-27826 の当初のヘッダー経由 SSRF は 0.17.0 で修正されました。後続の別個の SSRF 脆弱性は 0.22.0 で修正されています。全環境の最低バージョンを決める前に各アドバイザリを確認してください。[1], [2], [6], [8], [9], [10], [11]
会社の郵便室は、承認済みの事業所にだけ荷物を届ける決まりだとします。来訪者が専用用紙に別の宛先を書き、職員が確認せずに従ってしまいます。サーバー側のfetcherが郵便室に当たります。リクエストヘッダーが宛先を決め、サーバーが外向きリクエストを送信しました。0.17.0の修正では接続前に指定URLを検証し、リダイレクト先も確認します。運用者は追加で許可ドメイン一覧を設定できます。[1], [2]
主要な概念と専門用語
MCPトランスポート- MCPクライアントとサーバー間の通信路です。この問題はstreamable-HTTPおよびSSEに影響し、アドバイザリで説明されたstdioのみの構成には影響しません。[1]
フレームワーク対応
- このガイドで説明する弱点の CWE 参照: CWE-918
- OWASP GenAI 2025 — LLM01:2025 プロンプトインジェクション
- D3-OTF 送信トラフィックのフィルタリング — このガイドで説明する送信ネットワークの制限により、サービスまたはホストが接続できる宛先を絞れます。
根本原因の分析 (Root Cause)
影響を受けるHTTP経路では、サーバーがリクエストからX-Atlassian-Jira-UrlまたはX-Atlassian-Confluence-Urlを取り出し、fetcher作成に使うJiraConfigまたはConfluenceConfigへ渡していました。脆弱なヘッダー認証分岐では、fetcherが最初のリクエストを送る前に、宛先をサーバー設定のテナントURLや宛先ポリシーと照合していませんでした。メンテナーのアドバイザリが根本原因として挙げているのはリクエストmiddlewareと依存関係プロバイダーであり、個別のMCPツールハンドラーではありません。影響には対象HTTPトランスポートとヘッダー認証条件が必要です。すべてのMCP構成に一般化しないでください。[1], [2]
ステップ・バイ・ステップの攻撃フロー
ソースコード比較:脆弱 vs 堅牢化
脆弱なコード例では、リクエストヘッダーのURLがサーバーの外向き接続先を選びます。upstream の 0.17.0 パッチは、このヘッダー指定のテナント方式をサーバー側テナントレジストリに置き換えてはいません。fetcher の作成前に ASGI middleware で渡された Jira/Confluence URL を検証し、その後 response hook を追加してリダイレクト先も検証します。強化例はこの2つの upstream 制御を示し、validator の実装は省略しています。サーバー側テナントレジストリはより強固な代替設計であり、このパッチが実装したものではありません。0.22.0 の後続アドバイザリには別の残存経路が記載されているため、内容を確認せずに 0.17.0 を全環境の最低バージョンとしないでください。DNS rebinding を防ぐには接続時にも DNS 検証を適用する必要があり、ホスト名を一度解決するだけでは SSRF 境界を完全には閉じられません。[1], [2]
ソース抜粋: 上流パッチのミドルウェアおよびfetcher抜粋(Jira経路。Confluenceにも同等の検査があります)。
header_jira_fetcher = JiraFetcher(config=header_config)
current_user_id = header_jira_fetcher.get_current_user_account_id()
ssrf_error = validate_url_for_ssrf(jira_url_str)
if ssrf_error:
scope["state"]["auth_validation_error"] = (
f"Forbidden: Invalid Jira URL - {ssrf_error}"
)
return
header_jira_fetcher = JiraFetcher(config=header_config)
header_jira_fetcher.jira._session.hooks["response"].append(
_make_ssrf_safe_hook(validate_url_for_ssrf)
)
current_user_id = header_jira_fetcher.get_current_user_account_id()
エンジニアリング&システム堅牢化チェックリスト
- ✓認証されていない、または呼び出し元が制御するヘッダーからテナントのベースURLを受け取らず、認証済みIDとサーバー設定からテナントを特定します。[1], [2]
- ✓各テナントで明示的に登録されたHTTPSのAtlassianホスト名だけを許可し、userinfo、想定外のポート、曖昧なURLを拒否します。[1], [8], [9], [10], [11]
- ✓最初に解析したURLだけでなく、リダイレクト先と実際の接続先にも宛先ポリシーを適用します。[2], [8]
- ✓MCPサービスの送信通信を制限し、明示的に必要とされない限りloopback、プライベート、link-local、メタデータ宛てを遮断します。[12], [1]
- ✓すべてのツール結果を信頼できない内容として扱い、JiraやConfluenceから取得した文章で権限を広げたり操作を許可したりしません。[1], [7]
- ✓JiraFetcherまたはConfluenceFetcherを作成する全経路を監査し、別のHTTPセッションを使う補助関数も確認します。[2], [8], [9], [10], [11]
- ✓このCVEの修正には0.17.0より後の版へ更新し、全環境の最低版を決める前に別件として記録された現在のSSRFアドバイザリを確認します。[1], [6], [8], [9], [10], [11]
- ✓バージョンの判断は分けてください。0.17.0 は
CVE-2026-27826の当初の経路を修正します。後続の4件の SSRF アドバイザリ(CVE-2026-77242、CVE-2026-77267、CVE-2026-77249、CVE-2026-77274)はいずれも 0.22.0 を修正版としています。全環境の最低バージョンを決める前に、最新のアドバイザリ一覧を確認してください。[6], [8], [9], [10], [11]
参考資料
- メンテナーアドバイザリ:CVE-2026-27826
- upstream修正コミット 5cd697d
- NVDレコード:CVE-2026-27826
- MITRE CWE-918:Server-Side Request Forgery
- Pluto Securityの開示:MCPwnfluenceと別個のCVE-2026-27825 / CVE-2026-27826チェーン
- メンナーのアドバイザリ:MCP Atlassianの後続セキュリティ調査
- OWASP LLMアプリケーションTop 10 2025:LLM01 プロンプトインジェクション
- 後続 SSRF アドバイザリ GHSA-72fm-whvq-jghf / CVE-2026-77242
- 後続 SSRF アドバイザリ GHSA-5wf4-jqxh-8gm3 / CVE-2026-77267
- 後続 SSRF アドバイザリ GHSA-v9m3-wfh8-5646 / CVE-2026-77249
- 後続 SSRF アドバイザリ GHSA-hgcf-4mq8-5266 / CVE-2026-77274
- OWASP Cheat Sheet:Server-Side Request Forgery の防止