GitHub代码扫描高危漏洞:调试制品可能泄露包括GITHUB_TOKEN在内的机密信息

本文详细描述了GitHub CodeQL Action中的一个高危漏洞(CVE-2025-24362)。在特定条件下,失败的代码扫描工作流生成的调试制品可能包含工作流环境变量,导致敏感信息(如GITHUB_TOKEN)泄露,从而允许攻击者获得对代码仓库的未授权访问。文章详细说明了受影响版本、触发条件、影响范围和缓解措施。

CVE-2025-24362:GitHub PAT 被写入调试制品

漏洞详情

软件包

  • 软件包: actions
  • 仓库: github/codeql-action (GitHub Actions)

受影响版本

  • >= 3.26.11, <= 3.28.2
  • >= 2.26.11, < 3.0.0

已修补版本

  • 3.28.3

描述

影响摘要

在某些情况下,代码扫描工作流运行失败后,CodeQL Action 上传的调试制品可能包含来自该工作流运行的环境变量,包括任何作为环境变量暴露给工作流的机密信息。拥有仓库读取权限的用户将能够访问此制品,从而获取环境中的任何机密。 对于某些受影响的工作流运行,调试制品中暴露的环境变量包含一个对该工作流运行有效的 GITHUB_TOKEN。该令牌有权访问工作流运行的仓库,并拥有工作流或任务中指定的所有权限。GITHUB_TOKEN 的有效期至任务完成或 24 小时(以先到者为准)。 仅在满足以下所有条件的工作流运行中,环境变量才会被暴露:

  1. 配置为扫描 Java/Kotlin 语言的代码扫描工作流。
  2. 在包含 Kotlin 源代码的仓库中运行。
  3. 启用了调试制品。
  4. 使用 CodeQL Action 版本 <= 3.28.2,以及 CodeQL CLI 版本 >= 2.9.2 (2022年5月) 和 <= 2.20.2
  5. 工作流在 github/codeql-action/analyze 步骤中完成数据库最终化之前失败。
  6. 在任意 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(这些版本又使用了 actions/artifacts v4 库)的 GitHub.com 和 GitHub Enterprise Cloud 上的工作流,调试制品在工作流任务完成之前上传。在此期间 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 库的拉取请求,该库允许在令牌被撤销之前,在 CodeQL Action 调试制品中暴露 GITHUB_TOKEN
  • CodeQL CLI 的相关安全公告

其他参考

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