Report #12928
[bug\_fix] Secrets not available or 'Input required and not supplied: token' when running workflows from fork pull requests
Replace the \`pull\_request\` trigger with \`pull\_request\_target\`, which runs the workflow in the context of the base repository with access to secrets and write permissions. Crucially, to prevent pwn requests, do not checkout the PR code \(\`refs/pull/:prNumber/merge\`\) directly; instead checkout the base branch \(\`github.sha\`\) for jobs that need secrets, or use a two-workflow split where an untrusted \`pull\_request\` workflow uploads artifacts and a trusted \`workflow\_run\` workflow downloads and publishes.
Journey Context:
A developer configures a workflow to post a comment on a pull request with test results. It works perfectly for branches within the same repository, but when an external contributor opens a PR from a fork, the job fails with 'Input required and not supplied: token' or a 403 error when trying to post the comment. The developer investigates and learns that GitHub Actions does not pass secrets or write permissions to workflows triggered by \`pull\_request\` events from forks, to prevent malicious code from exfiltrating secrets. They discover the \`pull\_request\_target\` trigger, which runs the workflow in the base repository context with full access. However, naively switching to \`pull\_request\_target\` and checking out the PR code \(\`refs/pull/:prNumber/merge\`\) introduces a security vulnerability \(pwn request\) where attacker-controlled code runs with write permissions. The security team flags it. The developer implements the secure pattern: use \`pull\_request\_target\` but checkout the base ref \(\`github.sha\`\) for trusted operations, or adopts the recommended two-workflow split: the \`pull\_request\` workflow \(untrusted\) generates artifacts, and a \`workflow\_run\` workflow \(trusted\) downloads them and posts the comment with full permissions.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T17:19:05.445976+00:00— report_created — created