摘要
Microsoft 安全响应中心(MSRC)获悉一个漏洞,其中 Azure 命令行接口(CLI)可能通过 GitHub Actions 日志暴露敏感信息,包括凭证。来自 Palo Alto Networks Prisma Cloud 的研究人员发现,Azure CLI 命令可用于显示敏感数据并输出到持续集成和持续部署(CI/CD)日志。Microsoft 建议客户更新到最新版本的 Azure CLI(2.54),并遵循以下提供的指南,以帮助防止无意中通过 CI/CD 日志暴露密钥。Azure 门户已向最近使用 Azure CLI 命令的客户发送通知,告知他们有可用的更新。
针对 Prisma Cloud 的报告,Microsoft 已对多个产品进行了更改,包括 Azure Pipelines、GitHub Actions 和 Azure CLI,以实施更强大的密钥编辑功能。这一发现突显了日益增长的需求,即帮助确保客户不会将敏感信息记录到其代码库和 CI/CD 管道中。最小化安全风险是共同责任;Microsoft 已发布 Azure CLI 更新以帮助防止密钥输出,并期望客户主动采取措施保护其工作负载。
有关此漏洞的更多信息,可在安全更新指南中的 CVE-2023-36052 下找到。
对 Azure Pipelines、GitHub Actions 日志记录和 Azure CLI 的更改
Microsoft 已对多个 Azure CLI 命令进行了更改,并将继续实施更改以进一步强化 Azure CLI,防止可能导致密钥暴露的无意使用。一个例子是实施了一个新的默认设置,该设置防止在 App Service 系列(Web Apps、Functions 等)服务的更新命令输出中呈现密钥。此默认设置仅适用于更新到最新版本 Azure CLI(2.53.1 及以上)的客户,不适用于旧版本 Azure CLI(2.53.0 及以下)。更多信息可在 Azure CLI 发行说明中找到。请注意,此更改可能会对某些自动化工作流产生不利影响,因为某些用户可能期望在 Azure CLI 响应中获取密钥值,以便在工作流的后续部分使用。然而,我们鼓励客户考虑更安全的自动化编写模式。下面列出了更新的 App Service 命令示例。随着我们继续调查,我们将继续对 Azure CLI 进行更新,并更新 CVE-2023-36052 中的命令列表。
- az webapp config appsettings set
- az webapp config appsettings delete
此外,我们正在扩展 GitHub Actions 和 Azure Pipelines 中的凭据编辑功能,以识别构建日志中更多可识别的密钥模式并对其进行屏蔽。出于准确性和性能原因,此编辑功能针对一组特定的密钥,旨在捕获任何可能无意中进入面向公众日志的 Microsoft 颁发的密钥。请注意,当前被编辑的模式并不全面,您可能会在输出和日志中看到其他未设置为密钥的变量和数据被屏蔽。Microsoft 正在不断探索优化和扩展此保护的方法,以包括潜在密钥的健壮模式。
客户指南以避免通过 Azure CLI 无意中暴露密钥
如上所述,最小化安全风险是共同责任。一如既往,Microsoft 鼓励客户在开发和管理云工作负载时遵循最佳实践。在密钥管理方面,客户可以采取许多步骤来帮助避免无意中暴露密钥,包括:
- 始终将 Azure CLI 更新到最新版本,以获取最新的安全更新。
- 避免在日志和/或公开可访问的位置暴露 Azure CLI 输出。如果开发需要输出值的脚本,请确保过滤掉脚本所需的属性。请查看 Azure CLI 关于输出格式的信息,并实施我们关于屏蔽环境变量的推荐指南。
- 定期轮换密钥和机密。作为一般最佳实践,鼓励客户根据其环境的最佳节奏定期轮换密钥和机密。请在此处查看我们在 Azure 中关于密钥和机密考量的文章。
- 查看有关 Azure 服务密钥管理的指南。
- 查看 GitHub 关于在 GitHub Actions 中进行安全强化的最佳实践。
- 确保 GitHub 代码库设置为私有,除非需要公开。
- 查看我们关于保护 Azure Pipelines 的指南。
致谢
我们感谢有机会调查 Prisma Cloud 报告的发现,并感谢他们在 Microsoft Bug Bounty 计划条款下进行安全研究。我们鼓励所有研究人员在协调漏洞披露(CVD)下与供应商合作,并遵守渗透测试的参与规则,以避免在进行安全研究时影响客户数据。
Prisma Cloud 关于 Azure CLI 泄漏和问题使用模式的博客
参考
Azure CLI 指南
- Azure 命令行接口(CLI)- 概述
- 输出格式 – Azure CLI
GitHub 指南
- 在 GitHub Actions 中使用密钥 - GitHub 文档
- 屏蔽环境变量
- 设置代码库可见性 - GitHub 文档
- 删除 GitHub Actions 中的日志 - GitHub 文档
Azure DevOps 指南
- 设置密钥变量 - Azure Pipelines | Microsoft Learn
- 将项目更改为公共或私有 - Azure DevOps 服务公共和私有项目 | Microsoft Learn
- 在 Azure Pipelines 中使用密钥 - Azure Pipelines | Microsoft Learn
- 安全最佳实践 - Azure DevOps | Microsoft Learn