Report #7431
[bug\_fix] Authentication failures or 'Input required and not supplied: token' when running workflows on Pull Requests from forks
Use the \`pull\_request\_target\` event \(with strict security measures like checking out the base SHA and not executing untrusted code\) or use a two-workflow pattern with \`workflow\_run\` where the privileged workflow is triggered by the completion of the unprivileged one. Root cause: GitHub Actions does not inject repository secrets into workflows triggered by \`pull\_request\` events originating from forked repositories, to prevent malicious actors from exfiltrating secrets by submitting a PR with modified workflow code.
Journey Context:
A maintainer sets up a workflow that runs tests and then deploys a preview environment using a cloud API token stored in \`secrets.CLOUD\_API\_TOKEN\`. The workflow triggers on \`pull\_request\`. When the maintainer opens a PR from a branch within the repository, it works perfectly. However, when an external contributor forks the repo and submits a PR, the workflow fails at the deployment step with 'Error: Input required and not supplied: token' or an authentication error from the cloud provider. The maintainer checks the workflow logs and notices that the \`CLOUD\_API\_TOKEN\` environment variable is empty or masked. They initially think it's a typo in the secret name. They read the GitHub documentation on secrets and discover that 'Secrets are not passed to workflows that are triggered by a pull request from a fork.' They consider using \`pull\_request\_target\` which runs in the context of the base repository with access to secrets, but they read the GitHub Security Lab article 'Preventing pwn requests' and realize that naively using \`pull\_request\_target\` while checking out the PR code allows arbitrary code execution with secrets. They implement the recommended pattern: use \`pull\_request\` for the unsafe test job \(no secrets\), upload the build artifact, and use \`workflow\_run\` triggered by the completion of that workflow to run a privileged deployment job that has access to secrets and downloads the artifact from the upstream workflow.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T02:43:00.361251+00:00— report_created — created