🔴 严重 | CVE-2026-44359 — Meshtastic is an open source mesh networking solut...
🔴 【深度分析】严重安全漏洞:CVE-2026-44359
CVSS 评分: 严重(10.0)🔴 状态: Deferred 发布时间: 2026-07-20
🔍 技术细节速览
| 字段 | 值 |
|---|---|
| CVE ID | CVE-2026-44359 |
| CVSS 评分 | 10.0 🔴 |
| 严重程度 | 严重 |
| CVSS 向量 | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N |
| CWE 分类 | CWE-94,CWE-829 |
| 发布时间 | 2026-07-20 |
| 最后更新 | 2026-07-24 |
| 状态 | Deferred |
| 数据来源 | security-advisories@github.com |
⚠️ CVSS 评分:10.0(严重)
CVSS 向量:CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N
危害等级: 严重(Critical)
漏洞概述
CVE-2026-44359 是影响开源 Mesh 网络项目 Meshtastic 的一个严重安全漏洞。该漏洞源于其 GitHub Actions 工作流 main_matrix.yml 中错误地使用了 pull_request_target 触发器,导致攻击者可以通过提交恶意 Pull Request(PR)自动触发 CI 流程,并利用从攻击者 fork 仓库检出的恶意代码执行任意操作。由于被触发的 job 拥有访问仓库密钥(secrets)和高权限 GITHUB_TOKEN 的能力,且没有任何审核门控,攻击者能够完全控制受影响仓库,实施供应链投毒、自托管 runner 劫持乃至仓库接管。该漏洞与之前修复的 GHSA-6mwm-v2vv-pp96 问题不同,后者仅修补了 github.head_ref 的命令注入,而本漏洞的核心缺陷——fork 检出与高权限执行——未被解决。
受影响组件与版本
| 组件 | 版本范围 |
|---|---|
Meshtastic GitHub 仓库(含 main_matrix.yml 工作流配置) |
< 2.7.21.1370b23 |
| 利用该工作流的所有自托管或 GitHub 托管 runner | 所有在补丁前运行于该仓库的 CI 环境 |
修复版本:2.7.21.1370b23(commit hash 对应版本)
漏洞原理分析
该漏洞映射至 CWE-94(代码注入)和 CWE-829(从不可信源包含函数),是典型的 GitHub Actions 不安全配置。
工作流配置缺陷
main_matrix.yml 使用 pull_request_target 事件作为触发器。与 pull_request 事件不同,pull_request_target 会在目标仓库(而非 fork 仓库)的上下文中运行,这意味着工作流可以访问目标仓库的密钥和高权限 GITHUB_TOKEN(通常具有读写仓库的权限)。然而,pull_request_target 默认会从 PR 的合并提交(HEAD)中加载工作流文件,但工作流定义本身仍然来自目标仓库的默认分支;而工作流中的 actions/checkout 步骤如果没有显式指定 ref,则默认检出的是 PR 合并后的代码(即攻击者 fork 中的代码)。
根据描述,check、build、build-debian-src 等 job 直接执行从攻击者 fork 检出的文件(如构建脚本、测试代码等)。由于攻击者可以控制这些文件的内容,他们可以植入恶意代码,这些代码在拥有高权限的 runner 上执行,从而:
- 读取仓库 secrets(如 NPM 密钥、云服务令牌等)并外传;
- 修改仓库代码、标签、发布版本;
- 将恶意代码注入到正式发布包中(供应链投毒);
- 利用
GITHUB_TOKEN的写权限向仓库推送恶意 commit、创建 release 等。
为什么审核门控缺失?
通常情况下,对于外部贡献者的 PR,仓库应启用“需要批准”才能运行工作流或授予权限。但该工作流对所有 author_association == "NONE" 的 PR 自动触发,没有设置任何 if 条件来检查用户身份或要求手动批准。因此,任何人只需 fork 仓库并提交 PR,即可自动启动含有高权限的 CI 流程。
与 GHSA-6mwm-v2vv-pp96 的区别
之前修复的漏洞利用 github.head_ref 作为命令行参数进行注入,修复方案改为环境变量传递。但该修复仅限于 setup job,而 check、build 等 job 仍然直接检出攻击者的 fork 代码并执行。因此,根本问题(不受信任代码在高权限上下文中执行)依然存在。
影响评估
- 攻击复杂度(AC:L):攻击者只需创建 GitHub 账号并提交 PR,无需特殊技巧即可触发。
- 所需权限(PR:N):无需任何仓库权限,仅需公开 fork 的权限。
- 用户交互(UI:N):漏洞自动触发,无需受害者进行任何操作(如 review PR)。
- 影响范围(S:C):漏洞影响整个仓库及其 CI 环境,属于横向范围变更(confidentiality/integrity 可以跨越不同仓库/系统)。
- 潜在后果:
- 供应链攻击:攻击者可将后门注入 Meshtastic 的官方发行版(固件、App 等),波及所有用户。
- 仓库接管:通过高权限
GITHUB_TOKEN修改仓库保护设置、添加管理协作成员、删除分支等。 - 自托管 runner 劫持:如果使用自托管 runner,攻击者可以在 runner 上执行任意命令,进一步渗透内网。
- 信息泄露:所有仓库 secrets 可能被窃取,包括云服务证书、API 密钥等。
综合评估:该漏洞是 GitHub Actions 配置中最危险的模式之一,实际威胁极大,CVSS 10.0 的评分名副其实。
修复建议
1. 立即升级
将 Meshtastic 仓库升级至 2.7.21.1370b23 或更高版本。该版本已更新工作流配置,撤回了 pull_request_target 的不安全使用,或增加了必要的安全检查与批准流程。
2. 临时缓解措施(如无法立即升级)
- 禁用工作流:在仓库 Settings → Actions → General 中将
main_matrix.yml工作流设为禁用,直到完成修复。 - 限制 PR 触发条件:在工作流中添加
if: github.event.pull_request.head.repo.full_name == github.repository来阻止 fork 触发,或改为使用pull_request事件(但会失去 secrets 访问,需要重新设计流程)。 - 启用 PR 批准:在仓库设置中要求来自外部贡献者的 PR 必须获得维护者批准后才能运行工作流(需配合
pull_request事件或使用pull_request_target时的github.event.pull_request.draft == false等条件)。
3. 最佳实践建议
- 避免在
pull_request_target工作流中直接 checkout 并 执行 PR 中的代码。若需要访问 secrets,应通过环境变量或仅执行少数受控脚本。 - 如需从 fork 中获取构建产物,应使用
workflow_run事件分离构建与 secrets 访问。 - 启用 GitHub 推荐的“Require approval for all external contributions”选项。
参考资料
| 来源 | 链接 |
|---|---|
| CVE 详情(NVD) | https://nvd.nist.gov/vuln/detail/CVE-2026-44359 |
| CWE-94:代码注入 | https://cwe.mitre.org/data/definitions/94.html |
| CWE-829:从不可信源包含函数 | https://cwe.mitre.org/data/definitions/829.html |
| GitHub 官方文档:保护 Actions 安全 | https://docs.github.com/actions/security-guides/security-hardening-for-github-actions |
| 相关安全公告(GHSA-6mwm-v2vv-pp96) | 预期在 Meshtastic 仓库的 Security Advisories 中可查 |
注意: 本分析基于 NVD 提供的公开数据及常见 GitHub Actions 漏洞模式得出的推断。若有更详细的补丁信息或攻击代码细节,请以官方公告为准。