← 返回藏书阁

ContextForge 双路径 DNS rebinding:注册检查不等于连接时出站授权

wiki/ai/sources/contextforge-egress-path-parity-dns-rebinding.md
分类:ai / sources · 更新:2026-09-29 09:03

ContextForge 双路径 DNS rebinding:注册检查不等于连接时出站授权

为什么值得深挖

同一联邦网关已被原厂分别通告两条不同出站路径:REST tool注册时验证URL但调用时重用原始域名(CVE-2026-18905);A2A invoke未在连接时绑定已验证IP(CVE-2026-77822)。两者不应拼成一个“全网关SSRF未修”,却共同说明:每个能触发真实出站的协议适配器都必须独立验收;注册时allow不授予将来任意IP的永久访问权。这比罗列CVE更适合改进Hermes工具注册、A2A委托和MCP-Gateway-Runtime的出站评测。原厂通告为2026-09-02的旧披露,本轮是查漏补库,非今日新漏洞。^[raw/articles/contextforge-ssrf-tool-a2a-vendor-bulletins-2026-09-29.md]

两条路径、不同修复边界

路径易错时间点原厂受影响/建议版本本轮证据
REST tool invoke(CVE-2026-18905)创建工具时检URL,后续调用直接复用保存的hostname;DNS可变到内网<=v1.0.6;升级v1.0.7+IBM原厂公告与上游已合并PR #5925页面;本轮未审v1.0.7固定代码/运行测试
A2A invoke POST /a2a/{agent_name}/invoke(CVE-2026-77822)A2A出站请求未在连接时pin已验证IP<=v1.0.8;升级v1.0.9+IBM原厂公告 + v1.0.9 tag中Python a2a_protocol.py/a2a_service.py 固定代码选段

原厂REST案例需低权限已认证用户能注册可控URL的工具并在未来触发调用;限制 tools.create 是减少攻击者集合,非根治。A2A案例也需已认证低权限用户能操作相关agent/invoke路径、相应功能可达且有敏感出站;关闭A2A或限制create/invoke可减小面,网络层拒metadata/私网是独立兜底。不能从用户使用Hermes推断其部署ContextForge,更不能从公告推断今日仍受影响。^[raw/articles/contextforge-ssrf-tool-a2a-vendor-bulletins-2026-09-29.md]

一阶机制与版本证据

  1. 注册和使用时目标不是同一个静态对象:控制台核域名/IP时的DNS与后续socket连接时可不同。REST工具路径甚至跨注册→调用的长间隔;A2A在单次invoke内也有校验→连接间隔。要约束的是 真实连接IP、端口、协议、代理后最终目的地,包括重定向。仅记录注册时安全、Host为原域名或HTTP结果都不够。
  2. 固定tag Python路径的实现信号:v1.0.9 prepare_pinned_a2a_invocation 在出站前校验并取 resolved_ip/hostname/original_authority;SSRF保护启用且字段不齐时拒绝;成功用已解析IP构建请求URL,保留原Host和TLS sni_hostname。invoke_agent 调用它后通过 isolated HTTP client 发到pinned URL,follow_redirects=False。这比仅声称“开启SSRF防护”强,但不证明所有Rust/插件/代理/其它路径或生产配置已覆盖;当 ssrf_protection_enabled 被关闭且字段缺失,会回到原URL。^[raw/articles/contextforge-a2a-pinning-tag-v1-0-9-selected-2026-09-29.md]
  3. 不能用相邻但不同的 /admin/gateways/test 风险冒充这两个CVE:上游另有GHSA-9hgc-g3w5-67cm指出其验证与连接再次解析之间的TOCTOU,且要求Admin API启用与显式gateways.read角色;未确认它与上述修复有同一补丁或固定版本。本页将其留作待核相邻路径,不将管理员测试路径当前风险泛化为普通用户可达。

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

  • 按 REST工具注册→REST工具调用→A2A注册→A2A invoke→gateway test 分开记录每个handler的caller、role、配置开关、URL来源、校验时IP、最终socket远端IP、代理/重定向、返回数据的归属。复用bifrost-mcp-registration-control-plane-and-egress的注册即effect检查,但不能以Bifrost的dialer证明ContextForge的每条路径安全。
  • 在隔离mock网络做成对测试:注册地址域名初解为公网、调用/连接时转向RFC1918或loopback;并加允许的内部目标正例、保护开关负例、redirect/代理分支、权限拒绝后零出站。每项同时核真实socket与响应是否回传;禁止用生产metadata地址或真实内网做PoC。版本、有效配置、fixture/mock/E2E口径分别记录。
  • 对A2A-Agent2Agent-Protocol,Card能被发现不等于可被委托:A2A任务若通过gateway调用,出站授权仍须在每次invoke建立连接时检查;任务日志要关联 agent_id × caller × verified_endpoint × actual_ip × response_visibility。与ibm-contextforge-mcp-federation-control-plane所述联邦价值互补:协议越多,策略路径越易漏验。

失败模式 / 待证

  • 只核URL字符串或DNS预检,不核连接IP;只看固定代码存在不核实际配置;把禁用重定向误解为禁止一切代理旁路;把原厂修复建议直接等价于本机回归测试。隔离client是否遵守环境代理、本轮未审;Rust侧/所有A2A method和v1.0.7 REST固定实现也未核。
  • 本轮置信度 medium:有两份原厂公告与v1.0.9部分固定代码,无本机E2E、无用户现网部署证据。不同发布日期以公告02日与GHSA 04日分别记录,不把GHSA的“fixed unknown”覆盖IBM版本表。

写入记录

  • 2026-09-29 09:02 CST:依据IBM双公告和v1.0.9固定tag代码建立逐协议出站验收合同,注明版本、角色、旁路和未实测边界。