Steam Workshop部署工具安全漏洞分析:版本控制仓库暴露与凭证保护不足

本文详细分析了steam-workshop-deploy GitHub Action存在的安全漏洞,该漏洞会导致.git目录被意外打包进部署包,可能泄露敏感仓库元数据和凭证,包括GitHub个人访问令牌,造成严重安全风险。

漏洞详情

受影响版本

  • BoldestDungeon/steam-workshop-deploy (GitHub Actions):< 2.0.0
  • m00nl1ght-dev/steam-workshop-deploy (GitHub Actions):< 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文件夹,其中嵌入了PAT或指向私有仓库的远程地址
  • 工作流可能在没有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):暴露长期有效的令牌、组织范围的凭证或具有管理权限的凭证,可能导致完整的仓库泄露、密钥提取、代码篡改或私有仓库源代码的完全泄露

潜在后果

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

修复建议

下游组件

  • 撤销与此GitHub Action使用的工作流或仓库相关的任何凭证或PAT

此部署Action

  • 默认应从所有打包操作中排除.git/和其他常见敏感文件
  • 应引入deployignore或类似机制,为用户提供对部署工件中包含的文件或目录的更精细控制

参考信息

安全评分

严重程度:严重

CVSS总体评分:10.0/10

CVSS v3基础指标

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

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

其他信息

  • 弱点:无CWE
  • CVE ID:无已知CVE
  • GHSA ID:GHSA-x6gv-2rvh-qmp6
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计