🟠 高危 | CVE-2026-47722 — nebula-mesh is a self-hosted control plane for Sla...
🟠 【深度分析】高危安全漏洞:CVE-2026-47722
CVSS 评分: 高危(8.7)🟠 状态: Deferred 发布时间: 2026-07-23
🔍 技术细节速览
| 字段 | 值 |
|---|---|
| CVE ID | CVE-2026-47722 |
| CVSS 评分 | 8.7 🟠 |
| 严重程度 | 高危 |
| CVSS 向量 | CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X |
| CWE 分类 | CWE-94 |
| 发布时间 | 2026-07-23 |
| 最后更新 | 2026-07-30 |
| 状态 | Deferred |
| 数据来源 | security-advisories@github.com |
CVSS 评分:8.7(高危)
CVSS 向量: CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
危害等级: 高(机密性、完整性、可用性均受严重损害)
漏洞概述
CVE-2026-47722 影响 Nebula Mesh——一款自托管的 Slack Nebula Mesh VPN 控制平面。在版本 0.3.2 之前,该控制平面在处理用户提供的 ListenHost 与 TunDevice 字段时,未进行充分的输入验证或消毒,直接将原始字符串拼接至 Go 的 text/template 模板中,用于生成代理端(agent)的 config.yml 配置文件。攻击者可利用此缺陷注入恶意模板指令,实现服务器端模板注入(Server-Side Template Injection, SSTI),进而可能导致任意代码执行或配置文件篡改。
该漏洞由 CWE-94(代码生成控制不当)收录,CVSS 4.0 评分为 8.7(高危)。攻击复杂度低(AC:L),无需用户交互(UI:N),仅需低权限(PR:L)即可通过网络发起攻击,且对受影响系统的机密性、完整性、可用性均造成高影响。
受影响组件与版本
- 组件: Nebula Mesh(控制平面)
- 固定版本: 0.3.2 及以上
- 受影响版本: 所有低于 0.3.2 的版本
漏洞原理分析
1. 漏洞成因
根据 NVD 描述的代码位置:
internal/configgen/generator.go:86,108,119:这些行将用户提供的ListenHost和TunDevice直接插入到text/template的模板上下文中。internal/web/advanced.go:20-35:该处仅使用strings.TrimSpace对输入进行空白字符清理,未执行任何字符或模式验证。
这意味着攻击者可通过 HTTP API 提交 任意字符串 作为 ListenHost 或 TunDevice 的值。由于 text/template 在 Go 中支持执行模板指令(如 {{ .Field }}、{{ define }}、{{ if }} 等),当这些用户输入被直接嵌入模板时,攻击者可以注入自定义模板语法,从而改变最终生成的 config.yml 内容。
2. 攻击向量
攻击向量可以描述为:
- 获取低权限访问:攻击者需要拥有调用配置生成 API 的权限(PR:L),例如通过 VPN 用户凭据或管理界面普通账户。
- 构造恶意输入:在
ListenHost或TunDevice字段中植入 Go 模板指令,例如:
实际可利用的能力取决于控制平面注册的模板函数(例如是否提供了{{ . }} // 可能泄露数据 {{ exec "some command" }} // 若模板引擎允许执行外部命令(注意:Go text/template 默认不提供此函数,但可通过自定义函数集扩展) {{ template "config" . }} // 可能引发无限递归或信息泄露exec、readFile等危险函数)。根据现有信息,具体可利用的函数列表未知,但注入行为本身即可导致配置文件被恶意篡改(如修改 VPN 监听地址、路由、密钥等)。 - 触发模板渲染:控制平面在生成 agent 配置时,会使用包含用户注入内容的模板进行渲染。模板引擎执行注入指令,生成恶意配置或执行其他模板操作。
- 后果:可导致:
- 配置文件泄露:通过模板指令输出敏感数据(如数据库密钥、其他用户配置)。
- 任意代码执行:若控制平面注册了
exec等系统调用函数(常见于某些扩展实现),攻击者可远程执行任意命令。 - 代理端被控制:篡改后的 agent 配置可使攻击者劫持 VPN 连接、修改网络参数,甚至将恶意配置分发至其他节点。
3. CWE-94 说明
CWE-94 指“代码生成控制不当”(Improper Control of Generation of Code),常见于将不可信数据直接拼接至模板、脚本或代码生成场景。本漏洞完全符合该分类,且由于 Go text/template 本身并非完全沙箱化(相比 html/template),一旦允许注入,攻击者有较大可能实现代码执行。
影响评估
利用难度
| 要素 | 评估 | 来源 |
|---|---|---|
| 攻击向量(AV) | 网络(N) | CVSS 向量 |
| 攻击复杂度(AC) | 低(L) | 仅需构造模板指令 |
| 攻击前提(AT) | 无(N) | 无需特殊环境 |
| 所需权限(PR) | 低(L) | 普通用户或 API 调用者 |
| 用户交互(UI) | 无(N) | 无需受害者操作 |
潜在后果
- 机密性破坏(VC:H):可能窃取控制平面内部数据或其他 agent 配置。
- 完整性破坏(VI:H):生成的 agent 配置文件可被完全篡改,导致 VPN 网络拓扑被攻击者控制。
- 可用性破坏(VA:H):攻击者可制造无效配置导致 agent 无法运行,或通过命令执行直接宕机。
环境依赖性
由于该漏洞出现在控制平面的配置生成 API 中,所有依赖该 API 的 agent 推送场景均受影响。建议立即评估部署环境中哪些用户或服务可以调用该 API,并检查日志中是否存在可疑的 ListenHost 或 TunDevice 输入。
修复建议
正式修复
- 升级至版本 0.3.2 或更高:官方已在 0.3.2 中修复该漏洞。开发者应尽快升级控制平面组件。
- 参考发布公告:关注 GitHub 仓库的 Security Advisory(具体链接见参考资料)。
临时缓解措施
在无法立即升级的情况下,可采取以下措施降低风险:
- 输入验证:对
ListenHost和TunDevice字段进行严格字符集校验,例如仅允许字母、数字、短横线、点号、斜杠(根据合法路径/主机名格式),并禁止包含 Go 模板语法字符(如{{、}}、$等)。 - 最小权限原则:限制能够调用配置生成 API 的用户权限,避免低权限用户暴露给不可信网络。
- 网络隔离:将控制平面部署于内部网络,避免直接暴露于公网。
- 日志监控:检查历史日志,排查是否存在包含
{{、}}等特殊字符的ListenHost或TunDevice字段的 API 请求,以判断是否已被利用。
参考资料
- CVE 详情页:https://nvd.nist.gov/vuln/detail/CVE-2026-47722
- CWE-94:https://cwe.mitre.org/data/definitions/94.html
- Nebula Mesh GitHub 仓库(安全公告区域):https://github.com/(此处应填写实际仓库地址,示例未提供)
- Go text/template 安全说明:https://pkg.go.dev/text/template(提醒开发者注意模板注入风险)
⚠️ 说明:由于 NVD 公开信息有限,部分技术细节(如模板引擎注册的自定义函数列表)未能确认。本文分析基于已知模式合理推断,实际利用效果需根据具体部署环境验证。建议参考官方更新日志和补丁详情。