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 的部署不受该 HTTP 请求头路径影响。[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]
攻击执行流程分解
源代码对比:漏洞与安全实现
有漏洞的代码片段允许请求头中的 URL 选择服务器的出站目标。上游 0.17.0 补丁没有把这种基于请求头的租户模式替换为服务器端租户注册表:它会在 ASGI 中间件中、创建 fetcher 之前验证传入的 Jira 或 Confluence URL,随后添加响应钩子来验证重定向目标。加固片段展示了这两项上游控制;验证器实现未列出。服务器端租户注册表是更强的替代架构,并非该补丁实际实现的内容。0.22.0 的后续公告记录了不同的残余路径,因此在检查这些公告前,不要把 0.17.0 当作全网最低安全版本。还必须在连接时落实 DNS 验证以抵御 rebinding;只解析一次主机名不足以构成完整的 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;应根据已认证身份和服务器配置确定租户。[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]
- ✓升级到 0.17.0 之后的版本以修复此 CVE;在设定全局最低版本前,另行检查维护者当前发布的 SSRF 公告。[1], [6], [8], [9], [10], [11]
- ✓分别处理版本决策:0.17.0 修复
CVE-2026-27826的原始路径;四份后续 SSRF 公告(CVE-2026-77242、CVE-2026-77267、CVE-2026-77249、CVE-2026-77274)均将 0.22.0 列为修复版本。确定全网最低版本前,检查当前公告列表是否有更新的问题。[6], [8], [9], [10], [11]
参考来源
- 维护者公告:CVE-2026-27826
- 上游修复提交 5cd697d
- NVD 记录:CVE-2026-27826
- MITRE CWE-918:Server-Side Request Forgery
- Pluto Security 披露:MCPwnfluence 及独立的 CVE-2026-27825 / CVE-2026-27826 攻击链
- 维护者公告:MCP Atlassian 后续安全发现
- OWASP 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:服务器端请求伪造防护