GitHub Action安全漏洞:.git目录泄露与凭证保护不足

本文详细分析了steam-workshop-deploy GitHub Action中的一个严重安全漏洞。该漏洞因未在部署打包时排除.git目录,可能导致敏感仓库元数据、个人访问令牌等凭据泄露,攻击者可借此获得仓库未授权访问权限。

漏洞详情

: actions 受影响仓库: BoldestDungeon/steam-workshop-deploy (GitHub Actions) / m00nl1ght-dev/steam-workshop-deploy (GitHub Actions)

受影响版本:

  • BoldestDungeon/steam-workshop-deploy: < 2.0.0
  • m00nl1ght-dev/steam-workshop-deploy: < 4

已修复版本:

  • BoldestDungeon/steam-workshop-deploy: 2.0.0
  • m00nl1ght-dev/steam-workshop-deploy: 4

描述

摘要

steam-workshop-deploy GitHub Action 在打包部署内容时不会排除 .git 目录,且未提供内置方法来执行此操作。如果目标目录中存在 .git 文件夹(例如,由于本地 Git 仓库、自定义项目结构或通过 actions/checkout 工作流),该文件夹会被静默包含在输出包中。这会导致敏感的仓库元数据以及潜在的凭据(包括嵌入在 .git/config 中的 GitHub 个人访问令牌)泄露。

许多游戏模组项目需要从项目根目录进行打包,因为游戏期望某些文件(资源、配置、元数据)存在于特定的根级路径。因此,.git 目录通常与这些必需文件共存,并在无意中被打包,尤其是在使用 actions/checkout 时。

虽然 GitHub 托管的运行器会在每个作业结束时自动撤销临时凭据,但此漏洞在其他 CI 环境中的严重性会急剧增加:

  • 自托管运行器可能存储长期有效的令牌或密钥。
  • 开发者可能维护自己的 .git 文件夹,其中嵌入了个人访问令牌或指向私有仓库的远程地址。
  • 工作流可能在没有使用 actions/checkout 操作的情况下运行,从而分发运行机器上存在的 .git 目录。

一个受影响的真实模组示例可在此处找到:GHSA-7j9v-72w9-ww6w

详细信息

受影响用户

  • 任何在打包目录中存在 .git 的环境中使用 steam-workshop-deploy 的用户。
  • 任何使用 actions/checkout 工作流,然后 .git 目录无意中在打包目录内生成的 steam-workshop-deploy 用户(由于 GitHub Actions 的临时性,严重性大大降低)。

影响

此漏洞对下游组件的严重性范围可以从 0.0(打包目录中不存在凭据、敏感元数据或私有源代码)到 10.0(暴露了极其敏感、高权限的凭据或来自私有仓库的源代码)。

实际严重性主要取决于暴露数据的权限、范围和性质:

  • 低/无 (0.0-3.9):仅暴露非敏感的仓库元数据,不存在凭据,或仅包含公开代码。
  • 中 (4.0-6.9):暴露了具有有限仓库访问权限和/或短生命周期的凭据(例如,临时令牌),或泄露了非敏感的私有代码。
  • 高/严重 (7.0-10.0):暴露了长期有效的令牌、组织范围的凭据或具有管理权限的凭据,可能导致完整的仓库入侵、密钥提取、代码篡改或私有仓库源代码的完全泄露。

因此,每个下游使用者应通过检查打包产物中是否存在 .git 目录或其他凭据,并评估发现的任何凭据的敏感性以及包含的任何源代码的机密性,来独立评估其暴露风险。

后果可能包括:

  • 通过暴露的个人访问令牌未授权访问 Git 仓库。
  • 篡改仓库代码或元数据。
  • 恶意的 CI 行为(触发工作流、读取密钥)。
  • 泄露提交历史、远程源地址或其他敏感的内部结构。

建议

由于存在暴露敏感令牌和仓库元数据的潜在风险,此问题应被视为严重。尽管大多数使用 steam-workshop-deploy 的工作流也使用了 actions/checkout(它更安全地处理令牌和凭据),但在某些合法用例中可能不使用 actions/checkout 或存在自定义的 .git 文件夹。此外,actions/checkout 可以接受非临时令牌作为其工作流的参数。在这种情况下,长期有效或敏感的凭据可能被打包并暴露,从而大大增加了未授权访问和仓库入侵的风险。因此,无论常见使用模式如何,此问题都应被视为严重。

下游

  • 下游组件应撤销与此 GitHub Action 使用的工作流或仓库关联的任何凭据或个人访问令牌。

此部署操作

  • 该操作应默认从所有打包操作中排除 .git/ 和其他常见敏感文件。
  • 应引入 deployignore 或类似机制,使用户能够更精细地控制部署产物中包含哪些文件或目录。

参考

安全评分

严重性: 严重 CVSS 总分: 10.0

CVSS v3 基础指标

  • 攻击向量: 网络
  • 攻击复杂度: 低
  • 所需权限: 无
  • 用户交互: 无
  • 范围: 已变更
  • 机密性影响: 高
  • 完整性影响: 高
  • 可用性影响: 无

CVSS向量: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N

弱点

CWE-212: 在存储或传输前未正确移除敏感信息 产品存储、传输或共享包含敏感信息的资源,但未在资源对未授权参与者可用之前正确移除该信息。

CWE-522: 凭据保护不足 产品传输或存储身份验证凭据,但使用了不安全的方法,容易被未授权截取和/或检索。

CWE-527: 版本控制仓库暴露于未授权的控制范围 产品将 CVS、git 或其他仓库存储在目录、归档或其他资源中,这些资源被存储、传输或以其他方式使未授权参与者可以访问。

CVE ID: 无已知 CVE GHSA ID: GHSA-x6gv-2rvh-qmp6

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计