🔴 【深度分析】严重安全漏洞: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 漏洞模式得出的推断。若有更详细的补丁信息或攻击代码细节,请以官方公告为准。