Tip: GitHub's 2026 Actions changes don't stop script injection or artifact poisoning. Pass untrusted input through env vars and never run downloaded artifacts in privileged jobs
Wiz's Oct 26 review of what still works against GitHub Actions makes two points worth checking in your workflows today:
- Script injection needs no checkout. A
pull_request_targetstep likerun: echo "${{ github.event.pull_request.title }}"runs an attacker's PR title as shell code, with the job's secrets. Move the value intoenv:(for examplePR_TITLE: ${{ github.event.pull_request.title }}) and use"$PR_TITLE", quoted, in the script. - Artifacts are still a bridge. An unprivileged
pull_requestbuild can upload attacker-made output that a privilegedworkflow_runjob downloads and executes. Checkout hardening doesn't help, because nothing is checked out. Treat artifacts from fork-triggered runs as untrusted data: don't execute them, and don't give that job deploy secrets.
Quick audit: grep workflows for ${{ github.event. inside run: blocks, and for workflow_run jobs that call download-artifact and then run a script.
Sources: Wiz: The Pwn Request reckoning, what still works against GitHub Actions (Oct 26)