GitHub代码扫描漏洞分析:调试构件泄露PAT令牌

本文详细分析CVE-2025-24362漏洞,该漏洞导致GitHub代码扫描工作流在调试模式下可能泄露包含GITHUB_TOKEN的环境变量,攻击者可利用此漏洞获取仓库访问权限。

CVE-2025-24362:GitHub PAT写入调试构件

漏洞详情

影响摘要

在某些情况下,代码扫描工作流运行失败后,CodeQL Action上传的调试构件可能包含工作流运行时的环境变量,包括任何作为环境变量暴露给工作流的密钥。对仓库具有读取权限的用户将能够访问此构件,其中包含环境中的任何密钥。

对于某些受影响的工作流运行,调试构件中暴露的环境变量包括工作流运行的有效GITHUB_TOKEN,该令牌有权访问运行工作流的仓库,并具有工作流或作业中指定的所有权限。GITHUB_TOKEN在作业完成或24小时(以先到者为准)之前保持有效。

环境变量仅从满足以下所有条件的工作流运行中暴露:

  • 配置为扫描Java/Kotlin语言的代码扫描工作流
  • 在包含Kotlin源代码的仓库中运行
  • 在启用调试构件的情况下运行
  • 使用CodeQL Action版本<= 3.28.2,以及CodeQL CLI版本>= 2.9.2(2022年5月)和<= 2.20.2
  • 工作流运行在github/codeql-action/analyze步骤内完成CodeQL数据库最终化之前失败
  • 在任何GitHub环境中运行:GitHub.com、GitHub Enterprise Cloud和GitHub Enterprise Server(注意:构件仅对同一GitHub环境中具有扫描仓库访问权限的用户可访问)

以这种方式暴露的GITHUB_TOKEN仅对满足以下所有条件的工作流运行有效(除上述条件外):

  • 使用CodeQL Action版本>= 3.26.11(2024年10月)和<= 3.28.2,或>= 2.26.11和< 3
  • 仅在GitHub.com或GitHub Enterprise Cloud中运行(在GitHub Enterprise Server上无效)

在高级设置的罕见情况下,在Java、Swift和C/C++的数据库创建过程中也可能发生环境变量记录。请阅读相应的CodeQL CLI安全公告GHSA-gqh3-9prg-j95m了解更多详情。

影响详情

在CodeQL CLI版本>= 2.9.2和<= 2.20.2中,CodeQL Kotlin提取器在为Kotlin代码创建CodeQL数据库的过程中,默认将所有环境变量记录到中间文件中。

这是CodeQL CLI的一部分,由CodeQL Action调用用于分析Kotlin仓库。

在Actions上,记录的环境变量包括GITHUB_TOKEN,该令牌授予被扫描仓库的权限。

包含环境变量的中间文件在最终化数据库时被删除,因此不会包含在成功创建的数据库中。但是,如果CodeQL Action在调试模式下调用,它会被包含在失败分析运行上传的调试构件中。

因此,在这些特定情况下(使用调试模式下的CodeQL Action进行不完整的数据库创建),能够访问调试构件的攻击者将获得对环境中的仓库密钥的未授权访问,包括GITHUB_TOKEN和通过环境变量提供的任何用户配置的密钥。

以此方式泄露的GITHUB_TOKEN的影响有限:

  • 对于使用CodeQL Action版本>= 3.26.11和<= 3.28.2,或>= 2.26.11和< 3的GitHub.com和GitHub Enterprise Cloud上的工作流(这些工作流又使用actions/artifacts v4库),调试构件在工作流作业完成之前上传。在此期间GITHUB_TOKEN仍然有效,为攻击者提供了访问仓库的机会。
  • 对于所有其他工作流,调试构件在工作流作业完成后上传,此时泄露的GITHUB_TOKEN已被撤销,无法用于访问仓库。

缓解措施

更新到CodeQL Action版本3.28.3或更高版本,或CodeQL CLI版本2.20.3或更高版本。

补丁

此漏洞已在CodeQL Action版本3.28.3中修复,该版本不再在调试模式下上传数据库构件。

此漏洞将在CodeQL CLI版本2.20.3中修复,在该版本中,所有语言的数据库创建默认不再记录完整环境。

参考

  • 捆绑了具有Kotlin提取器环境变量记录功能的CodeQL CLI 2.9.2的拉取请求
  • 引入了actions/artifacts v4库的拉取请求,允许在GITHUB_TOKEN被撤销之前在CodeQL Action调试构件中暴露该令牌
  • CodeQL CLI的相关安全公告

参考链接

严重程度

CVSS总体评分:7.1/10

弱点

  • CWE-215:将敏感信息插入调试代码
  • CWE-532:将敏感信息插入日志文件
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计