← 返回藏书阁

MCP Atlassian 0.22:解析器、认证分支与真实拨号的三重边界

wiki/ai/sources/mcp-atlassian-parser-session-dial-boundaries-0220.md
分类:ai / sources · 更新:2026-10-09 09:05

MCP Atlassian 0.22:解析器、认证分支与真实拨号的三重边界

知识点轴:MCP Gateway / sandbox-security / harness-runtime / benchmark-evaluation;与A2A push路径交叉,但本例不是A2A实践。原厂2026-07-10发布v0.22.0,本轮2026-10-09补读旧版漏洞与固定版本,不是今天新披露,也不代表用户使用该产品。证据:原厂release、三个GHSA、固定tag URL validator/adapter和作者测试,归档已读选段 raw/articles/mcp-atlassian-0220-ssrf-auth-boundaries-selected-2026-10-09.md。

为什么对用户重要

MCP-Gateway-Runtime 不只是tools/list的一张清单:一个带Jira/Confluence个人凭据的请求可让服务端出站。保护若只写在URL解析函数,可能错过实际HTTP库的解析、认证分支未挂钩、另一个临时session或DNS二次解析。这个案例将contextforge-egress-path-parity-dns-rebinding的“连接时IP”推进到同一URL必须经同一语义解析、每个session路径都安装控制、并在真实连接点约束目标;a2a-push-dial-ip-proxy-final-target-boundaries则补了代理后的另一层最终目标责任。无需安装该项目,也能复用这套检查到Hermes的工具/回调适配器。^[raw/articles/mcp-atlassian-0220-ssrf-auth-boundaries-selected-2026-10-09.md]

一阶机制:三道不同的控制门

门旧版失效及固定版证据要核的对象
解析一致原厂GHSA-hgcf:旧urllib.parse.urlparse对含\\@的authority提取公网hostname,而下游requests发到回环;v0.22.0 validate_url_for_ssrf先拒parsed.netloc含反斜杠原URL、解析器A读到的host、HTTP client真实authority/最终socket;禁用有分歧的输入,而非只对“安全hostname”打勾
路径装配GHSA-6529:旧redirect hook仅header-PAT branch安装,basic/OAuth漏;GHSA-v9m3:另一条Jira用户权限查询走module-level requests.get绕session hook;v0.22 release称覆盖所有client session和auth branchtransport × auth branch × caller × session构造 × redirect × 实际请求,标准工具与内部辅助请求同算;不同旧漏洞有不同前提/结果,不合并宣称单条统一攻击链
连接时授权GHSA-489g:旧middleware DNS只返允许/拒绝,丢弃IP;客户端连接时二次DNS。固定tag SsrfPinningAdapter对每个host一次解析,拒非可信非global IP,并用已验地址拨号;测试含mock DNS一次计数和requests/urllib3栈私网拒绝原解析结果、连接时选中IP/port、TLS hostname、redirect/代理后终点、operator显式信任host的权限

三个门不是互相替代:反斜杠拒绝不解决不同auth分支;全分支装hook不解决临时session或DNS竞态;连接时pinning也不证明请求身份有权调用该工具。v0.22 release另称隐藏工具也在dispatch而非仅list强制鉴权,这是另一条权限控制,需与网络出口分开测试。原厂旧GHSA中一个报告了本机服务器确实收到请求,另一个仅模拟DNS双解析边界;本轮未复现其中任何一个。^[raw/articles/mcp-atlassian-0220-ssrf-auth-boundaries-selected-2026-10-09.md]

信任例外与边界条件

固定tag adapter取JIRA_URL、CONFLUENCE_URL、MCP_ALLOWED_URL_DOMAINS作为operator可信host,允许其指向合法私网DC;显式allowlist在URL validator里跳过DNS安全检查,故允许表不是来源于任意caller的权限,必须核环境变量的控制权、能否跨子域匹配及caller-header来源。不要为了消除误报全局放开私网。在代理环境,client所拨可能是代理,不能从这个adapter的源码直接推断代理出口最终目标也通过相同检查;TLS验证、重定向和ssl_verify=false路径也要按真实配置分测。测试是上游作者写的、未在本机运行;项目还可能有其他未读适配器,不断言v0.22全路径绝对安全。

Hermes / llm-wiki 可执行验收合同

  1. 隔离mock Jira及mock 私网目的地,不碰生产或云metadata;按caller个人/群/cron × PAT/basic/OAuth × URL(普通/authority反斜杠/重定向) × 请求路径(标准工具/辅助查询) × 直连/代理采集:入站身份、原URL、validator hostname、session实例、hook存在、最终IP、错误码、出站effect。
  2. 正例:管理员配置的私网DC可连、合法公网调用成功;负例:caller请求的回环目标/解析歧义、未授权工具调用及公网→私网redirect均在连接前拒且零effect。另测operator allowlist被错误扩权、临时bare requests和proxy出口未覆盖的情况。
  3. 对每个结论附版本tag、配置/环境快照、固定测试/本机mock/E2E层级、可判分分母;不把release的“覆盖全部”推断成用户实例或代理环境也已验证。与bifrost-mcp-registration-control-plane-and-egress对照,登记和鉴权阶段也可能提前出站;与a2a-push-dial-ip-proxy-final-target-boundaries共用“连接层+代理出口+真实投递/响应”证据矩阵。

未解 / 失败模式

  • 同一hostname在URL解析、redirect、DNS、socket和代理后的最终目标身份不一致;URL允许表或运维环境变量被低信任caller写入;某辅助session绕hook;安全检查拒绝后已有前置effect;出站阻断但合法私网DC也失败。
  • 本轮没有运行SDK、回归测试或外部服务;原厂的v0.22.0发布说明是修复声明,固定源码/测试只能证明相应实现与测试存在;实际部署有效版本、有效配置、代理出口、所有出站路径尚未知。置信度medium,不将历史GHSA写成目前仍未修复。

写入记录

  • 2026-10-09 09:04 CST:交叉核验原厂旧advisory、v0.22.0发布、固定tag URL/adapter和作者测试;建立解析一致、分支装配、连接时授权三门及隔离正反例。