WordPress 组织持续加固 GitHub Actions 工作流并推进组织级安全扫描
Hardening GitHub Actions workflows across the WordPress organisation
WordPress Security 团队正持续加固组织内 GitHub Actions 工作流,以降低供应链攻击风险。团队已收紧权限、移除不安全行为、归档 20 个无维护仓库,并在 wordpress-develop 与 gutenberg 引入 Actionlint 和 Zizmor,后续计划在组织级统一执行扫描,并研究适用于所有仓库的安全政策。
WordPress 官方汇总了过去 18 个月的 GitHub Actions 工作流加固措施,并说明组织级扫描与安全政策的推进方向。
近几个月来,多起供应链攻击成功利用了 GitHub Actions 工作流文件中的弱点,以及 GitHub 上许多组织和代码仓库中已发布操作的弱点。由于工作流运行在权限极高的环境中,这些攻击可能造成严重后果。它们可能导致恶意版本被发布、后门被植入软件包,以及 API 密钥等机密信息被窃取。值得注意的案例包括 TanStack、actions-cool、BitWarden,以及一次影响 Microsoft、DataDog 和 CNCF 的攻击。去年,tj-actions 组织也遭遇了类似攻击。
在许多情况下,这些攻击利用了配置不当的工作流:这些工作流授予了超出实际需要的更高权限、以不安全的方式使用 pull_request_target 触发器,或者未使用依赖项版本锁定。
WordPress 项目也无法幸免于这些攻击,但幸运的是,由于过去 18 个月对工作流文件进行了多轮加固,因此迄今尚未直接受到攻击。这项工作仍在继续。
已经完成的工作
- 2025 年 1 月:对
wordpress-develop仓库中的工作流文件进行了大幅加固,包括移除不安全的表达式、收紧权限指令,以及减少不必要的凭据持久化等。还引入了 Actionlint 工作流文件检查工具。参见 wordpress-develop#8007。 - 2025 年 4 月:以类似方式对
gutenberg仓库中的工作流文件进行了加固,并将 Actionlint 也引入了该仓库。参见 gutenberg#69126。 - 2025 年 6 月:归档了 WordPress 组织中 20 个无人维护的仓库。除其他益处外,这也将停止其 Actions 工作流。
- 2026 年 4 月:将 Zizmor 静态分析工具引入了
wordpress-develop仓库。参见 wordpress-develop#9767。 - 2026 年 4 月:推出了 GitHub Actions Workflow Standards 手册页面,介绍工作流文件应满足的要求,并详细说明 Actionlint 和 Zizmor 标记的常见问题。
- 2026 年 5 月:对多个仓库中的工作流文件进行了加固,主要是为了将权限范围缩减至最低限度。参见 performance#2471、wordpress-playground#3628、two-factor#892、mcp-adapter#179、sqlite-database-integration#404、php-ai-client#235、Learn#3444 和 wporg-main-2022#686。
- 2026 年 5 月:对 WP-CLI 组织中数十个仓库使用的一个可复用工作流进行了加固,以移除不安全行为。参见 wp-cli@bd7290a。
- 2026 年 5 月:进一步加固了
wordpress-develop中使用可能存在风险的pull_request_target触发器的工作流。参见 wordpress-develop#11808。 - 2026 年 5 月:明确规定供应链和 CI/CD 工作流属于 HackerOne 漏洞赏金计划政策中的有效攻击目标。
- 2026 年 7 月:已将 Zizmor 引入
gutenberg仓库。参见 gutenberg#71523。
其中多项更改收紧了权限指令。确保每个工作流均以各作业所需的最低权限运行,可以降低攻击者利用已暴露令牌或以其他方式将权限提升到超出最低必要范围的风险。
正在开展的工作
尽管迄今已取得重大进展,但仍有许多工作有待完成。当前长期计划是实施工作流文件扫描,并使用 Actionlint 和 Zizmor 在组织级别而非各个仓库中强制执行。这将确保每个仓库在 Actions 相关文件中始终遵循安全最佳实践。安全团队仍在讨论实现此目标的最佳方式,以及如何将最终政策成文规定。
预计未来几周,WordPress 组织内的各个仓库将开设更多拉取请求,这是持续加强工作流文件安全工作的组成部分,旨在解决 Actionlint 和 Zizmor 标记的所有问题。
注意:如果由在 GitHub 上拥有 WordPress 组织“Owner”角色的人员发起安全加固拉取请求,他们可视情况自行合并该拉取请求,也可以由该组织的另一位所有者合并。
更广泛的安全政策工作
由于持续开展的工作旨在明确仓库成为 WordPress 组织一部分所需满足的要求,安全团队正在讨论如何以可持续的方式促进所有仓库的安全漏洞报告。因此,该团队希望统一采用一项适用于组织下所有仓库的安全政策,这可能最终体现为一个中央的 SECURITY.md 文件和相应的 HackerOne 政策。请留意这些政策的最新信息。
这项工作完成后,团队将研究实施更多组织范围的仓库安全政策,例如要求发布版本不可变、启用密钥扫描,以及要求配置规则集。
虽然安全团队目前没有立即执行 Node 和 npm 安全配置政策的计划,但 wordpress-develop 和 gutenberg 仓库更新为至少使用 Node v24 后,很可能会采取此类措施。请参阅 gutenberg#72973。请留意未来几周关于 Node 和 npm 配置的更多指导。
想参与其中吗?
在大多数情况下,保护 GitHub Actions 工作流文件的工作属于公开进行的加固工作,而非私下进行,任何贡献者都可以提供帮助。如果你有兴趣参与,请在此处留言,或在 WordPress Slack 的 #core-build-test-tools 频道中发送消息。
特别感谢 @desrosj 进行同行评审,以及过去 18 个月里所有为这项工作作出贡献的人。
来源:Make WordPress Security(安全) · https://make.wordpress.org/security/2026/07/13/hardening-github-actions-workflows-across-the-wordpress-organisation/
部分链接为推广/关联链接。