Featured image of post Steam Workshop部署Action安全漏洞:版本控制仓库暴露与凭据保护不足

Steam Workshop部署Action安全漏洞:版本控制仓库暴露与凭据保护不足

本文详细分析了steam-workshop-deploy这个GitHub Action存在的一个严重安全漏洞。该漏洞在打包部署内容时未排除.git目录,可能导致敏感的仓库元数据(如个人访问令牌PAT)被泄露。文章阐述了受影响版本、潜在影响、严重性评估及修复建议。

漏洞详情

  • actions/BoldestDungeon/steam-workshop-deploy (GitHub Actions)
    • 受影响版本: < 2.0.0
    • 已修复版本: 2.0.0
  • actions/m00nl1ght-dev/steam-workshop-deploy (GitHub Actions)
    • 受影响版本: < 4
    • 已修复版本: 4

描述

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

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

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

  • 自托管运行器可能存储长期有效的令牌或密钥。
  • 开发者可能维护着嵌入 PAT 或指向私有仓库远程地址的自有 .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 目录或其他凭据,并评估发现的任何凭据的敏感性以及包含的任何源代码的机密性,来独立评估其暴露风险。

可能导致的后果包括:

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

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

下游:

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

此部署 Action

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

参考

严重性

  • 严重等级: Critical
  • CVSS 总分: 10.0
  • CVSS v3 基础指标: 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: 版本控制仓库暴露于未授权的控制范围

标识符

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

致谢

  • Gamebuster19901 (报告者)
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计