Hardening GitHub Actions workflows across the WordPress organisation

In recent months several supply chain attacks have successfully exploited weaknesses in GitHubGitHub GitHub is a website that offers online implementation of git repositories that can easily be shared, copied and modified by other developers. Public repositories are free to host, private repositories require a paid subscription. GitHub introduced the concept of the ‘pull request’ where code changes done in branches by contributors can be reviewed and discussed before being merged by the repository owner. https://github.com/ Actions workflow files and in published actions across many organisations and repos on GitHub. The effects of these attacks can be considerable due to the highly privileged environment in which workflows run. They can lead to malicious releases being published, backdoors being inserted into packages, and secrets, such as APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. keys, being exfiltrated. Notable instances include TanStack, actions-cool, BitWarden, and an attack that affected Microsoft, DataDog, and CNCF. The tj-actions organisation was attacked in a similar manner last year.

In many instances, these attacks exploit misconfigured workflows that unnecessarily grant higher than necessary permissions, use the pull_request_target trigger in an unsafe manner, or don’t make use of dependency pinning.

The WordPress project isn’t immune to these attacks, but fortunately it’s so far not directly been affected due to several rounds of hardening applied to workflow files over the last 18 months. This work remains ongoing.

What’s already been done

Several of these changes tightened the permissions directives. Ensuring each workflow runs with the lowest permissions required for each job reduces the risk of an attacker being able to exploit an exposed token or otherwise elevate their permission beyond what is minimally necessary.

What’s being worked on

While great progress has been made to date, there’s still a large amount of work remaining. The current long-term plan is for workflow file scanning with Actionlint and Zizmor to be implemented and enforced at the organisation level instead of in each repository. This ensures that every repository consistently follows secure best practices within Actions-related files. The Security Team is still discussing the best way to accomplish this and how to codify the resulting policy.

You can expect to see more pull requests to be opened in repos across the WordPress organisation in the coming weeks as a part of the continued efforts to harden workflow files by addressing any issues flagged by Actionlint and Zizmor.

Note: If a security hardening pull request is opened by someone who has the “Owner” role on the WordPress organisation on GitHub, it’s within their remit to self-merge the pull request if they deem it necessary, or for another owner of the organisation to do so.

Wider security policy work

As a result of the ongoing efforts to clarify the requirements for a repository to be a part of the WordPress organisation, the Security Team is discussing the best way to facilitate security vulnerability reports for all repos in a sustainable way. As a result the team hopes to standardise on a security policy that will apply to all repos under the organisation, and this may well manifest as a central SECURITY.md file and a corresponding HackerOne policy. Stay tuned for more info on these policies soon.

Once that work is complete, the team will look at implementing further organisation-wide repo security policies such as requiring immutable releases, secret scanning, and requiring rulesets to be in place.

While the Security Team has no immediate plans to enforce policies for the secure configuration of Node and npm, it’s likely that this will be done once the wordpress-develop and gutenberg repos are updated to use at least Node v24. See gutenberg#72973. Stay tuned for more guidance on Node and npm configuration in the coming weeks.

Want to get involved?

For the most part, securing GitHub Actions workflow files is hardening work that’s performed in public, not in private, and any contributor can help out. If you’re interested in helping out please leave a comment here or post a message in the #core-build-test-tools channel in WordPress SlackSlack Slack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/.

Props to @desrosj for peer review and everyone who has contributed to this work over the last 18 months.

X-post: AI Guidelines for WordPress

X-comment from +make.wordpress.org/ai: Comment on AI Guidelines for WordPress

X-post: Proposal: Clarifying Core’s Database Support Policy

X-comment from +make.wordpress.org/core: Comment on Proposal: Clarifying Core's Database Support Policy

X-post: The Incident Response Team is looking for new members

X-comment from +make.wordpress.org/community: Comment on The Incident Response Team is looking for new members

Security updates will cease for WordPress versions 4.1 through 4.6

The WordPress Security Team will cease providing updates for WordPress versions 4.1 – 4.6 in July 2025.

Officially only the latest version of WordPress is supported. The Security Team historically has a practice of backporting security fixes, as necessary, as a courtesy to sites on older versions in the expectation the sites will be automatically updated.

Background

Since December 2022 these courtesy backports have been applied when necessary to versions of WordPress back to 4.1. Versions 4.1 – 4.6 have now reached levels of usage where the benefit of providing these updates is outweighed by the significant effort involved in maintaining not only the branches themselves, but also the tooling and infrastructure for performing the backporting, building, testing, and releasing that’s required in order to continue having confidence in backporting to these branches.

Well below 1% of sites are running WordPress 4.1 – 4.6 as of June 2025. Conversely, backporting security updates to older versions of WordPress takes a substantial amount of time and effort that compounds when each new major version is released. The effect of this imbalance means that during a security release the security team spends most of the time preparing backports for a minority of WordPress installations. By dropping support for these older versions, the team can continue to focus on the latest versions of WordPress which are used by the overwhelming majority of WordPress websites.

Process

Versions older than 4.7 will display a non-dismissible notice in the admin dashboard informing users that an update is available. In the final updates for these WordPress versions, these notices will be made more prominent and inform the administrator that their version of WordPress is no longer receiving security updates.

The text strings and translations for these messages already exist in all branches and won’t change.

TracTrac Trac is the place where contributors create issues for bugs or feature requests much like GitHub.https://core.trac.wordpress.org/. ticket

Changes to the trunk branch and the affected branches can be tracked in this Core Trac ticket.

Thanks to @desrosj for reviewing this post prior to publishing

X-post: Incident Response Team: Call for Nominations

X-comment from +make.wordpress.org/project: Comment on Incident Response Team: Call for Nominations

X-post: Update on Matrix Migration: Pausing the Transition

X-comment from +make.wordpress.org/project: Comment on Update on Matrix Migration: Pausing the Transition

X-post: Embracing Matrix for Enhanced Communication

X-comment from +make.wordpress.org/project: Comment on Embracing Matrix for Enhanced Communication

X-post: Create Tours for Make P2s

X-comment from +make.wordpress.org/meta: Comment on Create Tours for Make P2s

Dropping security updates for WordPress versions 3.7 through 4.0

The WordPress Security Team will cease providing updates for WordPress versions 3.7 – 4.0 in three months time, as of December 1, 2022.

Officially WordPress only provides support for the latest version of the software. The Security team historically has a practice of backporting security fixes as a courtesy to sites on older versions in the expectation the sites will be automatically updated.

Until now, these courtesy backports have included all versions of WordPress supporting automatic updates. Versions WordPress 3.7 – 4.0 have reached levels of usage, namely less than 1% of total installs, where the benefit of providing these updates is outweighed by the effort involved.

Background

Sites running WordPress 3.7 – 4.0 form a very low percentage of total WordPress installations. Conversely, backporting security updates to older versions of WordPress takes a substantial amount of time; this effect compounds with each new major version released.

The effect of this imbalance means that the Security team spends most of the time preparing backports for the vast minority of WordPress installations. By dropping support for these older versions, the newer versions of WordPress will become more secure as more time can be focused on their needs.

The decision on which versions to drop support for was based on the percentage of sites reported on the statistics page.

Process

An out of date version of WordPress, in this case versions 4.0.* and older, will display a non-dismissible notice in the dashboard informing users an update is available. In the final updates for these WordPress versions, these notices will be made more prominent and inform the administrator their version of WordPress is no longer receiving security updates.

Update notice for sites no longer receiving security updates: "WordPress 6.0.2 is available! Please update now. Important! Your version of WordPress (3.8.39) is no longer supported, you will not receive any security updates for your website. To keep your site secure, please update to the latest version of WordPress".

An additional string will be added to the code base to allow for the future dropping of security support.
These strings will be committed to trunk and backported to each of the earlier versions prior to the release date. This will allow the Polyglot teams to translate them and for the strings to begin appearing in translation packages. Don’t panic: not all of the versions of WordPress containing these strings will be affected any time soon.