A Quiet Change With Outsized Impact
GitHub has updated its actions/checkout action, the single most used step in the entire GitHub Actions ecosystem, to block a notorious class of supply chain attack by default. Effective June 18 and detailed in coverage on June 23, version 7 of the action now refuses to fetch fork pull request code in pull_request_target and workflow_run workflows. That is a small configuration change in description and a large security improvement in practice, because actions/checkout runs in a staggering share of the world's continuous integration pipelines, and changing its default behavior shifts the security posture of countless repositories at once.
The attack this addresses is the pwn request, a pattern security researchers have warned about for years. The danger lies in privileged workflow triggers that run with access to repository secrets while also being reachable by external contributors. GitHub's own guidance has long cautioned that running untrusted code on the pull_request_target trigger may lead to security vulnerabilities, but guidance is easy to miss and easy to ignore. Changing the default turns that advice into enforcement, which is a far more reliable way to protect the long tail of projects that never read the security docs.
How Pwn Requests Steal Your Secrets
To appreciate the fix, it helps to understand the mechanism. The pull_request_target and workflow_run triggers were designed to run with elevated privileges, including access to the GITHUB_TOKEN and repository secrets, so that maintainers could perform tasks like labeling or commenting on contributions. The trap is that these triggers can be invoked by pull requests from forks, meaning an external attacker can submit a pull request whose code, if checked out and executed, runs inside that privileged context. The result is secret exfiltration or worse, achieved through nothing more than opening a pull request.
GitHub's hardened checkout now fails by default when it detects an attempt to download fork pull request code matching the risky patterns, the refs/pull/number/head references, fork repository references, or commit SHAs originating from forks. As the company put it, checking out and executing any untrusted code in a privileged event remains a pwn request risk, and the new behavior simply refuses to take that first dangerous step automatically. Security firm Socket and others have long documented how common and damaging these misconfigurations are, which is why moving the protection into the default carries real weight.
Secure by Default, Finally
The most important thing about this change is philosophical. For most of the history of CI tooling, the safe configuration has been the one you had to know to set, while the convenient default left the door open. GitHub has inverted that, making the secure behavior the default and requiring teams that genuinely need the risky pattern to opt in explicitly through a new allow-unsafe-pr-checkout flag, which only takes effect when set to true. That flag name is a deliberate piece of design, because anyone forced to type the word unsafe into their workflow is being told, in plain language, what they are doing.
We have argued repeatedly that the only durable way to fix systemic misconfiguration is to change defaults rather than publish more documentation. Most developers never read security advisories, and even diligent teams cannot keep up with every guidance update across every tool. By flipping the default, GitHub protects the silent majority of repositories whose maintainers were never aware they were exposed. This is exactly the kind of platform-level intervention that improves security at scale, far more effectively than asking millions of individual teams to audit their own workflows.
The Rollout and What Teams Should Check
The change is shipping deliberately. It is live in actions/checkout v7 now, with backports to all supported major versions scheduled for July 16, giving the ecosystem a clear timeline. Teams should not wait passively. They should review their workflows for any use of pull_request_target or workflow_run that checks out fork code, confirm whether that behavior is actually required, and remove it where it is not. The vast majority of projects using these triggers do so without needing to execute untrusted fork code, and for them the new default is pure upside.
For the minority that genuinely depend on the risky pattern, the opt-out flag exists, but using it should trigger a serious security review. Executing untrusted code in a privileged context is dangerous regardless of how it is enabled, and the safer architecture is usually to split the workflow so that untrusted code runs without access to secrets and privileged steps run only on trusted inputs. The flag buys compatibility, not safety, and teams that reach for it should treat it as a temporary bridge while they redesign the pipeline properly.
A Template for Platform Responsibility
Beyond the specifics, this update is a useful model for how platforms should shoulder security responsibility on behalf of their users. GitHub Actions became critical infrastructure for software delivery, and with that position comes an obligation to make the secure path the easy path. Changing the default behavior of the most widely used action is a high leverage move precisely because so many depend on it, and it reflects a maturing recognition that platform owners can prevent classes of vulnerability that individual users will never address on their own.
We would like to see more of this across the developer tooling landscape. Supply chain attacks thrive in the gap between best practice and default behavior, and the most effective defenders are the platforms that close that gap unilaterally. The pwn request has been a known threat for years, yet it persisted because the safe configuration was optional. GitHub has now made it standard, and the broader lesson for every tool vendor is that security guidance is necessary but insufficient. The defaults are where security is actually won or lost.
What Comes Next for CI Security
This change is one move in a longer campaign to harden continuous integration, which has become one of the richest targets in the software supply chain. CI systems hold credentials, publish artifacts, and run with broad privileges, making them an attacker's dream if they can slip code into the pipeline. We expect more default-tightening across the ecosystem, from stricter token scoping to mandatory approval gates for workflows triggered by external contributors. The pwn request fix is significant precisely because it addresses the most common entry point, but it is not the last gap that needs closing.
Teams should use this moment to audit their pipelines holistically rather than treating the checkout change as a single fix. That means scoping the GITHUB_TOKEN to the minimum permissions each workflow needs, isolating jobs that handle untrusted input from those that hold secrets, and reviewing third-party actions for the same fork-checkout risks the platform just addressed in its own. The platforms are doing more to protect users, which is welcome, but the shared responsibility model still applies. A secure default removes one footgun, and the organizations that pair it with disciplined pipeline design will be the ones that stay out of the breach headlines.



